Ich möchte mein Projekt in ein einziges ausführbares JAR-Paket verpacken, um es zu verteilen.
Wie kann ich ein Maven-Projekt dazu bringen, alle abhängigen JARs in mein Ausgabe-JAR zu packen?
Ich möchte mein Projekt in ein einziges ausführbares JAR-Paket verpacken, um es zu verteilen.
Wie kann ich ein Maven-Projekt dazu bringen, alle abhängigen JARs in mein Ausgabe-JAR zu packen?
Zur pom.xml hinzufügen:
<dependency>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
</dependency>
und
<plugin>
<groupId>com.jolira</groupId>
<artifactId>onejar-maven-plugin</artifactId>
<version>1.4.4</version>
<executions>
<execution>
<goals>
<goal>one-jar</goal>
</goals>
</execution>
</executions>
</plugin>
Das war's. Das nächste mvn-Paket erzeugt zusätzlich ein fettes Jar, das alle Abhängigkeits-Jars enthält.
Ich habe mehrere Lösungen ausprobiert, aber diejenige, die perfekt in dem Szenario funktionierte, in dem wir ein nicht ausführbares Fat Jar mit allen internen Abhängigkeiten für externe Systeme erstellen wollten, hatte keine vorherige Relevanz. prod-Szenario getestet.
dies in die pom.xml aufnehmen
<?xml version="1.0" encoding="UTF-8"?>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
Auszuführender Befehl zum Erstellen des fat jar->> mvn assembly:assembly
Das maven-assembly-plugin hat bei mir hervorragend funktioniert. Ich habe Stunden mit dem maven-dependency-plugin verbracht und konnte es nicht zum Laufen bringen. Der Hauptgrund dafür war, dass ich in der Konfigurations-Sektion explizit die Artefakt-Elemente definieren musste, die eingebunden werden sollten, wie es in der Dokumentation . Dort gibt es ein Beispiel für die Fälle, in denen Sie es verwenden möchten: mvn dependency:copy
, in dem keine Artefaktelemente enthalten sind, aber es funktioniert nicht.
Dieser Blog-Beitrag zeigt einen anderen Ansatz mit der Kombination der Plugins maven-jar und maven-assembly. Mit der Assembly-Konfigurations-xml aus dem Blogpost kann auch gesteuert werden, ob Abhängigkeiten erweitert oder nur in einem Ordner gesammelt und durch einen Klassenpfad-Eintrag im Manifest referenziert werden sollen:
Die ideale Lösung besteht darin, die Jars in einen Lib-Ordner aufzunehmen und die manifest.mf-Datei des Haupt-Jars enthält alle Jars im Klassenpfad.
Und genau das wird hier beschrieben: https://caffebig.wordpress.com/2013/04/05/executable-jar-file-with-dependent-jars-using-maven/
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
15 Stimmen
Bitte erklären Sie, auf welches Ziel des Abhängigkeits-Plugins Sie sich beziehen. Ich kenne kein Ziel, das das tut, was die ursprüngliche Frage verlangt: alle Abhängigkeiten entweder A) in das Autoren-Jar durch Umpacken zu packen, oder B) ein ausführbares Jar zu erstellen, das die anderen in einem Klassenpfad von MANIFEST.MF hat
2 Stimmen
Dies könnte für Sie nützlich sein rationaljava.com/2015/02/
1 Stimmen
2 Beispiele: tugay.biz/2015/12/a-standalone-java-web-anwendung-mit.html tugay.biz/2016/11/wie-erstelle-ich-ein-ausführbares-jar-mit.html
2 Stimmen
Siehe stackoverflow.com/questions/35217128/
0 Stimmen
Für Gradle siehe den Stackoverflow-Beitrag: Fat/Uber JAR in Gradle erstellen .