Ist es möglich, ein Maven-Jar-mit-Abhängigkeiten umzubenennen?
Lesezeit: 8 Minuten
Mike Cornell
Ich verwende derzeit die jar-with-dependencies-Assembly, um ein solches jar zu erstellen. Der Name meines Glases ist jedoch etwas lang.
Da dieses JAR von RPG-Programmen auf einem AS400 verwendet wird, möchte ich es kürzen, um diesen Entwicklern das Leben ein wenig leichter zu machen. Aber außer von Hand habe ich keine Möglichkeit gefunden, das Glas von den üblichen umzubenennen project-name-version-classifier-jar-with-dependencies.jar. Ich hätte gerne so etwas wie project-name-version-classifier-full.jar
Gibt es eine Möglichkeit, dies zu tun, ohne den Assembly-Deskriptor jar-with-dependencies zu kopieren und ihn vollständig aufzurufen?
Außerdem möchte ich das JAR weiterhin ohne den Klassenpfad zusammengebaut im Repository gespeichert haben.
Ich brauche zwei Artefakte. Das Glas mit meinem Klassifikator, der die Region enthält, für die der Build bestimmt ist. Das Glas mit allen Abhängigkeiten, das auch die Region enthält.
project-name-version-region-full.jar und project-name-version-region.jar sollten im Repository gespeichert werden. Im ersten Beispiel ist der Klassifikator region-full, im 2. ist es region-full. Letzteres funktioniert.
Reicher Verkäufer
Sie können die angeben Endname -Eigenschaft, um dem Glas den gewünschten Namen zu geben, und geben Sie diesen an appendAssemblyId sollte false sein, um das Suffix „jar-with-dependencies“ zu vermeiden.
Die folgende Konfiguration gibt ein JAR mit dem Namen “test.jar” aus.
Update: Basierend auf Ihren Kommentaren funktioniert die Verwendung des integrierten Deskriptors nicht. Ich glaube, das liegt an einem Fehler in den letzten Versionen des Assembly-Plugins – sie haben die Unterstützung für Klassifikatoren entfernt, aber die ID ist behoben, wenn Sie einen eingebauten Deskriptor verwenden, sodass Sie am Ende einen großen, dummen Namen haben.
Als Problemumgehung können Sie den von der verwendeten Assemblydeskriptor kopieren jar-mit-abhängigkeiten Deskriptor und ändern Sie die ID.
Dieses Beispiel würde dazu führen, dass die Assembly-ID an finalName angehängt wird, wenn Sie also einen Namen von benötigen region-full.jarkönnen Sie den finalName als angeben Region und die Assembly-ID als voll. Dies führt zu einer Datei namens region-full.jar im Ziel, aber beachten Sie, dass sie weiterhin als angehängtes Artefakt mit im Maven-Repository installiert wird voll als Klassifikator verwendet. Solange sich diese ID von der Ihrer anderen Assembly unterscheidet, sollte es jedoch keine Kollision geben.
Arbeiten an dieser Ausarbeitung Rich. Im Wesentlichen brauche ich zwei Klassifikatorartefakte, die gespeichert werden sollen. Wenn appendAssemblyId aktiviert war, hatte ich 3 Artefakte, eines ohne Klassifikator, die Klassifikatorversion und die JAR-mit-Abhängigkeiten-Version. Wenn appendAssemblyID deaktiviert ist, wird das Uber-Jar in der Version ohne Klassifikator installiert. Ich muss diese Leute einen auf Region + vollständig basierenden Klassifikator verwenden lassen, der angibt, wofür sie gebaut wurden. Leider funktioniert das Hinzufügen des Classifier-Tags nicht.
– Mike Cornell
26. August 2009 um 16:06 Uhr
danke, ich benutze ${artifactId}-${version}-fat, was für eine chaotische Dokumentation
– Benutzer1708042
21. April 2021 um 9:52 Uhr
Wikingersteve
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 finalName mit der Artefakt-ID und der Version angegeben wird.
Danke an die Beiträge hier und einiges Graben in der Maven-Dokumente Ich habe mir die folgende Konfiguration für eine allgemeine einmalig neu gepackte ausführbare JAR-Assembly mit einem benutzerdefinierten Namen ausgedacht.
Ich werde Rich die Ehre erweisen, dass er mich in die richtige Richtung gewiesen hat, wollte aber die Lösung posten, die für mich funktioniert hat, da Richs etwas daneben lag:
Meine jar-assembly.xml sah so aus, wodurch sich die Assembly-ID für die Region ändern konnte, die als Eigenschaft in meinem Profil gespeichert war:
Ich habe den finalName-Parameter in den maven-assembly-plugin-Einstellungen nicht verwendet, da dies mein Projekt mit meinem project-name-version-env-full.jar-Namen erstellt hat, wobei env-full der Klassifikator war.
Stellen Sie sich meine Überraschung vor, als ich erfuhr, dass die Assembly-XML durch Elemente im Build parametrisiert werden konnte. Das war genau das, wonach ich gesucht hatte.
umesh9883
Das hat bei mir funktioniert
<build>
<finalName>anynameyoulike</finalName>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.6</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<appendAssemblyId>false</appendAssemblyId>
<archive>
<manifest>
<mainClass>com.mycompany.MyMainClass</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
13440200cookie-checkIst es möglich, ein Maven-Jar-mit-Abhängigkeiten umzubenennen?yes