Chapitre Construire un projet Java avec Gradle
Utilisation d'une bibliothèque externe dans votre build gradle
Dans cet exercice, nous allons migrer un projet simple Maven en Gradle et étudier les étapes nécessaires.
Content
Plugins recommandés
Nous recommandons les plugins:
| Plugin Maven | Plugin Gradle | | ------------------------ | ---------------------------------------------------------------------- | | maven-compiler-plugin | java | | maven-deploy-plugin | maven-publish, signing | | sonarqube | id "org.sonarqube" version "3.2.0" id("org.sonarqube") version "3.2.0" | | maven-javadoc-plugin | java-library | | maven-checkstyle-plugin | checkstyle | | buildnumber-maven-plugin | Custom task required | | maven-shade-plugin | application or id 'com.github.johnrengelman.shadow' version '7.0.0' | | ssh-wagon-plugin | id ' org.hidetake.ssh ' version ' x.y.z ' |
Clone du projet
Nous allons cloner le projet lien pour tenter la migration de ce projet en Gradle.
Création de la base du projet
- Créer un fichier
build.gradle
etsettings.gradle
etgradle.properties
Ajouter le wrapper gradle
Déclarer le nom du projet
Pour information, le nom du projet est déclaré dans settings.gradle
Vérifier avec gradle tasks
que le nom a bien été pris en compte.
Déclarer deux propriétés pour groupId et version
Reproduire les valeurs de groupId
et version
du projet Maven dans la configuration Gradle.
Astuce : les valeurs peuvent être reproduites dans gradle.properties et l'affectation dans build.gradle.
Plus de détails sur OReilly. et DSL
Identifier le type de projet Maven
Est-ce un projet Maven de type library , application ou bien WAR ou autre ?
Appliquer notre premier plugin, application
Nous allons utiliser le plugin application fourni par Gradle.
plugins {
id 'application'
}
Rappel, un plugin peut importer d'autres plugins, une astuce est d'utiliser :
project.plugins.each {
println it
}
Définissez le chemin vers la classe qui sera exécutée :
application {
mainClass = 'nomClasse'
}
Ajout des dépendances
- Créer un répertoire
gradle
pour déclarer le catalogue de versions pour la gestion de dépendances voir la documentation.
Exemple libs.versions.toml
(voir DSL TOML)
- Ajouter le repository Maven Central et Maven Local
- Ajouter une balise
dependencies
- Déclarer le catalogue de versions
dependencyResolutionManagement {
versionCatalogs {
libs {
from(files("./gradle/libs.version.toml"))
}
}
}
- Ajouter les dépendances en faisant attention aux configurations.
Voici une liste de liens utiles :
- Déclaration des settings : Doc Gradle
Configuration du compilateur Java
Reportez la configuration du compilateur Java depuis Maven en suivant la documentation compilateur java et Building java projects.
Configuration du plugin Javadoc
Suivre la documentation de cette page pour générer la Javadoc.
### Mettre à jour le packaging
Déclarer que le packaging doit inclure les sources et la javadoc en suivant.
Utiliser également cette section pour déclarer le uber jar.
Bonus : installer Checkstyle
Suivre la documentation pour migrer le plugin checkstyle.
### Bonus : installer SpotBugs
Suivre la documentation pour installer le plugin SpotBugs.
## Solution
plugins {
id 'application'
id 'java'
}
project.plugins.each {
println it
}
group=GROUP_ID
version=VERSION
java {
toolchain {
languageVersion = JavaLanguageVersion.of(8)
}
withJavadocJar()
withSourcesJar()
}
configurations {
asciidoclet
}
dependencies {
asciidoclet 'org.asciidoctor:asciidoclet:1.+'
}
tasks.register('configureJavadoc') {
doLast {
javadoc {
options.doclet = 'org.asciidoctor.Asciidoclet'
options.docletpath = configurations.asciidoclet.files.toList()
}
}
}
javadoc {
dependsOn configureJavadoc
}
tasks.register('uberJar', Jar) {
archiveClassifier = 'uber'
from sourceSets.main.output
dependsOn configurations.runtimeClasspath
from {
configurations.runtimeClasspath.findAll { it.name.endsWith('jar') }.collect { zipTree(it) }
}
}
dependencies {
testImplementation libs.bundles.junit
}
application {
mainClass = 'org.pirola.maven.example.MavenExample'
}
Settings.gradle:
pluginManagement {
repositories {
gradlePluginPortal()
}
}
rootProject.name="maven-example-project-for-java"
dependencyResolutionManagement {
repositories {
mavenCentral()
mavenLocal()
}
versionCatalogs {
libs {
from(files("./gradle/libs.version.toml"))
}
}
}
gradle.properties :
GROUP_ID=org.pirola.maven.example
VERSION=2.0
libs.version.toml:
[versions]
junit = "4.12"
[libraries]
junit_lib = { module = "junit:junit", version.ref = "junit" }
[bundles]
junit = ["junit_lib"]
[plugins]
#versions = { id = "com.github.ben-manes.versions", version = "0.45.0" }