Nous allons modifier un projet Maven et le pipeline GitLab CI/CD associé afin d’utiliser Maven Wrapper.

Pourquoi utiliser Maven Wrapper ?

Maven Wrapper est un outil qui permet d’encapsuler complètement l’utilisation de Maven. Un avantage est de simplifier la vie du développeur qui n’a plus besoin d’installer Maven sur son poste: c’est le wrapper qui gère cela. Cet outil permet également de fixer la version de Maven pour un projet et donc de s’assurer que tous les développeurs utilise la même version de Maven.

Transformer un projet Maven classique en Maven Wrapper

Le plugin Maven Takari Maven Plugin permet d’installer Maven Wrapper en précisant la version de Maven à utiliser (3.5.2 ci-dessous):

mvn -N io.takari:maven:wrapper -Dmaven=3.5.2

En lançant cette commande à la racine du projet, les fichiers suivants seront crées et devront être ajoutés au gestionnaire de source:

Rapport des tests unitaires

Désormais, pour compiler le projet il suffit de lancer la commande ./mvnw compile ou mvnw.cmd compile sous Windows.

Modification du pipeline GitLab CI/CD

Nous allons modifier un manifeste .gitlab-ci.yml rudimentaire. Le manifeste ci-dessous utilise Maven pour compiler le projet via le job build:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
image: maven:latest

variables:
  MAVEN_CLI_OPTS: "--batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/

build:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS compile

Les modifications à apporter sont:

  • L’image Docker définie à la ligne 1 doit être modifiée: une image contenant un JDK suffit
  • A la ligne 14, Il faut utiliser la commande mvnw à la place de la commande mvn.

Le résultat:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
image: openjdk:8-jdk-alpine

variables:
  MAVEN_CLI_OPTS: "--batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/

build:
  stage: build
  script:
    - ./mvnw $MAVEN_CLI_OPTS compile

Bonus pour les utilisateurs de Windows

Les utilisateurs Windows vont sûrement rencontrer l’erreur suivante:

Command couldn't be executed: fork/exec /tmp/app/mvnw: permission denied

Il faut rendre le fichier mvnw exécutable. Pour cela, il faut lancer cette commande git git update-index --chmod=+x mvnw sur son poste et ne pas oublier de “pusher” le tout.

Conclusion

Migrer de Maven à Maven Wrapper demande peu d’effort et vous évitera de perdre du temps à vérifier l’installation de Maven sur les postes des membres de l’équipe :)

Des liens: