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/

26voto

Minisha Punkte 1917

Sie können das maven-shade Plugin verwenden, um ein uber jar wie folgt zu erstellen

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
        </execution>
    </executions>
</plugin>

23voto

marioosh Punkte 25753

Long nutzte die Maven-Assembly-Plugin aber ich konnte keine Lösung für das Problem finden mit "already added, skipping" . Jetzt verwende ich ein anderes Plugin - onejar-maven-plugin . Beispiel unten ( mvn package build jar):

<plugin>
    <groupId>org.dstovall</groupId>
    <artifactId>onejar-maven-plugin</artifactId>
    <version>1.3.0</version>
    <executions>
        <execution>
            <configuration>
                <mainClass>com.company.MainClass</mainClass>
            </configuration>
            <goals>
                <goal>one-jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Sie müssen das Repository für dieses Plugin hinzufügen:

<pluginRepositories>
    <pluginRepository>
        <id>onejar-maven-plugin.googlecode.com</id>
        <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
    </pluginRepository>
</pluginRepositories>

21voto

Benny Neugebauer Punkte 45468

Sie können Folgendes zu Ihrem pom.xml :

<build>
<defaultGoal>install</defaultGoal>
<plugins>
  <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
      <source>1.6</source>
      <target>1.6</target>
    </configuration>
  </plugin>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
      <archive>
        <manifest>
          <addClasspath>true</addClasspath>
          <mainClass>com.mycompany.package.MainClass</mainClass>
        </manifest>
      </archive>
    </configuration>
  </plugin>
  <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>
      <archive>
        <manifest>
          <mainClass>com.mycompany.package.MainClass</mainClass>
        </manifest>
      </archive>
    </configuration>
    <executions>
      <execution>
        <id>make-my-jar-with-dependencies</id>
        <phase>package</phase>
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>
</plugins>
</build>

Anschließend müssen Sie über die Konsole in das Verzeichnis wechseln, in dem sich die pom.xml befindet. Dann müssen Sie ausführen mvn assembly:single und dann wird Ihre ausführbare JAR-Datei mit den Abhängigkeiten hoffentlich erstellt. Sie können dies überprüfen, wenn Sie in das Ausgabeverzeichnis (Zielverzeichnis) wechseln mit cd ./target und starten Sie Ihr jar mit einem Befehl, der dem folgenden ähnelt java -jar mavenproject1-1.0-SNAPSHOT-jar-mit-Abhängigkeiten.jar .

Ich habe dies getestet mit Apache Maven 3.0.3 .

20voto

Sie können das maven-dependency-plugin verwenden, aber die Frage war, wie man ein ausführbares JAR erstellt. Um dies zu tun, ist die folgende Änderung der Antwort von Matthew Franglen erforderlich (die Verwendung des Dependency-Plugins dauert länger, wenn man von einem sauberen Ziel startet):

<build>
    <plugins>
        <plugin>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>fully.qualified.MainClass</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
                <execution>
                    <id>unpack-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>unpack-dependencies</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
    <resources>
        <resource>
            <directory>${basedir}/target/dependency</directory>
        </resource>
    </resources>
</build>

20voto

dsutherland Punkte 727

Ich bin jede dieser Antworten durchgegangen und habe versucht, ein fettes ausführbares jar mit allen Abhängigkeiten zu erstellen, aber keine davon hat richtig funktioniert. Die Antwort ist das Shade-Plugin, es ist sehr einfach und geradlinig.

    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>2.3</version>
      <executions>
         <!-- Run shade goal on package phase -->
        <execution>
        <phase>package</phase>
        <goals>
            <goal>shade</goal>
        </goals>
        <configuration>
          <transformers>
             <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                <mainClass>path.to.MainClass</mainClass>
             </transformer>
          </transformers>
        </configuration>
          </execution>
      </executions>
    </plugin>

Beachten Sie, dass Ihre Abhängigkeiten einen Kompilier- oder Laufzeitbereich haben müssen, damit dies richtig funktioniert.

Dieses Beispiel stammt von mkyong.com

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