J'essaie de définir une propriété dans notre super pom qui sera utilisée par tous les projets enfants comme destination de l'artefact généré.
Pour cela, je pensais utiliser project/build/finalName, mais cela ne semble pas fonctionner, même pour de simples poms:
Commande
mvn archetype:create \
-DarchetypeGroupId=org.Apache.maven.archetypes \
-DgroupId=com.mycompany.app \
-DartifactId=my-app
POM
maxim@maxim-desktop:/tmp/mvn_test$ cat my-app/pom.xml
<project xmlns="http://maven.Apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.mycompany.app</groupId>
<artifactId>my-app</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>my-app</name>
<url>http://maven.Apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<finalName>${project.name}-testing</finalName>
</build>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
maxim@maxim-desktop:/tmp/mvn_test/my-app$ mvn install
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building my-app
[INFO] task-segment: [install]
[INFO] ------------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/main/resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /tmp/mvn_test/my-app/src/test/resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: /tmp/mvn_test/my-app/target/surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.mycompany.app.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.024 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] [install:install {execution: default-install}]
[INFO] Installing /tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Sun Nov 21 18:37:02 IST 2010
[INFO] Final Memory: 17M/162M
[INFO] ------------------------------------------------------------------------
Je m'attendrais à ce que la chaîne "testing" apparaisse quelque part dans le nom de l'artefact généré.
Est-ce que je comprends mal le but de "finalName"?
Merci Maxim.
Vous définissez la propriété finalName
dans la section de configuration du plugin:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<finalName>myJar</finalName>
</configuration>
</plugin>
Comme indiqué dans le documentation officielle .
Mise à jour:
Pour Maven> = 3
Basé sur le commentaire de Matthew's , vous pouvez maintenant le faire comme ceci:
<packaging>jar</packaging>
<build>
<finalName>WhatEverYouLikey</finalName>
</build>
Toutes les réponses fournies sont plus compliquées que nécessaire. En supposant que vous construisiez un fichier jar, il vous suffit d'ajouter une balise <jar.finalName>
à votre section <properties>
:
<properties>
<jar.finalName>${project.name}</jar.finalName>
</properties>
Cela va générer un pot:
project/target/${project.name}.jar
Ceci est dans le documentation - notez le User Property
:
finalName:
Name of the generated JAR.
Type: Java.lang.String
Required: No
User Property: jar.finalName
Default: ${project.build.finalName}
Vous devriez également pouvoir utiliser cette option sur la ligne de commande avec:
mvn -Djar.finalName=myCustomName ...
Vous devriez obtenir myCustomName.jar, bien que je n’aie pas testé cela.
@Maxime
essaye ça...
pom.xml
<groupId>org.opensource</groupId>
<artifactId>base</artifactId>
<version>1.0.0.SNAPSHOT</version>
..............
<properties>
<my.version>4.0.8.8</my.version>
</properties>
<build>
<finalName>my-base-project</finalName>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.3.1</version>
<executions>
<execution>
<goals>
<goal>install-file</goal>
</goals>
<phase>install</phase>
<configuration>
<file>${project.build.finalName}.${project.packaging}</file>
<generatePom>false</generatePom>
<pomFile>pom.xml</pomFile>
<version>${my.version}</version>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Commnad mvn clean install
Sortie
[INFO] --- maven-jar-plugin:2.3.1:jar (default-jar) @ base ---
[INFO] Building jar: D:\dev\project\base\target\my-base-project.jar
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install (default-install) @ base ---
[INFO] Installing D:\dev\project\base\target\my-base-project.jar to H:\dev\.m2\repository\org\opensource\base\1.0.0.SNAPSHOT\base-1.0.0.SNAPSHOT.jar
[INFO] Installing D:\dev\project\base\pom.xml to H:\dev\.m2\repository\org\opensource\base\1.0.0.SNAPSHOT\base-1.0.0.SNAPSHOT.pom
[INFO]
[INFO] --- maven-install-plugin:2.3.1:install-file (default) @ base ---
[INFO] Installing D:\dev\project\base\my-base-project.jar to H:\dev\.m2\repository\org\opensource\base\4.0.8.8\base-4.0.8.8.jar
[INFO] Installing D:\dev\project\base\pom.xml to H:\dev\.m2\repository\org\opensource\base\4.0.8.8\base-4.0.8.8.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
Au stade du paquet, le plugin permet la configuration des noms de fichiers importés via le mappage de fichiers:
http://maven.Apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.7</version>
<configuration>
[...]
<fileNameMapping>full</fileNameMapping>
</configuration>
</plugin>
http://maven.Apache.org/plugins/maven-war-plugin/war-mojo.html#outputFileNameMapping
Si vous avez configuré votre version pour qu'elle "teste" via un profil ou autre, cela fonctionnera pour un paquet war:
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<encoding>UTF-8</encoding>
<outputFileNameMapping>@{groupId}@-@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
</configuration>
</plugin>
Ça marche pour moi
mvn jar:jar -Djar.finalName=custom-jar-name
L'approche que vous avez utilisée fait en effet un fichier jar avec une chaîne "test" dans son nom, comme vous l'avez spécifié, mais la commande d'installation par défaut l'envoie dans votre répertoire ~/.m2/repository, comme indiqué dans cette ligne de sortie:
/tmp/mvn_test/my-app/target/my-app-testing.jar to /home/maxim/.m2/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
Il me semble que vous essayez de générer un bocal avec un tel nom, puis de le copier dans un répertoire de votre choix.
Essayez d’utiliser la propriété outputDirectory comme décrit ici: http://maven.Apache.org/plugins/maven-jar-plugin/jar-mojo.html
J'utilise ce qui suit
....
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.groupId}/${project.artifactId}-${baseVersion}.${monthlyVersion}.${instanceVersion}</finalName>
</configuration>
</plugin>
....
De cette façon, vous pouvez définir chaque valeur individuellement ou de manière pragmatique à partir de Jenkins d'un autre système.
mvn package -DbaseVersion=1 -monthlyVersion=2 -instanceVersion=3
Cela placera un dossier target\{group.id}\projectName-1.2.3.jar
Un meilleur moyen de gagner du temps pourrait être
....
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.groupId}/${project.artifactId}-${baseVersion}</finalName>
</configuration>
</plugin>
....
Comme le même sauf que j'utilise sur variable.
mvn package -DbaseVersion=0.3.4
Cela placera un dossier target\{group.id}\projectName-1.2.3.jar
vous pouvez également utiliser outputDirectory
à l'intérieur de configuration
pour spécifier un emplacement sur lequel vous souhaitez que le paquet soit localisé.
Dans mon projet maven ee, j'utilise:
<build>
<finalName>shop</finalName>
<plugins>
<plugin>
<groupId>org.Apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>${maven.war.version}</version>
<configuration><webappDirectory>${project.build.directory}/${project.build.finalName} </webappDirectory>
</configuration>
</plugin>
</plugins>
</build>