当 运行 作为脚本时,一个文件中有多个 Groovy 类
Multiple Groovy classes in one file when running as a script
我有一个包含多个 groovy 文件的项目,我有几个 "tiny" 类 我想放在一个文件中。
基本上,这就是我想要的:
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 是 运行 作为未经编译的脚本时,然后 classes 通过将名称匹配到相应的 *.groovy
源文件来解析,因此只有 classes 可以找到 class 名称与源文件名匹配的位置。
这 known problem 标记为不是错误。
作为解决方法,您可以先使用 groovyc
编译 classes,然后使用 java
:
编译 运行
groovyc *
java -cp '/some/path/groovy-2.4.3/lib/groovy-2.4.3.jar;.' script
Foo
Bar
Baz
我有一个包含多个 groovy 文件的项目,我有几个 "tiny" 类 我想放在一个文件中。
基本上,这就是我想要的:
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 是 运行 作为未经编译的脚本时,然后 classes 通过将名称匹配到相应的 *.groovy
源文件来解析,因此只有 classes 可以找到 class 名称与源文件名匹配的位置。
这 known problem 标记为不是错误。
作为解决方法,您可以先使用 groovyc
编译 classes,然后使用 java
:
groovyc *
java -cp '/some/path/groovy-2.4.3/lib/groovy-2.4.3.jar;.' script
Foo
Bar
Baz