Episode IV - Gradle, un Nouvel Espoir
Vous vous rendez compte de la supercherie de votre maître et suite à un combat épique contre lui, vous êtes sauvé par Master Gradle, le Jedi légendaire.
Vous le suivez et devenez son Padawan pour sortir du côté obscure de la Force.
cd hands-on-jigsaw-devfest/66-jedi
Suivre le chemin des Jedi: configurer Gradle
Contrairement à Maven, avec Gradle, vous devez configurer les étapes de build et de run pour intégrer les modules.
C3P0_H3LP
Bien qu'il existe des plugins Gradle qui permettent d'abstraire cette configuration (comme le plugin
chainsaw
), ceux-ci sont loin d'être stables et sont teintés du côté obscure.
Ajouter dans l'ensemble des définitions de build gradle (fichiers $$repertoire_du_module$$\build.gradle
) une ExtraPropertyExtension
qui aura le nom de votre module (voir exemple). Cette propriété sera utilisée lors des builds Gradle pour identifier votre module.
ext.moduleName = "<my.module>"
Une fois que cela est fait, il faut modifier le fichier build.gradle
racine pour configurer Gradle.
- Redéfinir la tâche
compileJava
pour ajouter dans l'argument--module-path
les valeurs retournées parclasspath.asPath
. - Redéfinir la tâche
compileTestJava
pour configurerjavac
avec les arguments--module-path
,--add-module
,--add-reads
,--patch-module
. - Redéfinir la tâche
test
pour configurerjavac
avec les arguments--module-path
,--add-module
,--add-reads
,--patch-module
.
C3P0_H3LP
classpath.asPath
retourne le classpath tel que calculé en fonction des dépendances définies dans le projet gradle.
Encore une fois n'hésitez à vous appuyer sur les archives de votre droïde en cas de problème(s)!
starwars-vertx-http-server/build.gradle
- Redéfinir sur la tâche
run
pour ajouter les arguments jvm--modulePath
et--module
. - Redéfinir sur la tâche
startScripts
avec le contenu suivant.
import java.util.regex.Matcher // Matcher is use for replacing args in batchs files
...
startScripts {
inputs.property("moduleName", moduleName)
doFirst {
classpath = files()
defaultJvmOpts = [
'--module-path', 'APP_HOME_LIBS', // Multi plateform replace in doLast
'-Dport=8080', '-Ddev=false',
'--module', mainClassName
]
}
doLast{
def bashFile = new File(outputDir, applicationName)
String bashContent = bashFile.text
bashFile.text = bashContent.replaceFirst('APP_HOME_LIBS', Matcher.quoteReplacement('$APP_HOME/lib'))
def batFile = new File(outputDir, applicationName + ".bat")
String batContent = batFile.text
batFile.text = batContent.replaceFirst('APP_HOME_LIBS', Matcher.quoteReplacement('%APP_HOME%\\lib'))
}
}
Builder et lancer votre serveur, qui doit fonctionner comme avant!
./gradlew test run
Si vous vous connectez à l'application et regardez la page informations, vous devriez avoir cela :
application lancée avec Jigsaw
Bravo vous avez réussi à utiliser la force sans le côté obscure. Il est maintenant temps pour vous de devenir un maître Jedi! Si la force est avec vous, rendez-vous dans l'épisode suivant.