...
"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><!-- Vient de gradle.properties > modname -->
<version>3.0-b2school-SNAPSHOT</version><<groupId>io.edifice</groupId>
<artifactId>edifice-parent</artifactId>
<version>1.0</version>
</parent>
<groupId>fr.wseduc</groupId><!-- Vient de gradle.properties > versionmodowner -->
<properties> <java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><artifactId>web-utils</artifactId><!-- Vient de gradle.properties > modname -->
<maven<version>3.0-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>b2school-SNAPSHOT</version><!-- Vient de gradle.properties > version -->
<vertx.version>4.4.5</vertx.version><repositories>
<web-utils.version>2.0.0</web-utils.version> <repository>
<jacksonDatabindVersion>2.15.2</jacksonDatabindVersion> </properties> <id>ode</id>
<scm><!-- À ajuster en fonction de l'url<name>ODE GitHub/GitLab -->Repository</name>
<connection>scm:git:https<url>https://githubmaven.opendigitaleducation.com/opendigitaleducation/mod-zip.git</connection>nexus/content/groups/public</url>
<developerConnection>scm:git:https://github.com/opendigitaleducation/mod-zip.git</developerConnection> </repository>
<url>https://github.com/opendigitaleducation/mod-zip</url> </scm>repositories>
<repositories> <properties><!-- Reporter <repository>les versions des dépendances de gradle.properties <id>ode</id>
<name>ODE Repository</name>> -->
<url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url><jacksonDatabindVersion>2.15.2</jacksonDatabindVersion>
</repository>properties>
</repositories> <distributionManagement> <dependencies><!-- Reporter les dépendances <snapshotRepository>qui étaient dans build.gradle > dependencies -->
<id>ode-snapshots</id> <dependency>
<name>Snapshots</name> <url>https://maven.opendigitaleducation.com/nexus/content/repositories/snapshots/</url> </snapshotRepository><groupId>com.fasterxml.jackson.core</groupId>
<repository> <id>ode<artifactId>jackson-releases<databind</id>artifactId>
<name>Releases</name> <url>https://maven.opendigitaleducation.com/nexus/content/repositories/releases/</url>
<version>${jacksonDatabindVersion}</version>
</repository> </distributionManagement> <dependencies> <scope>provided</scope>
<dependency> <groupId>io.vertx<</groupId>dependency>
</dependencies>
<artifactId>vertx-core</artifactId>
<version>${vertx.version}</version>
<scope>provided</scope>
</dependency>
<dependency></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"
xmlns="http://maven.apache.org/POM/4.0.0"
<groupId>fr.wseduc</groupId>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<artifactId>web-utils</artifactId> <parent>
<version>${web-utils.version}</version> <scope>compile</scope><groupId>io.edifice</groupId>
</dependency> <artifactId>app-parent</artifactId>
<dependency> <groupId>com.fasterxml.jackson.core</groupId><version>1.0</version>
</parent>
<artifactId>jackson-databind</artifactId> <groupId>net.atos</groupId><!-- Vient <version>${jacksonDatabindVersion}</version>
de gradle.properties > modowner -->
<scope>provided</scope>
</dependency>
< <artifactId>actualites</artifactId><!-- AjouterVient les autres dépendances qui étaient dans build.gradlede gradle.properties > dependenciesmodname -->
</dependencies> <build>
<plugins>
<version>2.0-b2school-SNAPSHOT</version> <!-- Vient de gradle.properties > version -->
<plugin>
<scm><!-- Adapter avec <groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>l'url du repertoire (github, gitlab...) -->
<version>3.2.0</version><connection>scm:git:https://github.com/OPEN-ENT-NG/actualites.git</connection>
<executions><developerConnection>scm:git:https://github.com/OPEN-ENT-NG/actualites.git</developerConnection>
<execution>
<url>https://github.com/OPEN-ENT-NG/actualites</url>
</scm>
<phase>validate</phase> <repositories>
<repository>
<goals><goal>create</goal></goals> <<id>ode</execution>
id>
</executions> <name>ODE Repository</name>
<configuration> <getRevisionOnlyOnce>true</getRevisionOnlyOnce><url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url>
<shortRevisionLength>8<</shortRevisionLength>repository>
</repositories>
</configuration>
</plugin>
<plugin><properties><!-- Reporter les versions des dépendances de gradle.properties -->
<groupId>org<web-utils.apache.maven.plugins</groupId>version>3.0-b2school-SNAPSHOT</web-utils.version>
</properties>
<artifactId>maven <dependencies><!-shade-plugin</artifactId> Reporter les dépendances qui étaient dans <version>3.5.1</version>
build.gradle > dependencies -->
<executions> <dependency>
<execution> <groupId>io.vertx</groupId>
<phase>package</phase> <artifactId>vertx-core</artifactId>
<goals> <version>${vertxVersion}</version>
<goal>shade</goal> <scope>provided</scope>
</goals>dependency>
<dependency>
<configuration> <groupId>fr.wseduc</groupId>
<finalName>${project.groupId}~${project.artifactId}~${project.version}-fat</finalName> <artifactId>web-utils</artifactId>
<version>${web-utils.version}</version>
<!--transformers> <scope>compile</scope>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> </dependency>
</dependencies>
</project> |
docker-compose.yml
Remplacer le service gradle par le service maven
tel que décrit plus bas.
Bloc de code |
---|
|
services:
maven:
<mainClass>your.main.class.name</mainClass>image: maven:3.8.6-jdk-8
user: "$DEFAULT_DOCKER_USER"
working_dir: /usr/src/maven
</transformer>volumes:
- ./:/usr/src/maven
</transformers-->
~/.m2:/var/maven/.m2
environment:
</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>
<Build-Time>${maven.build.timestamp}</Build-Time>
<Main-Verticle>service:mod</Main-Verticle>
<SCM-Commit-Id>${buildNumber}</SCM-Commit-Id>
<SCM-Branch>${scmBranch}</SCM-Branch>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 |
---|
|
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 maven mvn $MVN_OPTS test
}
...
for param in "$@"
do
case $param in
init)
init
;;
</manifestEntries>...
</archive> install)
install
</configuration> ;; </plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<includeEmptyDirs>true</includeEmptyDirs>
<resources>
<resource>
<directory>${basedir}/deployment</directory>
<filtering>false</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-plugin.version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>${maven-surefire-plugin.version}</version>
</plugin>
</plugins>
</build>
</project>
|
docker-compose.yml
Remplacer le service gradle par le service maven
tel que décrit plus bas.
Bloc de code |
---|
|
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:
Bloc de code |
---|
|
docker-compose run --rm -u "$USER_UID:$GROUP_GID" gradle gradle clean |
...
Modifier la méthode publish pour qu’elle soit équivalente à celle écrite ci-dessous :
Bloc de code |
---|
|
docker-publish() {
version=`docker compose run --rm maven mvn $MVN_OPTS clean |
Ajouter la méthode init
et l’ajouter à la liste des options supportées
Bloc de code |
---|
|
init() {
me=`id -u`:`id -g`
echo "DEFAULT_DOCKER_USER=$me" > .env
}
...
for param in "$@"
do
case $param in
init)
init
;;
... |
Modifier la méthode publish pour qu’elle soit équivalente à celle écrite ci-dessous :
Bloc de code |
---|
|
publishhelp: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 -DrepositoryId=ode-$nexusRepository -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' ;;
esactest)
test
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
init)
;;
publish)
publish
;;
*)
init echo "Invalid argument : $param"
;; esac
clean)if [ ! $? -eq 0 ]; cleanthen
exit 1
;; fi
install)
install
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
pipeline {
agent any
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 |