Steuern des endgültigen Namens von jar-Artefakt

Ich versuche, eine Eigenschaft in unserem Superpom zu definieren, die von allen untergeordneten Projekten als das Ziel des generierten Artefakts verwendet wird.

Dafür habe ich über die Verwendung von project / build / finalName nachgedacht, aber das scheint nicht zu funktionieren, nicht einmal für einfache Poms:

Befehl

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

Ich würde erwarten, dass die Zeichenfolge “testing” irgendwo im generierten Artefaktnamen erscheint.

Missverstehe ich den Zweck von “finalName”?

Danke, Maxim.

   

Sie legen die finalName Eigenschaft im Abschnitt für die Plugin-Konfiguration fest:

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

Wie in der offiziellen Dokumentation angegeben .

Aktualisieren:

Für Maven> = 3

Basierend auf Matthews Kommentar kannst du es jetzt so machen:

  jar  WhatEverYouLikey  

Siehe Fehlerbericht / Dokumentation .

@Maxime
Versuche dies…

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

Ausgabe

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

Referenz

Alle bereitgestellten Antworten sind komplizierter als nötig. Angenommen, Sie erstellen eine JAR-Datei, müssen Sie einen -Tag zum Abschnitt hinzufügen:

  ${project.name}  

Dies wird ein Glas erzeugen:

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

Dies ist in der Dokumentation – beachten Sie die User Property :

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

Befehlszeilennutzung

Sie sollten diese Option auch in der Befehlszeile verwenden können mit:

 mvn -Djar.finalName=myCustomName ... 

Sie sollten myCustomName.jar bekommen, obwohl ich das nicht getestet habe.

In der Paketphase ermöglicht das Plugin die Konfiguration der importierten Dateinamen über Dateizuordnung:

Maven-Ohr-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

Wenn Sie Ihre Version so konfiguriert haben, dass sie über ein Profil oder etwas “testet”, würde dies für ein Kriegspaket funktionieren:

maven-war-plugin

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

Die Methode, die Sie tatsächlich verwendet haben, verwendet jar-Datei mit einer Zeichenfolge “testet” in seinem Namen, wie Sie angegeben haben, aber der Standard-Installationsbefehl sendet es an Ihr ~ / .m2 / Repository-Verzeichnis, wie in dieser Ausgabezeile zu sehen:

 /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 

Es scheint mir, dass Sie versuchen, ein Jar mit einem solchen Namen zu generieren und es dann in ein Verzeichnis Ihrer Wahl zu kopieren.

Versuchen Sie, die outputDirectory-Eigenschaft wie hier beschrieben zu verwenden: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html

Das funktioniert für mich

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

In meinem maven ee Projekt verwende ich:

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

Ich benutze Folgendes

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

Auf diese Weise können Sie jeden Wert einzeln oder pragmatisch von Jenkins eines anderen Systems aus definieren.

 mvn package -DbaseVersion=1 -monthlyVersion=2 -instanceVersion=3 

Dadurch wird ein Ordner target\{group.id}\projectName-1.2.3.jar

Ein besserer Weg, um Zeit zu sparen, könnte sein

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

Wie das selbe, außer ich benutze Variable.

  mvn package -DbaseVersion=0.3.4 

Dadurch wird ein Ordner target\{group.id}\projectName-1.2.3.jar

Sie können outputDirectory innerhalb der configuration , um einen Speicherort anzugeben, an dem das Paket möglicherweise gespeichert werden soll.