作为脚本运行时,在一个文件中有多个Groovy类

Chr*_*phe 5 groovy

我有一个包含多个groovy文件的项目,我有几个"小"类,我想放在一个文件中.

基本上,这就是我想要的:

Foo.groovy:

class Foo
{
    Foo() { println "Foo" }
}
Run Code Online (Sandbox Code Playgroud)

Bar.groovy:

class Bar
{
    Bar() { println "Bar" }
}

class Baz
{
    Baz() { println "Baz" }
}
Run Code Online (Sandbox Code Playgroud)

script.groovy:

#!/groovy/current/bin/groovy

new Foo()
new Bar()
new Baz()
Run Code Online (Sandbox Code Playgroud)

然后:

$ groovy ./script.groovy 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/home/tmp/script.groovy: 5: unable to resolve class Baz 
 @ line 5, column 1.
   new Baz()
   ^

1 error
Run Code Online (Sandbox Code Playgroud)

任何的想法?

Mic*_*das 7

当Groovy作为没有编译的脚本运行时,通过将名称与相应的*.groovy源文件匹配来解析类,因此只能找到类名与源文件名匹配的类.

这是标记为非Bug的已知问题.

作为一种解决方法,您可以先编译类groovyc,然后使用java以下命令运行:

groovyc *
java -cp '/some/path/groovy-2.4.3/lib/groovy-2.4.3.jar;.' script
Foo
Bar
Baz
Run Code Online (Sandbox Code Playgroud)