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

作为脚本运行时,一个文件中包含多个Groovy类,groovy,Groovy,我有一个包含多个groovy文件的项目,我有几个“微小”的类,我想放在一个文件中 基本上,我想要的是: Foo.groovy: class Foo { Foo() { println "Foo" } } Bar.groovy: class Bar { Bar() { println "Bar" } } class Baz { Baz() { println "Baz" } } script.groovy: #!/groovy/current/bin/groovy

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

基本上,我想要的是:

Foo.groovy:

class Foo
{
    Foo() { println "Foo" }
}
Bar.groovy:

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

class Baz
{
    Baz() { println "Baz" }
}
script.groovy:

#!/groovy/current/bin/groovy

new Foo()
new Bar()
new Baz()
然后:

$ 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

有什么想法吗?

好吧,你还没有真正解释你为什么要这样做,所以也许显而易见的答案对你没有帮助,但你可以这样做:

#! env groovy
class Foo
{
Foo() { println "Foo" }
}

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

class Baz
{
Baz() { println "Baz" }
}

new Foo()
new Bar()
new Baz()

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

这被标记为非Bug

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

groovyc *
java -cp '/some/path/groovy-2.4.3/lib/groovy-2.4.3.jar;.' script
Foo
Bar
Baz

谢谢你的回答。很明显,我不希望只有一个包含我所有类的大文件。我想要的是一个条目文件(script.groovy)和几个包含1个或多个类的文件希望这一点对任何否决这一点的人来说都是清楚的:这样做而不加评论真的很讨厌。你的代码对我来说非常好。我已经用您的类准备好了repo,一点问题也没有:我克隆了您的repo,但仍然是:MacBook:groovy$groovy script.groovy org.codehaus.groovy.control.multiplecompilementErrorSexception:startup failed:/groovy classes在一个文件/src/main/groovy/script.groovy:5:无法解析class Baz@line 5,第1列。new Baz()^1 error实际上,它可以与Gradle/IntelliJ一起使用,但实际上,在没有编译的命令行中,它不起作用。请看我的答案。问题还没有解决吗?当我尝试完成时,它返回相同的错误:PS C:\Program Files\Java\groovy-2.4.18\bin>\groovyc.bat E:\groovy*org.codehaus.groovy.control.MultipleCompileOnErrorException:启动失败:E:\groovy\GlobalVars.groovy:1:类GlobalVars的重复类定义无效:源E:\groovy\GlobalVars.groovy至少包含两个类GlobalVars的定义。其中一个类是使用class语句显式生成的类,另一个是基于文件名从脚本体生成的类。解决方案是更改文件。。。