3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

"Introduction to Vert.x"をGradleで試す

Last updated at Posted at 2017-03-26

Vert.x 3系のドキュメントに"Introduction to Vert.x"があります。ソースコードを0から組み上げて簡単な CRUD画面を作るまでが書かれていて、初めに行うチュートリアルとして優れています。しかし残念ながらMavenベースで書かれているので、Gradleではどのようにすれば良いのかが書かれていません。なので、このチュートリアルをGradleで試してみました。ソースは以下のリポジトリにあります。

とりあえず、Gradle 3系が動くようになるまでは、自力で頑張ってください。あとはMacで試しています。Linuxでも大体同じようにできると思いますが、Windowsはさらに修正がいると思います。こんな感じでGradleの実行ができれば、Gradleの導入完了です。

$ gradle --version

------------------------------------------------------------
Gradle 3.4.1
------------------------------------------------------------

Build time:   2017-03-03 19:45:41 UTC
Revision:     9eb76efdd3d034dc506c719dac2955efb5ff9a93

Groovy:       2.4.7
Ant:          Apache Ant(TM) version 1.9.6 compiled on June 29 2015
JVM:          1.8.0_101 (Oracle Corporation 25.101-b13)
OS:           Mac OS X 10.11.6 x86_64

My first Vert.x 3 Application

Let’s start !

まずはプロジェクトの新規作成を行います。

$ mkdir my-first-app
$ cd my-first-app
$ gradle init --type java-application

プロジェクト情報と、vertx-coreを参照する設定を、build.gradleに行います。

diff --git a/build.gradle b/build.gradle
index c63225d..2576243 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,6 +6,12 @@
  * user guide available at https://docs.gradle.org/3.4.1/userguide/tutorial_java_projects.html
  */

+group 'io.vertx.blog'
+version '1.0-SNAPSHOT'
+project.ext {
+      artifactId = 'my-first-app'
+}
+
 // Apply the java plugin to add support for Java
 apply plugin: 'java'

@@ -21,7 +27,7 @@ repositories {

 dependencies {
     // This dependency is found on compile classpath of this component and consumers.
-    compile 'com.google.guava:guava:20.0'
+    compile 'io.vertx:vertx-core:3.0.0'

     // Use JUnit test framework
     testCompile 'junit:junit:4.12'

Let’s code !

MyFirstVerticleクラスは、 "src/main/java/io/vertx/blog/first/MyFirstVerticle.java" に作成します。

これでコンパイルが通るようになります。

$ ./gradlew compileJava
:compileJava UP-TO-DATE

BUILD SUCCESSFUL

Total time: 2.633 secs

Let’s test

vertx-unitを参照する設定を、build.gradleに行います。

diff --git a/build.gradle b/build.gradle
index 2576243..404ca01 100644
--- a/build.gradle
+++ b/build.gradle
@@ -31,6 +31,7 @@ dependencies {

     // Use JUnit test framework
     testCompile 'junit:junit:4.12'
+    testCompile 'io.vertx:vertx-unit:3.0.0'
 }

MyFirstVerticleTestクラスは、"src/test/java/io/vertx/blog/first/MyFirstVerticleTest.java" に作成します。

これでテストが通るようになります。

$ ./gradlew test
:compileJava UP-TO-DATE
:processResources NO-SOURCE
:classes UP-TO-DATE
:compileTestJava UP-TO-DATE
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
:test UP-TO-DATE

BUILD SUCCESSFUL

Total time: 1.665 secs

Packaging

shadeはMaven用のプラグインなので、Gradleで同じような機能を持つshadowを導入します。設定はbuild.gradleに行うだけです。以下の内容を追加しています。

  • shadowプラグインを追加する
  • mainクラスをデフォルトの"App"クラスから"io.vertx.core.Starter"クラスに変更する
  • "shadowJar"タスクを追加する
$ git diff
diff --git a/build.gradle b/build.gradle
index 404ca01..c7198bb 100644
--- a/build.gradle
+++ b/build.gradle
@@ -6,6 +6,10 @@
  * user guide available at https://docs.gradle.org/3.4.1/userguide/tutorial_java_projects.html
  */

+plugins {
+    id 'com.github.johnrengelman.shadow' version '1.2.3'
+}
+
 group 'io.vertx.blog'
 version '1.0-SNAPSHOT'
 project.ext {
@@ -35,5 +39,14 @@ dependencies {
 }

 // Define the main class for the application
-mainClassName = 'App'
-
+mainClassName = 'io.vertx.core.Starter'
+
+shadowJar {
+    classifier = 'fat'
+    manifest {
+        attributes 'Main-Verticle': 'io.vertx.blog.first.MyFirstVerticle'
+    }
+    mergeServiceFiles {
+        include 'META-INF/services/io.vertx.core.spi.VerticleFactory'
+    }
+}

shadowJarタスクを実行して、fat jarファイルを作成します。ファイルは"build/libs/"ディレクトリ以下に作成されます。

$ ./gradlew shadowJar
:compileJava
:processResources NO-SOURCE
:classes
:shadowJar

BUILD SUCCESSFUL

Total time: 2.74 secs

Executing our application

以下のコマンドで起動できます。止める時は"CTRL + C"を押します。

$ java -jar build/libs/my-first-app-1.0-SNAPSHOT-fat.jar
3 26, 2017 9:59:36 午前 io.vertx.core.Starter
情報: Succeeded in deploying verticle

Vert.x Application Configuration

この章は、特筆するべきGradleだけのカスタマイズはありません。

Some Rest with Vert.x

Vert.x Web

vertx-webをclasspathに追加します。

$ git diff head^ head
diff --git a/build.gradle b/build.gradle
index c7198bb..31f115e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -32,6 +32,7 @@ repositories {
 dependencies {
     // This dependency is found on compile classpath of this component and consumers.
     compile 'io.vertx:vertx-core:3.0.0'
+    compile 'io.vertx:vertx-web:3.0.0'

     // Use JUnit test framework
     testCompile 'junit:junit:4.12'

Some Rest with Vert.x

この章は、特筆するべきGradleだけのカスタマイズはありません。

Unit and Integration Tests

Implement the plan

TODO:テスト用に空いているポートを探して、src/test/resources/my-it-config.jsonをビルド時に書き換える

既存のtestタスクについて、shadowJarに依存するようにするとの、テスト実行前にvertxプロセスを起動して、テスト終了後にvertxプロセスを終了する設定を追加する。

diff --git a/build.gradle b/build.gradle
index 31f115e..fc8c656 100644
--- a/build.gradle
+++ b/build.gradle
@@ -51,3 +51,13 @@ shadowJar {
         include 'META-INF/services/io.vertx.core.spi.VerticleFactory'
     }
 }
+
+test.dependsOn.add(shadowJar)
+test.doFirst {
+    ant.java(jar: "build/libs/${project.name}-${version}-fat.jar",
+            fork: true,
+            spawn: true)
+}
+test.doLast {
+    ['sh', '-c', "ps -ax | grep ${project.name}-${version}-fat.jar | grep -v grep | awk 'NR==1{print \$1}' | xargs kill -SIGTERM"].execute()
+}

Hey, we don’t have integration tests !

"AssertJ"と"Rest-Assured"をclasspathに追加する設定を、build.gradleに行う。

diff --git a/build.gradle b/build.gradle
index fc8c656..a5ea94a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -37,6 +37,8 @@ dependencies {
     // Use JUnit test framework
     testCompile 'junit:junit:4.12'
     testCompile 'io.vertx:vertx-unit:3.0.0'
+    testCompile "com.jayway.restassured:rest-assured:2.4.0"
+    testCompile "org.assertj:assertj-core:2.0.0"
 }

これで、Integration Testも通るようになります。

$ ./gradlew test
:compileJava
:processResources
:classes
:shadowJar
:compileTestJava
:processTestResources NO-SOURCE
:testClasses
:test

BUILD SUCCESSFUL

Total time: 9.685 secs

Using the asynchronous SQL client

この章は、特筆するべきGradleだけのカスタマイズはありません。

Combine vert.x and mongo to build a giant

TODO: 試してみる(今の所mongoに興味がないので、パスしてます :-p)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?