...
"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> <java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>2.22.2</maven-surefire-plugin.version>
<vertx.version>4.4.5</vertx.version>
<web-utils.version>2.0.0</web-utils.version>
<jacksonDatabindVersion>2.15.2</jacksonDatabindVersion>
</properties>
<scm><!-- À ajuster en fonction de l'url GitHub/GitLab -->
<connection>scm:git:https://github.com/opendigitaleducation/mod-zip.git</connection>
<developerConnection>scm:git:https://github.com/opendigitaleducation/mod-zip.git</developerConnection>
<url>https://github.com/opendigitaleducation/mod-zip</url>
</scm>
<repositories>
<repository>
<id>ode</id>
<name>ODE Repository</name>
<url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url>
</repository>
</repositories>
<distributionManagement>
<snapshotRepository>
<id>ode-snapshots</id>
<name>Snapshots</name>
<url>https://maven.opendigitaleducation.com/nexus/content/repositories/snapshots/</url>
</snapshotRepository>
<repository>
<id>ode-releases</id>
<name>Releases</name>
<url>https://maven.opendigitaleducation.com/nexus/content/repositories/releases/</url>
</repository>
</distributionManagement>
<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>
<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><version>3.0-b2school-SNAPSHOT</version><!-- Vient de gradle.properties > version -->
<repositories>
<repository>
<id>ode</id>
<name>ODE Repository</name>
<url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url>
</repository>
</repositories>
<properties><!-- Reporter les versions des dépendances de gradle.properties > -->
<jacksonDatabindVersion>2.15.2</jacksonDatabindVersion>
</properties>
<dependencies><!-- Reporter les dépendances qui étaient dans build.gradle > dependencies -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jacksonDatabindVersion}</version>
<scope>provided</scope>
</dependency>
</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"
</manifestEntries>
</archive>xmlns="http://maven.apache.org/POM/4.0.0"
</configuration>xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
</plugin><modelVersion>4.0.0</modelVersion>
<plugin><parent>
<artifactId>maven-resources-plugin</artifactId><groupId>io.edifice</groupId>
<version>2.6</version>
<artifactId>app-parent</artifactId>
<executions> <version>1.0</version>
</parent>
<execution>
<groupId>net.atos</groupId><!-- Vient de gradle.properties > modowner -->
<id>copy-resources</id>
<artifactId>actualites</artifactId><!-- Vient de gradle.properties > modname -->
<phase>validate</phase>
<version>2.0-b2school-SNAPSHOT</version> <!-- Vient de gradle.properties > version -->
<goals>
<scm><!-- Adapter avec l'url du repertoire (github, gitlab...) -->
<goal>copy-resources</goal> </goals><connection>scm:git:https://github.com/OPEN-ENT-NG/actualites.git</connection>
<developerConnection>scm:git:https://github.com/OPEN-ENT-NG/actualites.git</developerConnection>
<configuration> <outputDirectory>${basedir}/target/classes</outputDirectory><url>https://github.com/OPEN-ENT-NG/actualites</url>
</scm>
<repositories>
<includeEmptyDirs>true</includeEmptyDirs> <repository>
<resources> <id>ode</id>
<name>ODE <resource>Repository</name>
<directory>${basedir}/deployment</directory><url>https://maven.opendigitaleducation.com/nexus/content/groups/public</url>
</repository>
<filtering>false</filtering></repositories>
<properties><!-- Reporter les versions des dépendances </resource>
de gradle.properties -->
<web-utils.version>3.0-b2school-SNAPSHOT</web-utils.version>
</resources>properties>
<dependencies><!-- Reporter les dépendances qui étaient </configuration>
dans build.gradle > dependencies -->
</execution> <dependency>
</executions> <<groupId>io.vertx</plugin>groupId>
<plugin> <artifactId>vertx-core</artifactId>
<artifactId>maven-compiler-plugin</artifactId> <version>${maven-compiler-plugin.versionvertxVersion}</version>
<configuration> <source>${java.version}</source><scope>provided</scope>
<target>${java.version}</target>dependency>
<dependency>
</configuration> </plugin> <groupId>fr.wseduc</groupId>
<plugin> <artifactId>maven<artifactId>web-surefire-plugin<utils</artifactId>
<version>${mavenweb-surefire-pluginutils.version}</version>
</plugin><scope>compile</scope>
</plugins>dependency>
</build>dependencies>
</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 |
...
Bloc de code |
---|
|
docker- compose run --rm maven mvn $MVN_OPTS clean |
...
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
;;
...
install)
install
;;
test)
test
;;
... |
...
Bloc de code |
---|
|
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 -DrepositoryId=ode-$nexusRepository -DskiptTestsDskipTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
} |
...
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- compose run --rm maven mvn $MVN_OPTS install -DskipTests
}
test () {
docker- compose run --rm maven mvn $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 -DrepositoryId=ode-$nexusRepository -DskiptTestsDskipTests -Dmaven.test.skip=true --settings /var/maven/.m2/settings.xml deploy
}
for param in "$@"
do
case $param in
init)
init
;;
clean)
clean
;;
install)
install
;;
test)
test
;;
publish)
publish
;;
*)
echo "Invalid argument : $param"
esac
if [ ! $? -eq 0 ]; then
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
...
Bloc de code |
---|
|
#!/usr/bin/env groovy
pipeline {
agent any
stages {
stage("Initialization"'Build') {
steps {
checkout scm
steps { sh './build.sh clean install scriptpublish'
{ }
def version =}
sh(returnStdout: true, script: 'docker-compose run --rm maven mvn $MVN_OPTS help:evaluate -Dexpression=project.version -q -DforceStdout')
}
} |
Après :
Bloc de code |
---|
|
#!/usr/bin/env groovy
pipeline {
agent any
stages {
buildName "${env.GIT_BRANCH.replace stage("origin/Initialization",) "")}@${version}"
steps {
} } script {
} stage('Build') { 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 |