2012-04-11 12 views
68

Ho il seguente problema. Vorrei eseguire mvn dalla riga di comando per un file Main.java. Main.java accetta un parametro. Come faccio a farlo dalla riga di comando?Maven: Come eseguire un file .java dalla riga di comando passando gli argomenti

Ho provato a trovare un esempio ma non ho avuto successo. Qualcuno potrebbe aiutarmi dandomi un esempio di ciò?

Ho cercato here ma non ho capito bene cosa dovrei fare.

Inoltre, come si esegue tale comando da una cartella diversa dalla cartella Main.java?

ad esempio il Main.java si trova in my/java/program/Main.java. Cosa devo mettere in

mvn exec:java -Dexec.mainClass="what to put here?" -Dexec.args="arg0 arg1 arg2" 
+4

Cosa esattamente non hai capito dal tutorial legato? È piuttosto diretto. Per favore aggiungi alla tua domanda, il codice che hai provato fino ad ora. – Perception

+0

Fondamentalmente quello che sto cercando di fare è chiamare una classe java da un'altra classe java. Normalmente eseguo quella lezione da Eclipse. Sto usando Runtime.getRuntime(). Exec (""); per eseguire quella classe da un altro programma java. Ma Main.class ha bisogno di mvn per funzionare. (Ho modificato la domanda) –

risposta

109

È possibile eseguire: mvn exec:exec -Dexec.args="arg1".

Questo passerà l'argomento arg1 al programma.

È necessario specificare la classe principale completo, per esempio, un Main.java che è in un pacchetto di test avrebbe bisogno

mvn exec:java -Dexec.mainClass=test.Main 

Utilizzando il parametro -f, come misura descritto here, è anche possibile eseguirlo da altre directory.

mvn exec:java -Dexec.mainClass=test.Main -f folder/pom.xm 

Per più argomenti, è sufficiente separarli con uno spazio come si farebbe con la riga di comando.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="arg1 arg2 arg3" 

Per gli argomenti separati da uno spazio , è possibile raggruppare utilizzando 'argument separated with space' all'interno delle virgolette.

mvn exec:java -Dexec.mainClass=test.Main -Dexec.args="'argument separated with space' 'another one'" 
+0

sì, ma come fa a sapere dove si trova il file main.java? –

+0

Ho aggiunto qualche altra informazione alla mia prima risposta. – Behe

+0

cosa succede se non ho il pom.xml. Ottengo il seguente errore Impossibile eseguire mojo: java. Richiede un progetto con un pom.xml esistente, ma la build non ne sta usando uno. –

0

Date un'occhiata al maven-exec-plugin. Se usato correttamente, è possibile farlo compilare la classe java e quindi eseguire semplicemente java con la classe compilata sul classpath. Per lanciare, tutto si dovrebbe fare è utilizzare

mvn exec:exec 
+0

Quando ho difficoltà a vedere i dettagli che fanno funzionare qualcosa, sentirsi dire "semplicemente" fare qualcosa di alto livello non aiuta. Il comando di avvio fornito è un passo, ma una configurazione di esempio per exec: exec sarebbe più completa. – Chris

+0

@Chris se segui il link fornito, ci sono molti esempi (che sono mantenuti e tutto) che saranno molto più accurati e completi di quanto le mie risposte non saranno mai. Quindi questo è il motivo per cui non ho pubblicato un esempio. Vi invito a consultare la pagina del plugin maven-exec-in cui troverete tutto ciò che state cercando. –

3

Oltre a eseguire con mvn exec:java, è anche possibile eseguirlo con mvn exec:exec

mvn exec:exec -Dexec.executable="java" -Dexec.args="-classpath %classpath your.package.MainClass" 
+0

Dove inserire l'argomento Xmx in questo caso? – Fabich

+1

Provare a inserirlo in '-Dexec.args':' mvn exec: exec -Dexec.executable = "java" -Dexec.args = "- Xmx4g -classpath% classpath your.package.MainClass" ' –

+0

Non vedo dove sarà migliore dell'approccio immediato (IMO) di exec: java – Neowizard

Problemi correlati