2009-05-28 6 views
12

Gibt es eine Möglichkeit, eine Groovy-Klasse auszuführen, indem Sie das Paket mit Punkten angeben, wie mit Java?Ausführen einer Groovy-Klasse in einem Paket über die Befehlszeile

Beispiel: Die Datei ./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 

Ich war der letzte Befehl erwartet zu arbeiten. Ich habe verschiedene Möglichkeiten ausprobiert, den Klassenpfad zu setzen, ohne Erfolg.

Antwort

14

Zunächst ist Paket ein reserviertes Schlüsselwort, so dass Sie es nicht als Paketnamen verwenden können.

Zweitens, Sie können das nicht in Groovy tun, da die Punktnotation für Klassen verwendet wird, nicht für Skripte, so dass Sie eine kompilierte Klassendatei benötigen, um sie zu verwenden.

Dennoch können Sie den groovy Befehl mit Java + Classpath ersetzen:

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

Sie können einen Alias ​​es g_java 'hinzufügen zum Beispiel, um es weniger ausführlich.

+0

Es klingt wie die richtige Antwort, aber es funktioniert nicht. Ich habe übrigens "my.package" als Beispiel benutzt - ein schlechter, den ich realisiere. Wie auch immer, selbst mit einem akzeptablen Paketnamen und nach der Kompilierung mit groovyc funktioniert es nicht. groovyc meine/einige/MyClass.groovy exportieren CLASSPATH =. ls mein/some/MyClass.class mein/some/MyClass.class groovy my.some.MyClass Erwischt: java.io.FileNotFoundException: /Users/olivier/my.some.MyClass (/ Users/olivier/my.some.MyClass) ? –

+0

Sie haben Recht, ich weiß nicht, wie ich das vermisst habe. Wenn es Ihnen nichts ausmacht, ein bisschen zu betrügen, können Sie den Befehl groovy durch java + classpath ersetzen: java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar :. my.some.MyClass Sie können ein Alias ​​'g_java' hinzufügen, um es weniger ausführlich zu machen. –

+0

Danke. Es klappt. Die Antwort auf meine ursprüngliche Frage lautet also: Nein, in Groovy funktioniert das nicht. Sie müssen Javac und Java verwenden. –