2009-05-28 41 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