2009-05-28 23 views
12

Java ile olduğu gibi paketi noktalarla belirterek Groovy sınıfını yürütmenin bir yolu var mı?Bir paket içinde Groovy sınıfını komut satırından yürütme

Örnek: ./my/package/MyClass.groovy Dosya:

package my.package 

class MyClass { 
    static void main(String[] args) { 
    println "ok" 
    } 
} 
Geçen komut işe bekliyordum
 
> 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 

. Sınıf yolunu ayarlamanın çeşitli yollarını denedim, boşuna.

cevap

14

Her şeyden önce, paketi ayrılmış bir anahtar sözcüktür, bu nedenle paket adı olarak kullanamazsınız.

İkincisi, bunu Groovy'de yapamazsınız, çünkü nokta gösterimi komut dosyaları için değil, sınıflar için kullanılır, dolayısıyla kullanmak için derlenmiş bir sınıf dosyasına ihtiyacınız vardır.

Yine de java + sınıf yolunda olan harika komutu değiştirebilirsiniz:

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

Bunu az ayrıntılı hale getirmek için örneğin kendisine 'g_java' bir takma ad ekleyebilirsiniz.

+0

Doğru cevap gibi geliyor ama işe yaramıyor. Bir örnek olarak "my.package" yi kullandım - fark ettiğim en kötü olanı. Her neyse, kabul edilebilir bir paket ismiyle bile, ve groovyc ile derlendikten sonra, işe yaramıyor. groovyc my/some/MyClass.groovy export CLASSPATH =. ls benim/bazı/MyClass.class gözlerimi/bazı/MyClass.class harika yakalandı my.some.MyClass: java.io.FileNotFoundException: /Users/olivier/my.some.MyClass (/ Users/olivier/my.some.MyClass) ? –

+0

Haklısın, bunu nasıl özledim bilmiyorum. Biraz aldatmaya aldırmazsanız, groovy komutunu java + classpath ile değiştirebilirsiniz: java -cp /usr/share/java/groovy/embeddable/groovy-all-1.6.3.jar :. my.some.MyClass Örneğin 'g_java' için bir takma ad ekleyebilir ve daha az ayrıntılı hale getirebilirsiniz. –

+0

Teşekkürler. İşe yarıyor. Yani, asıl soruma cevap: Hayır, Groovy'de bu şekilde çalışmıyor. Javac ve java kullanmalısın. –