Sie können die Eigenschaft finalName angeben , um dem JAR den gewünschten Namen zu geben, und angeben, dass appendAssemblyId false sein soll, um das Suffix "jar-with-dependencies" zu vermeiden.
Die folgende Konfiguration gibt ein JAR mit dem Namen "test.jar" aus.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<finalName>test</finalName>
<appendAssemblyId>false</appendAssemblyId>
</configuration>
</execution>
</executions>
</plugin>
Update: Basierend auf Ihren Kommentaren funktioniert die Verwendung des integrierten Deskriptors nicht. Ich glaube, das liegt an einem Fehler in den jüngsten Versionen des Assembly-Plugins - sie haben die Unterstützung für Klassifizierer entfernt, aber die ID ist behoben, wenn Sie einen integrierten Deskriptor verwenden, sodass Sie einen großen blöden Namen erhalten.
Um dieses Problem zu umgehen, können Sie den vom JAR-with-Dependencies- Deskriptor verwendeten Assembly-Deskriptor kopieren und die ID ändern.
Dieses Beispiel würde dazu führen, dass die Assembly-ID an den endgültigen Namen angehängt wird. Wenn Sie also den Namen region-full.jar benötigen , können Sie den endgültigen Namen als Region und die Assembly-ID als vollständig angeben . Dies führt zu einer Datei im Ziel mit dem Namen region-full.jar. Beachten Sie jedoch, dass sie weiterhin als angefügtes Artefakt im Maven-Repository installiert wird, wobei full als Klassifizierer verwendet wird. Solange sich diese ID von der für Ihre andere Baugruppe unterscheidet, sollte es jedoch keine Kollision geben.
Die POM-Konfiguration würde so aussehen.
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.2-beta-4</version>
<executions>
<execution>
<id>jar-with-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<descriptors>
<descriptor>src/main/assembly/jar-assembly.xml</descriptor>
</descriptors>
<finalName>region</finalName>
</configuration>
</execution>
</executions>
</plugin>
und die jar-Assembly.xml in src / main / Assembly wie folgt:
<assembly>
<id>full</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
</dependencySet>
</dependencySets>
<fileSets>
<fileSet>
<directory>${project.build.outputDirectory}</directory>
</fileSet>
</fileSets>
</assembly>
Ich glaube, ich habe einen Weg gefunden, dies direkt im POM zu konfigurieren, ohne eine separate jar-Assembly.xml zu benötigen.
Es ist im Grunde dasselbe wie Richs Antwort, außer dass der endgültige Name mit der Artefakt-ID und der Version angegeben wird.
quelle
Dank der Beiträge hier und einiger Eingriffe in die Maven-Dokumente habe ich die folgende Konfiguration für eine allgemeine, neu gepackte ausführbare JAR-Assembly mit einem benutzerdefinierten Namen gefunden.
In pom.xml:
In der Assembly.xml:
Dies führt dazu, dass
MyJarName.jar
alle Abhängigkeiten in dasselbe und das angegebene Glas neu gepackt werdenMain-Class: karlthepagain.MyMain
.quelle
Ich werde Rich die Ehre geben, mich in die richtige Richtung zu weisen, aber ich wollte die Lösung veröffentlichen, die für mich funktioniert hat, da Richs etwas anders war:
Meine jar-Assembly.xml sah folgendermaßen aus, sodass sich die Assembly-ID für die Region ändern konnte, die als Eigenschaft in meinem Profil gespeichert war:
Ich habe den Parameter finalName in den Einstellungen des Maven-Assembly-Plugins nicht verwendet, da dies mein Projekt mit meinem Projektnamen-Version-env-full.jar-Namen erstellt hat, wobei env-full der Klassifizierer war.
Stellen Sie sich meine Überraschung vor, als ich erfuhr, dass die Assembly-XML durch Elemente im Build parametrisiert werden kann. Genau das habe ich gesucht.
quelle
Das hat bei mir funktioniert
quelle
Es ist auch möglich, die ursprüngliche JAR-Datei zu überschreiben, indem Sie
${project.build.finalName}
als endgültigen Namen Folgendes verwenden :quelle