[JAVA] Essayez «Introduction à Vert.x» avec Gradle

Il y a "Introduction à Vert.x" dans les documents de la série Vert.x 3. Il décrit comment assembler le code source à partir de zéro pour créer un écran CRUD simple, ce qui est un excellent premier tutoriel. Mais malheureusement, il est écrit sur la base de Maven, donc Gradle ne dit pas comment le faire. J'ai donc essayé ce tutoriel sur Gradle. La source se trouve dans le référentiel suivant.

https://github.com/nakaken0629/my-first-app

Pour le moment, faites de votre mieux par vous-même jusqu'à ce que la série Gradle 3 fonctionne. J'essaye sur un Mac. Je pense que vous pouvez faire la même chose avec Linux, mais je pense que Windows a plus de correctifs. Si vous pouvez exécuter Gradle de cette façon, l'installation de Gradle est terminée.

$ 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 !

Commencez par créer un nouveau projet.

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

Définissez les informations du projet et le paramètre pour faire référence à vertx-core dans 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 !

Créez la classe MyFirstVerticle dans "src / main / java / io / vertx / blog / first / MyFirstVerticle.java".

Maintenant, la compilation passera.

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

BUILD SUCCESSFUL

Total time: 2.633 secs

Let’s test

Définissez la référence à vertx-unit dans 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'
 }

Créez la classe MyFirstVerticleTest dans "src / test / java / io / vertx / blog / first / MyFirstVerticleTest.java".

Le test va maintenant réussir.

$ ./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

Étant donné que l'ombre est un plug-in pour Maven, nous allons introduire l'ombre avec une fonction similaire dans Gradle. Tout ce que vous avez à faire est de le définir dans build.gradle. Le contenu suivant a été ajouté.

$ 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'
+    }
+}

Exécutez la tâche shadowJar pour créer un gros fichier jar. Le fichier sera créé dans le répertoire "build / libs /".

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

BUILD SUCCESSFUL

Total time: 2.74 secs

Executing our application

Vous pouvez le démarrer avec la commande suivante. Appuyez sur "CTRL + C" pour arrêter.

$ java -jar build/libs/my-first-app-1.0-SNAPSHOT-fat.jar
3 26, 2017 9:59:36 heures du matin.vertx.core.Starter
information: Succeeded in deploying verticle

Vert.x Application Configuration

Ce chapitre ne contient aucune personnalisation notable uniquement pour Gradle.

Some Rest with Vert.x

Vert.x Web

Ajoutez vertx-web au 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

Ce chapitre ne contient aucune personnalisation notable uniquement pour Gradle.

Unit and Integration Tests

Implement the plan

TODO: Trouvez un port gratuit pour tester et réécrire src / test / resources / my-it-config.json au moment de la construction

Ajoutez un paramètre pour démarrer le processus vertx avant d'exécuter le test et terminer le processus vertx une fois le test terminé en rendant la tâche de test existante dépendante de shadowJar.

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 !

Définissez build.gradle pour ajouter «AssertJ» et «Rest-Assured» au chemin de classe.

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"
 }

Vous pouvez désormais également réussir le test d'intégration.

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

BUILD SUCCESSFUL

Total time: 9.685 secs

Using the asynchronous SQL client

Ce chapitre ne contient aucune personnalisation notable uniquement pour Gradle.

Combine vert.x and mongo to build a giant

TODO: Essayez-le (je ne suis pas intéressé par mongo pour l'instant, donc je le passe :-p)

Recommended Posts

Essayez «Introduction à Vert.x» avec Gradle
[Introduction] Créer une application Ruby on Rails
Introduction à Ruby 2
Introduction à Micronaut 1 ~ Introduction ~
Introduction à la migration
Introduction à Java
Introduction à Doma
Essayez de créer un environnement Java 8 sur Amazon Linux2
Introduction à kotlin pour les développeurs iOS ③-À propos de gradle
Essayez d'afficher Hello World avec Spring + Gradle
Introduction aux fichiers JAR
Essayez de libérer la gemme
Introduction à Ratpack (8) - Session
Essayez DisplayLink sur Ubuntu 20.04
Essayez OpenLiteSpeed sur CentOS8
Introduction à l'arithmétique des bits
Introduction à Ratpack (6) - Promesse
Introduction à Ratpack (9) --Thymeleaf
Introduction à PlayFramework 2.7 ① Présentation
Introduction à la mise en page Android
Introduction aux modèles de conception (introduction)
Introduction à la commande javadoc
Introduction à la commande jar
Introduction à Ratpack (2) -Architecture
Introduction au style lambda
Essayons Zoomdata (Introduction)
Comment utiliser Gradle
Introduction au développement de Keycloak
Introduction à la commande javac
<Installation de points> Introduction à Ruby on Rails5 Comparaison du code source
Essayez Rabbit MQ + PHP sur CentOS
Introduction aux modèles de conception (Builder)
Essayez Spring Boot de 0 à 100.
Gradle pour toucher et se souvenir
Introduction à Ratpack (5) --Json & Registry
Essayez Docker sur Windows 10 Famille
Comment déployer avec heroku
Introduction à la métabase ~ Construction de l'environnement ~
Introduction à Ratpack (7) --Guice & Spring
(Installation par points) Introduction à Java8_Impression
Introduction aux modèles de conception (composite)
Introduction à Micronaut 2 ~ Test unitaire ~
Introduction à JUnit (note d'étude)
Introduction à Spring Boot ① ~ DI ~
Introduction aux modèles de conception (poids mouche)
[Java] Introduction à l'expression lambda
Introduction à Spring Boot ② ~ AOP ~
Introduction à Apache Beam (2) ~ ParDo ~
Introduction à l'API EHRbase 2-REST
Introduction au prototype de modèles de conception
[Java] Introduction à l'API Stream
Introduction aux modèles de conception (Iterator)
Introduction à Spring Boot, partie 1