2016-09-01 1 views
5

Ich benutze Intellij Java 2016.2.2 und Maven, um eine sehr einfache Java-Konsolenanwendung zu erstellen.Intellij Java 2016 & Maven: Wie man Abhängigkeiten in JAR einbetten?

ich eine externe Bibliothek hinzufügen möchten, so füge ich meine Abhängigkeit in Maven wie folgt aus:

<dependency> 
    <groupId>jline</groupId> 
    <artifactId>jline</artifactId> 
    <version>2.12</version> 
</dependency> 

Es funktioniert gut, wenn ich es in der IDE ausgeführt werden, aber nicht in einer externen Konsole (ich habe die Folgefehler: java.lang.NoClassDefFoundError).

Ich überprüft und aus irgendeinem Grund wird die externe JAR nicht in der JAR hinzugefügt, die ich gerade generiert habe. Ich habe auch viele Dinge in "Datei -> Projektstruktur" versucht, aber immer noch nicht funktioniert ...

Ich möchte nur meine JAR mit meinen Abhängigkeiten darin zu bauen, so kann ich einfach meine Anwendung in einer Konsole ausführen mit:

java -jar myproject.jar 

Wie kann ich das tun? Danke für Ihre Hilfe!

+2

Verwenden Sie das Maven-Assembly-Plugin mit dem JAR-mit-Abhängigkeiten-Deskriptor .... – khmarbaise

+0

Danke für Ihre Hilfe, aber immer noch nicht funktioniert. Also frage ich mich: Ich baue meine JAR mit "Build -> Build Artefakte ...". Ist es der richtige Weg? – thenaoh

Antwort

12

ich endlich diese JAR mit Intellij Java zu generieren verwaltet, hier ist, wie ich tun:

  • füge die Abhängigkeiten in die pom.xml Datei ein
  • gehe zu Datei -> Projektstruktur -> Artefakte -> Neu -> JAR -> Von Modul mit Abhängigkeiten CIES
  • die Hauptklasse wählen und OK
  • in Ihrem Projekt klicken, in src/main, die "Ressourcen" -Ordner (darin mit MANIFEST.MF) Ordner in diesem
  • bewegt den "META-INF" erstellen „Ressourcen“ -Ordner
  • gehen zu bauen -> Artefakte bauen die JAR-

EDIT

Ein besserer (und einfacher Weg) zu bauen, zu tun, ist es die folgenden Zeilen in den pom hinzufügen. XML-Datei:

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

dann verwenden Sie die "clean" und "Paket" Maven-Befehle.

Die letzten 3 obigen Schritte (über MANIFEST.MF) scheinen immer noch obligatorisch zu sein.

4

Okay, also wollen Sie im Grunde eine "fat jar" (manchmal Assembly genannt) erstellen, die alle ihre eigenen Abhängigkeiten enthält (normalerweise sind die Abhängigkeiten extern).

Sie müssen ein Maven-Plugin dafür verwenden. Unten finden Sie eine Konfiguration Probenanordnung Plugin ist jar-with-dependencies:

<project> 
    ... 
    <build> 
    ... 
    <plugins> 
     <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.6</version> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
     </configuration> 
     ... 
</project> 

dann einfach laufen

mvn package 
+0

Danke, es scheint interessant zu sein!Aber jetzt noch ein einfaches Problem: "Kein Hauptmanifestattribut". Es scheint, dass es nicht gelingt, meine MANIFEST.MF-Datei zu finden ... Irgendeine Idee? – thenaoh

+1

http://stackoverflow.com/questions/574594/how-can-i-create-an-executable-jar-with-dependencys-using-maven – YMomb

+0

Danke! Ich schaue mir das an! – thenaoh

Verwandte Themen