Quello che voglio fare è invocare Maven da uno script groovy. Lo script groovy in questione viene utilizzato come un wrapper maven per creare progetti J2EE scaricando un tag e invocando il maven su ciò che è stato scaricato. Come dovrei realizzare invocando maven per compilare/pacchettizzare l'EAR (lo script groovy è già in grado di scaricare il tag da SCM).Come effettuare chiamate di comando di sistema in Java/Groovy?
risposta
Il modo più semplice per richiamare un processo esterno in Groovy è utilizzare il comando execute() su una stringa. Ad esempio, per eseguire Maven da uno script Groovy eseguire questo:
"cmd /c mvn".execute()
Se si desidera catturare l'output del comando e magari stamparlo, si può fare questo:
print "cmd /c mvn".execute().text
Il ' cmd/c 'all'inizio richiama la shell dei comandi di Windows. Poiché mvn.bat è uno script batch, ti serve questo. Per Unix puoi invocare la shell di sistema.
È possibile utilizzare la classe di runtime per avviare un comando di shell. dai un'occhiata qui: http://java.sun.com/javase/6/docs/api/java/lang/Runtime.html#exec(java.lang.String) Puoi in seguito catturare i risultati dell'esecuzione del processo (per scoprire se è fallito o meno).
per Java 7+ stdio reindirizzamento:
new ProcessBuilder('cmd', …args…).redirectOutput(ProcessBuilder.Redirect.INHERIT).start().waitFor();
Se passi in un 'List' di args, assicurati che gli elementi siano tutti' String's e non [GString] (http://docs.groovy-lang.org/docs/latest/html/api/groovy/ lang/GString.html) s con variabili interpolate. Inoltre, non dimenticare di 'redirectError'. – seanf
E 'semplice come fare
"yourCommand".execute();
Se si desidera ottenere risultati di stampa sul comando eseguito sullo standard output che si può fare
def proc = "yourCommand".execute();
proc.waitForProcessOutput(System.out, System.err);
Se si desidera archiviare ed elaborare l'output, è possibile eseguire
def proc = "yourCommand".execute();
def outputStream = new StringBuffer();
proc.waitForProcessOutput(outputStream, System.err);
println(outputStream .toString());
quando faccio questo def homeDir = "c:/test/server"; def workDir = "$ {homeDir}/workDir"; def tempDir = "$ {workDir}/tmp"; println (homeDir); println (workDir); runShell ("cd c:"); // runShell ("mkdir -p $ {tempDir}"); void runShell (String s) { def execute = s.execute(); execute.waitForProcessOutput (System.out, System.err); def value = execute.exitValue(); if (val> 0) { throw new Exception ("Exit value: $ {value}"); } } Ottengo un errore come sotto java.io.IOException: Impossibile eseguire il programma "cd": Errore di CreateProcess = 2, Il sistema non riesce a trovare il file specificato – user641887
- 1. Effettuare chiamate OpenGL ridondanti
- 2. Come posso effettuare chiamate di funzione inline in Objective-C?
- 3. Chiamate di sistema su Windows
- 4. Chiamate di sistema del sistema operativo da script bash
- 5. Effettuare chiamate EJB con timeout
- 6. RxJava + Retrofit: effettuare più chiamate
- 7. Effettuare chiamate senza attività ACTION_CALL
- 8. Come effettuare chiamate API di YouTube dall'app GWT
- 9. Sono chiamate di funzione come read(), write() chiamate di sistema effettive in linux?
- 10. Chiamate di sistema Linux e modalità kernel
- 11. Ottenere chiamate di sistema Python come risultati di stringa
- 12. debian pagine man per chiamate di sistema
- 13. Effettuare chiamate JSON all'API Pandora Unoffical
- 14. Modo rapido per effettuare più chiamate AJAX
- 15. Esecuzione del comando di sistema in Vala
- 16. Utilizzo del comando di sistema in Qt
- 17. API Web per effettuare chiamate telefoniche
- 18. Impossibile effettuare chiamate API utilizzando nativa react
- 19. Interrupt loop con comando di sistema
- 20. Algoritmo per effettuare il minor numero di chiamate a un'API
- 21. Quando e come vengono interrotte le chiamate di sistema?
- 22. Come proibire le chiamate di sistema, GNU/Linux
- 23. Come posso effettuare chiamate Ajax a intervalli senza sovrapposizione?
- 24. Come posso effettuare chiamate API arbitrarie utilizzando Ember.js?
- 25. Come effettuare correttamente chiamate al database asincrono/parallelo
- 26. Python, utilizzando subprocess.Popen per effettuare chiamate linea di comando linux? Sto ricevendo "[Errno 2] Nessun file o directory"
- 27. Come sapere se il dispositivo Cocoa Touch può effettuare chiamate?
- 28. Come effettuare chiamate Ajax con Rails 3 usando remote_function?
- 29. Effettuare una chiamata di sistema per ottenere l'elenco dei processi
- 30. Come eseguire un comando di sistema in Qt?
Cool! Non sapevo che puoi farlo. – armandino
Questo ha funzionato per la prima volta. È andato giù per il processo "consumeProcessOutput()" per un po 'ma non ha avuto dadi con quello. Questo aiuterà notevolmente a determinare i motivi per cui la build di Docker fallisce. – eversMcc