...
"feat: #<NUM_TICKET>, migration Maven"
Portage
pom.xml
Pour un module SANS création de JARs
Reprendre le squelette ci-desousdessous, adapter en suivant les commentaires.
Bloc de code |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>fr.wseduc</groupId> <!--<parent>
Vient de gradle.properties > modowner --> <artifactId>mod-zip</artifactId><<groupId>io.edifice</groupId>
<artifactId>edifice-parent</artifactId>
<version>1.0</version>
</parent>
<groupId>fr.wseduc</groupId><!-- Vient de gradle.properties > modnamemodowner -->
<version>3.0-b2school-SNAPSHOT</version><<artifactId>web-utils</artifactId><!-- Vient de gradle.properties > versionmodname -->
<properties> <version>3.0-b2school-SNAPSHOT</version><!-- Vient de <java.version>1.8</java.version>
gradle.properties > version -->
<repositories>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version><repository>
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version> <vertx.version>4.4.5</vertx.version> <id>ode</id>
<web-utils.version>2.0.0</web-utils.version> <jacksonDatabindVersion>2.15.2</jacksonDatabindVersion> </properties> <scm><!-- À ajuster en fonction de l'url GitHub/GitLab --><name>ODE Repository</name>
<connection>scm:git:https<url>https://githubmaven.opendigitaleducation.com/nexus/content/opendigitaleducation/mod-zip.git</connection>groups/public</url>
<developerConnection>scm:git:https://github.com/opendigitaleducation/mod-zip.git</developerConnection> </repository>
<url>https://github.com/opendigitaleducation/mod-zip</url></repositories>
</scm> <properties><!-- <repositories>Reporter les versions des dépendances <repository>de gradle.properties > -->
<id>ode</id> <jacksonDatabindVersion>2.15.2</jacksonDatabindVersion>
<name>ODE Repository<</name>properties>
<url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url>
</repository>
</repositories>
<distributionManagement><dependencies><!-- Reporter les dépendances qui étaient dans build.gradle > dependencies -->
<snapshotRepository> <dependency>
<id>ode-snapshots</id> <name>Snapshots</name><groupId>com.fasterxml.jackson.core</groupId>
<url>https://maven.opendigitaleducation.com/nexus/content/repositories/snapshots/</url> </snapshotRepository><artifactId>jackson-databind</artifactId>
<repository> <id>ode-releases</id><version>${jacksonDatabindVersion}</version>
<name>Releases</name> <url>https://maven.opendigitaleducation.com/nexus/content/repositories/releases/</url><scope>provided</scope>
</repository> </distributionManagement>dependency>
<dependencies>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>${vertx.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>fr.wseduc</groupId>
<artifactId>web-utils</artifactId>
<version>${web-utils.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jacksonDatabindVersion}</version>
<scope>provided</scope>
</dependency>
<!-- Ajouter les autres dépendances qui étaient dans build.gradle > dependencies -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>validate</phase>
<goals><goal>create</goal></goals>
</execution>
</executions>
<configuration>
<getRevisionOnlyOnce>true</getRevisionOnlyOnce>
<shortRevisionLength>8</shortRevisionLength>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalName>${project.groupId}~${project.artifactId}~${project.version}-fat</finalName>
<!--transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>your.main.class.name</mainClass>
</transformer>
</transformers-->
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.2</version> <!-- Use the latest version -->
<configuration>
<archive>
<manifestEntries> </dependencies>
</project> |
Pour un module AVEC création de JARs (.jar, -fat.jar, -test.jar, -deployment.jar)
Reprendre le squelette ci-desous, adapter en suivant les commentaires.
Bloc de code |
---|
|
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
<Build-Time>${maven.build.timestamp}</Build-Time>xmlns="http://maven.apache.org/POM/4.0.0"
<Main-Verticle>service:mod</Main-Verticle>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<SCM-Commit-Id>${buildNumber}</SCM-Commit-Id> <groupId>io.edifice</groupId>
<SCM-Branch>${scmBranch}</SCM-Branch>
<artifactId>app-parent</artifactId>
</manifestEntries> <version>1.0</version>
</archive>parent>
<groupId>net.atos</groupId><!-- Vient </configuration>
de gradle.properties > modowner -->
</plugin>
<artifactId>actualites</artifactId><!-- Vient de gradle.properties > modname -->
<plugin> <version>2.0-b2school-SNAPSHOT</version> <!-- Vient de gradle.properties > version <artifactId>maven-resources-plugin</artifactId>>
<version>2.6</version>
<executions> <scm><!-- Adapter avec l'url du repertoire (github, gitlab...) -->
<connection>scm:git:https://github.com/OPEN-ENT-NG/actualites.git</connection>
<execution> <id>copy-resources</id><developerConnection>scm:git:https://github.com/OPEN-ENT-NG/actualites.git</developerConnection>
<phase>validate</phase>
<url>https://github.com/OPEN-ENT-NG/actualites</url>
</scm>
<goals> <repositories>
<repository>
<goal>copy-resources</goal> </goals><id>ode</id>
<configuration><name>ODE Repository</name>
<outputDirectory>${basedir}/target/classes</outputDirectory><url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url>
<includeEmptyDirs>true</includeEmptyDirs></repository>
</repositories>
<resources><properties><!-- Reporter les versions des dépendances de gradle.properties -->
<resource><web-utils.version>3.0-b2school-SNAPSHOT</web-utils.version>
</properties>
<dependencies><!-- Reporter les dépendances qui étaient <directory>${basedir}/deployment</directory>
dans build.gradle > dependencies -->
<dependency>
<filtering>false</filtering> <groupId>io.vertx</groupId>
</resource> <artifactId>vertx-core</artifactId>
<version>${vertxVersion}</resources>version>
<<scope>provided</configuration>scope>
</dependency>
</execution> <dependency>
</executions> </plugin><groupId>fr.wseduc</groupId>
<plugin> <artifactId>web-utils</artifactId>
<artifactId>maven-compiler-plugin</artifactId> <version>${mavenweb-compiler-pluginutils.version}</version>
<configuration> <scope>compile</scope>
</dependency>
<source>${java.version}</source>
</dependencies>
</project> |
docker-compose.yml
Remplacer le service gradle par le service maven
tel que décrit plus bas.
Bloc de code |
---|
|
services:
maven:
<target>${java.version}</target>image: maven:3.8.6-jdk-8
</configuration>user: "$DEFAULT_DOCKER_USER"
</plugin>working_dir: /usr/src/maven
volumes:
<plugin> <artifactId>maven-surefire-plugin</artifactId>- ./:/usr/src/maven
<version>${maven-surefire-plugin.version}</version>- ~/.m2:/var/maven/.m2
</plugin>environment:
</plugins> </build>
</project>
|
docker-compose.yml
...
MAVEN_CONFIG: /var/maven/.m2 |
build.sh
Ajouter au début du fichier la variable MVN_OPTS tel que décrit ci-dessous.
Bloc de code |
---|
|
MVN_OPTS="-Duser.home=/var/maven" |
Remplacer les appels au service gradle par des appels au service maven tel que ci-dessous.
Avant:
Bloc de code |
---|
Bloc de code |
---|
|
docker- |
version: "3"
services:
maven:
image: maven:3.8.6-jdk-8
user: "$DEFAULT_DOCKER_USER"
working_dir: /usr/src/maven
volumes:
- ./:/usr/src/maven
- ~/.m2:/var/maven/.m2
environment:
MAVEN_CONFIG: /var/maven/.m2 |
build.sh
Ajouter au début du fichier la variable MVN_OPTS tel que décrit ci-dessous.
Bloc de code |
---|
|
MVN_OPTS="-Duser.home=/var/maven" |
Remplacer les appels au service gradle par des appels au service maven tel que ci-dessous.
Avant:
|
docker-compose run --rm -u "$USER_UID:$GROUP_GID" gradle gradle clean |
Après :
Bloc de code |
---|
|
docker compose run --rm maven mvn $MVN_OPTS clean |
Ajouter les méthodes init
, install
et test
et les ajouter à la liste des options supportées (la méthode install
remplace buildGradle
)
Bloc de code |
---|
|
init() {
me=`id -u`:`id -g`
echo "DEFAULT_DOCKER_USER=$me" > .env
}
...
install () {
docker compose run --rm maven mvn $MVN_OPTS install -DskipTests
}
test () {
docker compose run --rm -u "$USER_UID:$GROUP_GID" gradle gradle clean |
Après :
Bloc de code |
---|
|
docker-compose run --rm maven mvn $MVN_OPTS clean |
Ajouter les méthodes init
, install
et test
et les ajouter à la liste des options supportées (la méthode install
remplace buildGradle
)
Bloc de code |
---|
|
init() {
me=`id -u`:`id -g`
echo "DEFAULT_DOCKER_USER=$me" > .env
}maven mvn $MVN_OPTS test
}
...
for param in "$@"
do
case $param in
init)
init
;;
...
install (
install)
{ docker-compose run --rm maveninstall
mvn $MVN_OPTS install -DskipTests } test;; ()
{ docker-compose runtest)
--rm maven mvn $MVN_OPTS test } ...test
for param in "$@" do ;;
case $param in
init)
... |
Modifier la méthode publish pour qu’elle soit équivalente à celle écrite ci-dessous :
Bloc de code |
---|
|
publish() {
version=`docker compose run init--rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q ;;-DforceStdout`
level=`echo $version | cut
...
-d'-' -f3`
case "$level" in
install) *SNAPSHOT) export nexusRepository='snapshots' ;;
install *) ;; test)
export nexusRepository='releases' ;;
esac
test docker compose run --rm ;;maven mvn -DrepositoryId=ode-$nexusRepository
... |
Modifier la méthode publish pour qu’elle soit équivalente à celle écrite ci-dessous :
Bloc de code |
---|
|
publish-DskipTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
} |
Exemple complet :
Bloc de code |
---|
|
#!/bin/bash
MVN_OPTS="-Duser.home=/var/maven"
init() {
version=`docker-compose run --rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q -DforceStdout`
level=`echo $version | cut -d'-' -f3`
case "$level" in
*SNAPSHOT) export nexusRepository='snapshots' ;;
*) export nexusRepository='releases' ;;
esac
docker-me=`id -u`:`id -g`
echo "DEFAULT_DOCKER_USER=$me" > .env
}
clean () {
docker compose run --rm maven mvn $MVN_OPTS clean
}
install () {
docker compose run --rm maven mvn $MVN_OPTS install -DskipTests
}
test () {
docker compose run --rm maven mvn -DrepositoryId=ode-$nexusRepository -DskiptTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
} |
Exemple complet :
Bloc de code |
---|
|
#!/bin/bash
MVN_OPTS="-Duser.home=/var/maven"
init() {
me=`id -u`:`id -g`
echo "DEFAULT_DOCKER_USER=$me" > .env
}
clean () {
docker-compose run --rm maven mvn $MVN_OPTS clean
}
install () {
docker- $MVN_OPTS test
}
publish() {
version=`docker compose run --rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q -DforceStdout`
level=`echo $version | cut -d'-' -f3`
case "$level" in
*SNAPSHOT) export nexusRepository='snapshots' ;;
*) export nexusRepository='releases' ;;
esac
docker compose run --rm maven mvn $MVN_OPTS install -DskipTests-DrepositoryId=ode-$nexusRepository -DskipTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
}
testfor ()param {in "$@"
do
docker-compose run --rmcase maven$param mvnin
$MVN_OPTS test } publish(init)
{ version=`docker-compose run --rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q -DforceStdout`
level=`echo $version | cut -d'-' -f3`
case "$level" in
*SNAPSHOT) export nexusRepository='snapshots' init
;;
clean)
clean
;;
*)install)
install
;;
export nexusRepository='releases' ;;test)
esactest
docker-compose run --rm maven;;
mvn -DrepositoryId=ode-$nexusRepository -DskiptTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
}
for param in "$@"
do
case $param in publish)
publish
;;
init*)
initecho "Invalid argument : $param"
;;esac
if [ clean)! $? -eq 0 ]; then
clean exit 1
;;fi
done
|
Jenkinsfile
Ajouter l'étape “Initialization”.
Au tout premier argument du build.sh, ajouter le paramètre init afin d’initialiser le fichier .env
Avant :
Bloc de code |
---|
|
#!/usr/bin/env groovy
install)
pipeline {
agent any
install stages {
;; test)
test
;;
publish)
stage('Build') {
publish steps {
;; *) checkout scm
echo "Invalid argument : $param" esac sh if [ ! $? -eq 0 ]; then'./build.sh clean install publish'
exit}
1 fi done
|
Jenkinsfile
Au tout premier du build.sh, ajouter le paramètre init afin d’initialiser le fichier .env
...
Après :
Bloc de code |
---|
|
#!/usr/bin/env groovy
pipeline {
agent any
stages {
stage('Build'"Initialization") {
steps {
script {
def version = sh(returnStdout: true, stepsscript: {'docker compose run --rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q -DforceStdout')
checkout scm sh './build.sh clean install publish'buildName "${env.GIT_BRANCH.replace("origin/", "")}@${version}"
}
} }
} |
Après :
Bloc de code |
---|
|
#!/usr/bin/env groovy pipeline { agent any
stages {}
stage('Build') {
steps {
checkout scm
sh './build.sh init clean install publish'
}
}
}
} |
...
Bloc de code |
---|
|
.env
target
dependency-reduced-pom.xml |