2012-10-05 12 views
8

Ich versuche, ein Maven verwaltet Projekt auf der Kommandozeile ausgeführt werden.Wie man maven generiert jar auf CLI

Ich habe eine Reihe von Abhängigkeiten in der pom.xml, die anschließend heruntergeladen und in der ~/.m2/repository/installiert werden. Ich habe die notwendige Konfiguration in meinen Pom aufgenommen, um den Klassenpfad zum Manifest von jar hinzuzufügen.

Jetzt ist das Problem, ich versuche, das Glas so zu laufen: java -jar Projekt-SNAPSHOT.jar.

Java kann die heruntergeladenen Abhängigkeiten nicht finden (ich nehme an, weil sie ohne Pfade im Manifest aufgeführt sind), aber ich bin mir nicht sicher, wie ich das am Laufen bekomme.

Antwort

5

Optionen 1:
Das erstellte JAR verfügt nicht über die abhängigen JAR-Dateien. So müssen Sie Java die Klasse-Pfad sagen, wo alle abhängigen Gläser sind

java -cp /lcoation/of/dependency1.jar:/location/of/dependency2.jar:/location/of/dependency3.jar -jar project-SNAPSHOT.jar 

Option 2:
Je einfacher und viel bessere Lösung AppAssembler Plugin zu verwenden ist. Was sie tut es Ihr Glas in einer Verzeichnisstruktur Pakete, die

  1. abhängigen Gläser
  2. die erstellt jar
  3. Shell/Windows-Skripte ausführen es

haben einen Blick hier http://www.mojohaus.org/appassembler/appassembler-maven-plugin/

enthält

Option 3:
Wenn Sie nicht das ganze Gepäck wollen und nur ein jar-with-dependency haben möchten Sie können hier verweisen How can I create an executable JAR with dependencies using Maven?

Dies wird alle abhängigen Gläser darin enthalten.


Edit 1: Option 1 erwähnt Brad M, dass Sie eine Liste aller deps des Projekts erhalten die dependency plugin verwenden. dependency:build-classpath

+0

ah Sie können1 festhalten. – Nishant

+0

Super - genau das habe ich gebraucht. Gibt es irgendwelche Vorbehalte beim Verpacken alles so oder ist alles in Ordnung. Speicherverbrauch usw.? – Nick

+0

Nein nichts. Es sind sehr einfache Sachen, wie 1. Glas machen, 2. Abhängige in einem Repo-Ordner kopieren, 3. ein Shell-Skript schreiben, das ungefähr so ​​aussieht 'java -jar ../myapp.jar Hauptklasse -cp ../repo/ * .jar' – Nishant

4
mvn exec:java -Dexec.mainClass="com.vineetmanohar.module.Main" -Dexec.classpathScope=runtime 

können Sie weitere Beispiele finden Sie hier: 3 ways to run Java main from Maven.

+0

Funktioniert bei mir nicht mit maven 3.0.4 '[FEHLER] Unbekannte Lebenszyklusphase" .mainClass = my.Main "' –

Verwandte Themen