Frage

Ich bin relativ neu auf das Maven Mantra, aber ich versuche, eine Befehlszeile runnable Glas mit Maven zu bauen. Ich habe mein Setup Abhängigkeiten, aber wenn ich mvn install laufen und versuchen, das Glas zu laufen, passieren zwei Dinge. Zuerst wird keine Hauptklasse gefunden, die korrigierbar ist. Als ich dies korrigiert habe ich Fehler auf Lauf erhalten, dass Klassen nicht gefunden werden können.

Maven ist die Verpackung nicht meine Abhängigkeit Bibliotheken innerhalb des Glases, so bin ich nicht in der Lage das Glas als Stand-alone-Anwendung auszuführen. Wie kann ich dies korrigieren?

War es hilfreich?

Lösung

Der einfachste Weg, dies zu tun wäre, um eine Baugruppe mit dem maven-assembly-plugin und dem vordefinierten jar-with-dependencies Descriptor zu erstellen. Sie werden auch ein Manifest mit einem Hauptklasse Eintrag für dieses uber Glas erzeugen müssen. Das Snippet unten zeigt, wie die Assembly-Plugin zu konfigurieren, dies zu tun:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
</build>

Dann die Anordnung zu erzeugen, führen Sie einfach:

mvn assembly:assembly

Wenn Sie die Baugruppe als Teil Ihres Build generieren möchten, einfach binden das assembly:single mojo zum Paket Phase:

<build>
  <plugins>
    <plugin>
      <artifactId>maven-assembly-plugin</artifactId>
      <configuration>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
          <manifest>
            <mainClass>fully.qualified.MainClass</mainClass>
          </manifest>
        </archive>
      </configuration>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>single</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Und einfach laufen:

mvn package

Andere Tipps

Maven ist nicht als Verpackung, Ihre Abhängigkeiten in Ihrer JAR-Datei, da Sie in der Regel nicht diese Programme mit Java tun.

Stattdessen liefern Sie die Abhängigkeiten zusammen mit Ihrer JAR-Datei und nennen sie in hier ) für die maven-jar-plugin .

Wenn Sie wirklich alle Ihre Abhängigkeiten in Ihrer JAR-Datei aufnehmen möchten, dann können Sie das Maven Assembly Plugin verwenden, um eine jar-with-dependencies .

Das ist, was ich für kleine Projekte tun. Die meiste Zeit Sie wollen nicht zu einem großen Glas.

erstellen: mvn sauber Abhängigkeit: copy-Abhängigkeiten Paket

ausführen ( in Ziel dir ): java -cp myjar.jar: ./ Abhängigkeit / * com.something.MyClass

Ich stimme mit Joachim Sauer,

Anstelle der Verwendung von Glas-mit-Abhängigkeit sollte man das Glas Plugin wie das in Ihrer pom.xml konfigurieren:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <index>true</index>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>[mainClassFullName]</mainClass>
            </manifest>
            <manifestEntries>
                <mode>development</mode>
                <url>${project.url}</url>
                <key>value</key>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

Und verwenden Sie diese Assembly-Konfiguration die jar Abhängigkeiten Sie Montage hinzuzufügen:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
  <id>zip-with-jars</id>
  <formats>
    <format>zip</format>
  </formats>
  <includeBaseDirectory>false</includeBaseDirectory>
  <dependencySets>
    <dependencySets>
    <dependencySet>
    <outputDirectory>/</outputDirectory>
    <useProjectArtifact>true</useProjectArtifact>
    <unpack>false</unpack>
    <scope>runtime</scope>
    </dependencySet>
</dependencySets>
  </dependencySets>
</assembly>

Sie einfach den Code unten in pom.xml hinzufügen und Ausführen als: Maven: installieren. Das Gefäß wird in Zielordner von Eclipse erstellt werden, die als „java -jar Hello.jar“ verwendet werden kann. aber stellen Sie sicher, dass Name der Hauptklasse gegeben com.abc.HelloWorld.java

<build>
<plugins>
<plugin>
<groupid>org.apache.maven.plugins</groupid>
<artifactid>maven-shade-plugin</artifactid>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<finalname>HelloW</finalname>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestentries>
<main-class>com.abc.HelloWorld.java</main-class>
<build-number>1</build-number>
</manifestentries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>

</build>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top