2891 Stimmen

Wie kann ich mit Maven ein ausführbares JAR mit Abhängigkeiten erstellen?

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?

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/

5voto

Mayank Punkte 57

Um ein ausführbares JAR von der Kommandozeile aus zu erstellen, führen Sie einfach den folgenden Befehl vom Projektpfad aus:

mvn assembly:assembly

5 Stimmen

Ich denke, Sie müssen noch einige Dinge in der pom.xml sonst erhalten Sie Error reading assemblies: No assembly descriptors found. . So ist es jedenfalls bei mir.

4voto

Aydin K. Punkte 3105

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.

3voto

Akshay Patel Punkte 51

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

3voto

Chris Punkte 529

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.

1voto

Jan Ziegler Punkte 106

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.com

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.

Powered by:

X