Contrôle du nom final de l’artefact jar

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 les poms simples:

Commander

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 
  4.0.0 com.mycompany.app my-app 1.0-SNAPSHOT jar my-app http://maven.apache.org  UTF-8   ${project.name}-testing    junit junit 3.8.1 test    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] [comstackr:comstack {execution: default-comstack}] [INFO] Nothing to comstack - 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] [comstackr:testComstack {execution: default-testComstack}] [INFO] Nothing to comstack - all classes are up to date [INFO] [surefire:test {execution: default-test}] [INFO] Surefire report directory: /tmp/mvn_test/my-app/target/surefire-reports ------------------------------------------------------- TESTS ------------------------------------------------------- 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 plug-in:

  org.apache.maven.plugins maven-jar-plugin 2.3.2  myJar   

Comme indiqué dans la documentation officielle .

Mettre à jour:

Pour Maven> = 3

Basé sur le commentaire de Matthew, vous pouvez maintenant le faire comme ceci:

  jar  WhatEverYouLikey  

Voir le rapport de bogue / la documentation .

@Maxime
essaye ça…

pom.xml

  org.opensource base 1.0.0.SNAPSHOT ..............  4.0.8.8   my-base-project   org.apache.maven.plugins maven-install-plugin 2.3.1    install-file  install  ${project.build.finalName}.${project.packaging} false pom.xml ${my.version}       

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] ------------------------------------------------------------------------ 

Référence

Toutes les réponses fournies sont plus compliquées que nécessaire. En supposant que vous construisez un fichier jar, il vous suffit d’append une à votre section :

  ${project.name}  

Cela va générer un pot:

 project/target/${project.name}.jar 

Ceci est dans la documentation – notez la User Property :

 finalName: Name of the generated JAR. Type: java.lang.Ssortingng Required: No User Property: jar.finalName Default: ${project.build.finalName} 

Utilisation de la ligne de commande

Vous devriez également pouvoir utiliser cette option sur la ligne de commande avec:

 mvn -Djar.finalName=myCustomName ... 

Vous devriez obtenir myCustomName.jar, même si je n’ai pas testé cela.

Au stade du package, le plug-in permet la configuration des noms de fichiers importés via le mappage de fichiers:

maven-ear-plugin

http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html

  org.apache.maven.plugins maven-ear-plugin 2.7  [...] full   

http://maven.apache.org/plugins/maven-war-plugin/war-mojo.html#outputFileNameMapping

Si vous avez configuré votre version pour qu’elle soit “testée” via un profil ou quelque chose, cela fonctionnerait pour un paquet de guerre:

maven-war-plugin

  org.apache.maven.plugins maven-war-plugin 2.2  UTF-8 @{groupId}@-@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@   

L’approche que vous avez utilisée en effet fait jar fichier avec une chaîne “testing” dans son nom, comme vous l’avez spécifié, mais la commande install par défaut l’envoie dans votre répertoire ~ / .m2 / repository, comme vu 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 fichier contenant 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

Cela fonctionne pour moi

 mvn jar:jar -Djar.finalName=custom-jar-name 

Dans mon projet Maven ee j’utilise:

  shop   org.apache.maven.plugins maven-war-plugin ${maven.war.version} ${project.build.directory}/${project.build.finalName}      

J’utilise le suivant

  ....  org.apache.maven.plugins maven-jar-plugin 3.0.2  ${project.groupId}/${project.artifactId}-${baseVersion}.${monthlyVersion}.${instanceVersion}   .... 

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

  ....  org.apache.maven.plugins maven-jar-plugin 3.0.2  ${project.groupId}/${project.artifactId}-${baseVersion}   .... 

Comme les mêmes 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 intérieur de la configuration pour spécifier un emplacement dans lequel vous souhaitez placer le package.