2012-10-05 3 views
8

Sto cercando di ottenere un progetto gestito da Maven per l'esecuzione sulla riga di comando.Come eseguire il barattolo generato da Maven sulla CLI

Ho una serie di dipendenze nel pom.xml che sono successivamente scaricate e installate nel ~/.m2/repository /. Ho incluso la configurazione necessaria nel mio pom per aggiungere il classpath al manifest jar.

Ora il problema è che sto tentando di eseguire il jar in questo modo: java -jar project-SNAPSHOT.jar.

Java non riesce a trovare le dipendenze scaricate (sto assumendo perché sono elencate senza percorsi nel manifest?), Ma non sono sicuro del modo migliore per farlo funzionare.

risposta

5

Opzioni 1:
Il jar creato non ha i file jar dipendenti. Quindi, è necessario indicare la classe java-percorso in cui tutti i barattoli dipendenti sono

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

Opzione 2:
La soluzione più facile e molto meglio è quello di utilizzare AppAssembler plugin. Che lo fa confeziona vostro vaso in una struttura di directory che contiene

  1. vasetti dipendenti
  2. il vaso creato
  3. script di shell/Windows per eseguirlo

dare un'occhiata qui http://www.mojohaus.org/appassembler/appassembler-maven-plugin/

Opzione 3:
Se non si desidera tutto il bagaglio e si voleva solo avere uno jar-with-dependency Si consiglia di fare riferimento qui How can I create an executable JAR with dependencies using Maven?

Questo conterrà tutti i vasi dipendenti all'interno di esso.


Edit 1: Per l'opzione 1, Brad M hanno detto che è possibile ottenere un elenco di tutte le dipendenze del vostro progetto utilizzando il dependency plugin. dependency:build-classpath

+0

ah si può tenere premuto. – Nishant

+0

Fantastico - questo è esattamente ciò di cui avevo bisogno. Ci sono dei caveat con il packaging tutto come questo o è tutto ok. Utilizzo della memoria ecc.? – Nick

+0

No nothing. Sono cose molto semplici, come 1. creare jar, 2. copiare dipendenti in una cartella repo, 3. scrivere uno script di shell che assomigli a questo 'java -jar ../myapp.jar Mainclass -cp ../repo/ * .jar' – Nishant

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

Puoi trovare altri esempi qui: 3 ways to run Java main from Maven.

+0

Non funziona per me con Maven 3.0.4 '[ERRORE] Fase del ciclo di vita sconosciuta" .mainClass = my.Main "' –