2012-09-12 11 views
8

Ho trovato un esempio per l'esecuzione di script Groovy su sistemi su cui Groovy non è installato utilizzando il file jar groovy-all. Ho cercato i seguenti:Quando si eseguono script Groovy usando il jar groovy-all, come si specifica un classpath?

java -cp src:.:lib/* -jar lib/groovy-all-2.0.1.jar src/com/example/MyScript.groovy 

Il problema è che il mio script dipende vasi nella directory lib più altre due file di script Groovy ubicati in src/com/esempi. Quando eseguo questo, si lamenta delle dichiarazioni di importazione per tutti loro. Posso farlo funzionare su un sistema che ha installato benissimo utilizzando Groovy seguente:

CLASSPATH="src:.:lib/*" groovy src/com/example/MyScript.groovy 

Come faccio a eseguire gli script Groovy in questo modo, utilizzando il groove-tutto vaso, così come dare un percorso di classe?

risposta

18

Non è possibile combinare sia -jar e -cp in un comando java, quindi è necessario denominare la classe principale in modo esplicito. Guardando il manifesto del groovy-all JAR, il nome della classe principale è groovy.ui.GroovyMain, quindi è necessario

java -cp 'src:.:lib/*' groovy.ui.GroovyMain src/com/example/MyScript.groovy 

(se groove-tutto non sono stati già coperti da lib/* si avrebbe bisogno di aggiungere che alla -cp pure).

1

Un modo è quello di compilare i file di Groovy in file "* .class". Quindi includi il jar dalla directory $ GROOVY_HOME/embeddable e mettilo nel classpath.

Ecco un esempio minimale (la prima linea è una copia semplice Unix; uso quello che funziona per voi):

$ cp /some-dir/groovy-1.8.5/embeddable/* . 
$ groovyc Test.groovy 
$ java -cp . groovy-all-1.8.5.jar Test 

Per la distribuzione tipica, si dovrebbe utilizzare Ant/Maven/Gradle per costruire il proprio vaso file con Groovy compilato (cioè file di classe) al suo interno.

Problemi correlati