Ich versuche, eine Eigenschaft in unserem Super-POM zu definieren, die von allen untergeordneten Projekten als Ziel des generierten Artefakts verwendet wird.
Dafür habe ich darüber nachgedacht, dies zu verwenden, project/build/finalName
aber dies scheint selbst für einfache Poms nicht zu funktionieren:
Befehl
mvn archetype:create \
-DarchetypeGroupId=org.apache.maven.archetypes \
-DgroupId=com.mycompany.app \
-DartifactId=my-app
POM
<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>
Und als ich hingerichtet habe:
$ 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] ------------------------------------------------------------------------
Ich würde erwarten, dass die Zeichenfolge "Testen" irgendwo im generierten Artefaktnamen erscheint.
Verstehe ich den Zweck von "finalName" falsch?
java
maven-2
jar
build-automation
Maxim Veksler
quelle
quelle
Antworten:
Sie legen die
finalName
Eigenschaft im Abschnitt zur Plugin-Konfiguration fest:Wie in der offiziellen Dokumentation angegeben .
Aktualisieren:
Für Maven> = 3
Basierend auf Matthews Kommentar können Sie es jetzt so machen:
Siehe Fehlerbericht / Dokumentation .
quelle
finalName
Konfiguration entfernt. Die Methode des OP sollte jedoch funktionieren. Siehe Issues.apache.org/jira/browse/MJAR-233Alle Antworten sind komplizierter als nötig. Angenommen, Sie erstellen eine JAR-Datei, müssen Sie
<jar.finalName>
Ihrem<properties>
Abschnitt lediglich ein Tag hinzufügen :Dies erzeugt ein Glas:
Dies ist in der Dokumentation - beachten Sie
User Property
:Befehlszeilenverwendung
Sie sollten diese Option auch in der Befehlszeile verwenden können mit:
Sie sollten myCustomName.jar erhalten, obwohl ich dies nicht getestet habe.
quelle
<jar.finalName>foo</jar.finalName>
zwei Jars erstellt werden: ein ausführbares JAR mit den genannten Abhängigkeitenfoo-${project.version}.jar
und ein zweites JAR, das nur das genannte Projekt enthält${project.name}-${project.version}.jar
,<build><finalName>foo</finalName></build>
wird nur das ausführbare JAR mit den genannten Abhängigkeiten erstelltfoo.jar
@ Maxim
versuchen Sie dies ...
pom.xml
Commnad
mvn clean install
Ausgabe
Referenz
quelle
In der Paketphase ermöglicht das Plugin die Konfiguration der importierten Dateinamen über die Dateizuordnung:
Maven-Ear-Plugin
http://maven.apache.org/plugins/maven-ear-plugin/examples/customize-file-name-mapping.html
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 anderes getestet wird, funktioniert dies für ein Kriegspaket:
Maven-War-Plugin
quelle
Das funktioniert bei mir
quelle
Der Ansatz, den Sie verwendet haben, führt tatsächlich eine JAR-Datei mit einer Zeichenfolge 'testing' im Namen aus, wie Sie angegeben haben, aber der Standardinstallationsbefehl sendet sie an Ihr Verzeichnis ~ / .m2 / repository, wie in dieser Ausgabezeile dargestellt:
Mir scheint, Sie versuchen, ein Glas mit einem solchen Namen zu generieren und es dann in ein Verzeichnis Ihrer Wahl zu kopieren.
Versuchen Sie, die Eigenschaft outputDirectory wie hier beschrieben zu verwenden: http://maven.apache.org/plugins/maven-jar-plugin/jar-mojo.html
quelle
groupId/artifactId/version/artifactId-version-classifier.packaging
. finalName gilt nur für den lokalen Dateinamen im Ausgabeverzeichnis.Ich benutze folgendes
Auf diese Weise können Sie jeden Wert einzeln oder pragmatisch aus Jenkins eines anderen Systems definieren.
Dadurch wird ein Ordner abgelegt
target\{group.id}\projectName-1.2.3.jar
Ein besserer Weg, um Zeit zu sparen, könnte sein
Wie das gleiche, außer ich benutze auf Variable.
Dadurch wird ein Ordner abgelegt
target\{group.id}\projectName-1.2.3.jar
Sie können auch
outputDirectory
inside von verwendenconfiguration
, um einen Speicherort anzugeben, an dem sich das Paket befinden soll.quelle
In meinem Maven EE-Projekt verwende ich:
quelle