QUARKUS で作る爆速 Java Micro Service #1

Kenta Kosugi
13 min readSep 20, 2019

--

QUARKUS とは

QUARKUS については Publicky の記事をご確認ください。

準備

Mac を利用していることを前提にします。

Java8

Java8 が必要になります。一度 Java11 で QUAKRUS を試しましたが、不明なエラーが発生し問題解決に時間がかかりそうな感じだったため、Java8 で実施することを強く推奨します。
OpenJDK のホームページから Java8 をダウンロードしてください。brew でインストールするのも手です。

Maven

Maven 3.5 + が必要になります。brew などを利用して 3.5 以上の Maven をダウンロードしてください。QUARKUS のサイトでは Gradle も利用できそうな記述がされていますが、Gradle を試したところ上手くいかないことが多かったため、Maven で実施することを推奨します。

今回検証した環境は以下になっています。

Java と Maven のバージョン

Hello World プロジェクトの作成

Mavenのアーキタイプを指定してプロジェクトの雛形を作成します。

$ mvn io.quarkus:quarkus-maven-plugin:0.22.0:create \
> -DprojectGroupId=com.redhat \
> -DprojectArtifactId=quarkus-sample \
> -DclassName="com.redhat.quarkus_sample.HelloWorld" \
> -Dpath="/hello"
プロジェクト作成

アーキタイプを利用した 2 回目以降のプロジェクト作成では左図のようなログになりますが、初めての QUARKUS プロジェクト作成の場合、Maven リポジトリから QUARKUS 関連のアーティファクトが色々ダウンロードされるため、左のログのようにはなりません。

find コマンドを利用してフォルダ構成を確認してみます。

$ find ./quarkus-sample/
./quarkus-sample/
./quarkus-sample//mvnw.cmd
./quarkus-sample//pom.xml
./quarkus-sample//.dockerignore
./quarkus-sample//.gitignore
./quarkus-sample//.mvn
./quarkus-sample//.mvn/wrapper
./quarkus-sample//.mvn/wrapper/MavenWrapperDownloader.java
./quarkus-sample//.mvn/wrapper/maven-wrapper.properties
./quarkus-sample//.mvn/wrapper/maven-wrapper.jar
./quarkus-sample//mvnw
./quarkus-sample//src
./quarkus-sample//src/test
./quarkus-sample//src/test/java
./quarkus-sample//src/test/java/com
./quarkus-sample//src/test/java/com/redhat
./quarkus-sample//src/test/java/com/redhat/quarkus_sample
./quarkus-sample//src/test/java/com/redhat/quarkus_sample/NativeHelloWorldIT.java
./quarkus-sample//src/test/java/com/redhat/quarkus_sample/HelloWorldTest.java
./quarkus-sample//src/main
./quarkus-sample//src/main/docker
./quarkus-sample//src/main/docker/Dockerfile.native
./quarkus-sample//src/main/docker/Dockerfile.jvm
./quarkus-sample//src/main/resources
./quarkus-sample//src/main/resources/META-INF
./quarkus-sample//src/main/resources/META-INF/resources
./quarkus-sample//src/main/resources/META-INF/resources/index.html
./quarkus-sample//src/main/resources/application.properties
./quarkus-sample//src/main/java
./quarkus-sample//src/main/java/com
./quarkus-sample//src/main/java/com/redhat
./quarkus-sample//src/main/java/com/redhat/quarkus_sample
./quarkus-sample//src/main/java/com/redhat/quarkus_sample/HelloWorld.java

src/main/resources/META-INF/resources/index.html は利用しないからと言って削除したりすると動作しなくなります。ドキュメントには記載がないので注意が必要です。

HelloWorld.java の中身

package com.redhat.quarkus_sample;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class HelloWorld {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "hello";
}
}

TEXT_PLAIN で hello を返却するだけの単純な REST となっています。見た所、JAX-RS を利用しています。

Hello World プロジェクトのビルド

mvn package コマンドを利用してプロジェクトをビルドして jar を作成しましょう。

$ mvn package
[INFO] Scanning for projects...
[INFO]
[INFO] ---------------------< com.redhat:quarkus-sample >----------------------
[INFO] Building quarkus-sample 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ quarkus-sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ quarkus-sample ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/kkosugi/quarkus-sample/target/classes
[INFO]
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ quarkus-sample ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/kkosugi/quarkus-sample/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ quarkus-sample ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 2 source files to /Users/kkosugi/quarkus-sample/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.0:test (default-test) @ quarkus-sample ---
[INFO]
[INFO] -------------------------------------------------------
[INFO] T E S T S
[INFO] -------------------------------------------------------
[INFO] Running com.redhat.quarkus_sample.HelloWorldTest
2019-09-20 16:11:32,450 INFO [io.qua.dep.QuarkusAugmentor] (main) Beginning quarkus augmentation
2019-09-20 16:11:33,126 INFO [io.qua.dep.QuarkusAugmentor] (main) Quarkus augmentation completed in 676ms
2019-09-20 16:11:33,531 INFO [io.quarkus] (main) Quarkus 0.22.0 started in 0.403s. Listening on: http://[::]:8081
2019-09-20 16:11:33,531 INFO [io.quarkus] (main) Installed features: [cdi, resteasy]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.631 s - in com.redhat.quarkus_sample.HelloWorldTest
2019-09-20 16:11:34,414 INFO [io.quarkus] (main) Quarkus stopped in 0.004s
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ quarkus-sample ---
[INFO] Building jar: /Users/kkosugi/quarkus-sample/target/quarkus-sample-1.0-SNAPSHOT.jar
[INFO]
[INFO] --- quarkus-maven-plugin:0.22.0:build (default) @ quarkus-sample ---
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Beginning quarkus augmentation
[INFO] [org.jboss.threads] JBoss Threads version 3.0.0.Beta5
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 751ms
[INFO] [io.quarkus.creator.phase.runnerjar.RunnerJarPhase] Building jar: /Users/kkosugi/quarkus-sample/target/quarkus-sample-1.0-SNAPSHOT-runner.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 7.474 s
[INFO] Finished at: 2019-09-20T16:11:36+09:00

target ディレクトリに以下の 2 種類の jar ファイルができます。この段階ではまだ Linux のバイナリには置き換わっていません。

  • quarkus-sample-1.0-SNAPSHOT-runner.jar
  • quarkus-sample-1.0-SNAPSHOT.jar

runner とついている方が FatJar と呼ばれている Jar ファイルで QUARKUS のライブラリ群も jar としてパッケージングされているため、それだけで起動することができます。

Hello World プロジェクトの起動

$ java -jar ./target/quarkus-sample-1.0-SNAPSHOT-runner.jar
QUARKUS の起動

上記の画面になったら、ブラウザを開いて以下の URL を開いてください。

http://localhost:8080/hello

hello world

上記のように Hello と表示されたら成功です。ターミナルを終了してください。

次回は Docker イメージに含めるよう、Linux バイナリとして出力します。

--

--

Kenta Kosugi
Kenta Kosugi

Written by Kenta Kosugi

Javaアプリケーションサーバーの開発からCORBA製品のサポート、QA、証券外務員(第一種免許)、ストレージ屋、アーキテクト、SaaS屋と一貫性のない道を歩んでいます。Red Hatに復帰しました。

No responses yet