Pourquoi?#

Changement de job, changement de culture, changement de techno, après plus de 10 ans de bons et loyaux services, je vais remplacer maven par gradle pour la construction de mes applications.

Pourquoi changer alors que ca fonctionne bien?

Gradle offre deux avantages majeurs par rapport à Maven :

Il est difficile de revenir en arrière après ça et si vous n’êtes toujours pas convaincu, Gradle en a encore sous le coude avec ses autres atouts

Comment?#

Il est assez simple de migrer un projet Maven vers Gradle.

  1. Installez Gradle
  2. Utilisez la commande gradle init à la racine de son projet Maven
 1❯ gradle init
 2
 3Found a Maven build. Generate a Gradle build from this? (default: yes) [yes, no] yes
 4
 5Select build script DSL:
 6  1: Groovy
 7  2: Kotlin
 8Enter selection (default: Groovy) [1..2] 1
 9
10Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no] yes
11
12> Task :init
13Maven to Gradle conversion is an incubating feature.
14Get more help with your project: https://docs.gradle.org/7.4.2/userguide/migrating_from_maven.html
15
16BUILD SUCCESSFUL in 12s
172 actionable tasks: 1 executed, 1 up-to-date

Si vous êtes derrière un proxy d’entreprise, vous risquez d’avoir le message d’erreur suivant:

 1> Task :init FAILED
 2
 3FAILURE: Build failed with an exception.
 4
 5* What went wrong:
 6Execution failed for task ':init'.
 7> Could not resolve all files for configuration ':detachedConfiguration1'.
 8   > Could not resolve org.apache.maven:maven-core:3.6.3.
 9     Required by:
10         project :
11      > Could not resolve org.apache.maven:maven-core:3.6.3.
12         > Could not get resource 'https://repo.maven.apache.org/maven2/org/apache/maven/maven-core/3.6.3/maven-core-3.6.3.pom'.
13            > Could not HEAD 'https://repo.maven.apache.org/maven2/org/apache/maven/maven-core/3.6.3/maven-core-3.6.3.pom'.
14               > Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.8.215] failed: connect timed out
15   > Could not resolve org.apache.maven:maven-plugin-api:3.6.3.
16     Required by:
17         project :
18      > Could not resolve org.apache.maven:maven-plugin-api:3.6.3.
19         > Could not get resource 'https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/3.6.3/maven-plugin-api-3.6.3.pom'.
20            > Could not HEAD 'https://repo.maven.apache.org/maven2/org/apache/maven/maven-plugin-api/3.6.3/maven-plugin-api-3.6.3.pom'.
21               > Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.8.215] failed: connect timed out
22   > Could not resolve org.apache.maven:maven-compat:3.6.3.
23     Required by:
24         project :
25      > Could not resolve org.apache.maven:maven-compat:3.6.3.
26         > Could not get resource 'https://repo.maven.apache.org/maven2/org/apache/maven/maven-compat/3.6.3/maven-compat-3.6.3.pom'.
27            > Could not HEAD 'https://repo.maven.apache.org/maven2/org/apache/maven/maven-compat/3.6.3/maven-compat-3.6.3.pom'.
28               > Connect to repo.maven.apache.org:443 [repo.maven.apache.org/151.101.8.215] failed: connect timed out

Pour cela, il vous suffira de créer à la racine de votre projet, le fichier gradle.properties avec la configuration de votre proxy:

 1#HTTP-PROXY
 2systemProp.http.proxyHost=www.somehost.org
 3systemProp.http.proxyPort=8080
 4systemProp.http.proxyUser=userid
 5systemProp.http.proxyPassword=password
 6#HTTPS-PROXY
 7systemProp.https.proxyHost=www.somehost.org
 8systemProp.https.proxyPort=8080
 9systemProp.https.proxyUser=userid
10systemProp.https.proxyPassword=password
11#NON-PROXY
12systemProp.http.nonProxyHosts=*.nonproxyrepos.com|localhost

Si vous avez encore un problème?#

  • Sur Ubuntu 20.04 et la version snap de Gradle 7.2, j’ai été dans l’impossibilité d’appliquer la configuration de mon serveur proxy. La seule solution a été d’installer un wrapper gradle récent gradle wrapper --gradle-version 7.4.2 et ensuite de l’utiliser pour lancer la migration du projet Maven avec ./gradlew init comme expliqué précédement.
  • Impossible non plus d’utiliser votre repository d’entreprise style Nexus ou Artifactory pour faire la migration. J’ai essayé d’appliquer une configuration dans le fichier init.gradle mais sans succès. Il est nécessaire de sortir du réseau d’entreprise à travers son proxy pour pouvoir migrer son projet