2009-05-28 73 views
12

有沒有像Java一樣通過指定帶點的包來執行Groovy類的方法?從命令行執行一個包中的Groovy類

例如: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 

我期待的最後一個命令的工作。我嘗試了各種設置類路徑的方法,但無濟於事。

回答

14

首先,是保留關鍵字,因此您不能將其用作包名稱。

其次,你不能在Groovy中做到這一點,因爲點符號用於類,而不是腳本,所以你需要一個編譯後的類文件來使用它。

不過,你可以用java +類路徑替換常規命令:

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

您可以添加別名它g_java「例如,使其更簡潔。

+0

這聽起來像是正確的答案,但它不工作。順便說一下,我用「my.package」作爲例子 - 我認識到一個糟糕的例子。無論如何,即使有可接受的軟件包名稱,並且在使用groovyc編譯後,它也不起作用。我的/ some/MyClass.groovy export CLASSPATH =。 LS我的/一些/ MyClass.class 我的/一些/ MyClass.class 常規my.some.MyClass 捉住:java.io.FileNotFoundException:/Users/olivier/my.some.MyClass(/用戶/奧利弗/ my.some.MyClass) ? – 2009-05-28 16:51:42