2009-05-28 7 views
12

Esiste un modo per eseguire una classe Groovy specificando il pacchetto con punti, come con java?Esegui una classe Groovy in un pacchetto dalla riga di comando

esempio: file ./my/package/MyClass.groovy:

package my.package 

class MyClass { 
    static void main(String[] args) { 
    println "ok" 
    } 
} 
 
> cd my/package 
my/package> groovy MyClass 
ok 
> cd ../.. 
> groovy my/package/MyClass.groovy 
ok 
> groovy my/package/MyClass 
ok 
> groovy my.package.MyClass 
Caught: java.io.FileNotFoundException: my.package.MyClass 

mi aspettavo l'ultimo comando di lavorare. Ho provato vari modi di impostare il classpath, senza risultato.

risposta

14

Prima di tutto, il pacchetto è una parola chiave riservata, quindi non è possibile utilizzarlo come nome di un pacchetto.

In secondo luogo, non è possibile farlo in Groovy, poiché la notazione punto viene utilizzata per le classi, non per gli script, quindi è necessario un file di classe compilato per utilizzarlo.

Ancora, è possibile sostituire il comando Groovy con java + percorso di classe:

java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar:. my.some.MyClass

È possibile aggiungere un alias ad esso 'g_java' ad esempio per renderlo meno prolissa.

+0

Sembra la risposta giusta, ma non funziona. Ad ogni modo, ad esempio, ho usato "my.package", un cattivo esempio. Ad ogni modo, anche con un nome di pacchetto accettabile, e dopo la compilazione con groovyc, non funziona. groovyc mio/alcuni/MyClass.groovy esportazione CLASSPATH =. ls mia/some/MyClass.class mio/some/MyClass.class my.some.MyClass Groovy fermati: java.io.FileNotFoundException: /Users/olivier/my.some.MyClass (/ Users/olivier/my.some.MyClass) ? –

+0

Hai ragione, non so come mi sia mancato. Se non ti dispiace barare un po ', puoi sostituire il comando groovy con java + classpath: java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar :. my.some.MyClass È possibile aggiungere un alias ad esso 'g_java' per esempio per renderlo meno dettagliato. –

+0

Grazie. Funziona. Quindi, la risposta alla mia domanda iniziale è: No, non funziona in questo modo in Groovy. Devi usare javac e java. –

Problemi correlati