【发布时间】:2016-11-29 18:55:56
【问题描述】:
我有以下 Groovy 脚本 test.groovy:
import test.Vehicle
def ok=new Vehicle();
def test=new Vehicle.Deserializer();
println "Hello, world!"
而且,我有 code/test/Vehicle.groovy,具有以下类定义:
package test;
public class Vehicle {
public static class Deserializer {
}
}
但是,以下命令失败:
groovy -cp code/ test.groovy
(groovy -v 报告 2.4.7)
我希望它能够成功并打印“Hello, world”。相反,我得到:
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
/tmp/test.groovy: 4: unable to resolve class Vehicle.Deserializer
@ line 4, column 10.
def test=new Vehicle.Deserializer();
^
1 error
由于脚本在前一行没有失败,Groovy 可以毫无问题地找到 Vehicle 类。只是找不到Deserializer 静态类。
但是,这个脚本工作得很好:
public class Vehicle {
public static class Deserializer {
}
}
def ok=new Vehicle();
def test=new Vehicle.Deserializer();
println "Hello, world!"
当静态类(及其外部类)在单独的 Groovy 文件中定义时,我需要做些什么来让 Groovy 使用静态类?
更新:我找到了this issue,并且可以确认Groovy 至少可以看到Deserializer 类:
import test.Vehicle;
import static test.Vehicle.Deserializer;
println Deserializer.class.name
def ok=new Vehicle();
// def test=new Vehicle.Deserializer();
println "Hello, world!"
这按预期工作:
test.Vehicle$Deserializer
Hello, world!
但是,取消注释 def test=new Vehicle.Deserializer(); 仍然会给我错误,将其更改为 def test=new Deserializer(); 也是如此(给定 import static)。
【问题讨论】:
-
我还没有测试过自己,但是您是否尝试过在
test.groovy中明确导入静态类作为import static test.Vehicle.Deserializer? -
@dmahapatro:
import test.Vehicle.Deserializer导致第二个“无法解析类”错误,指向该行。import static test.Vehicle.Deserializer,奇怪的是,不会导致第二个错误,但它不会清除第一个错误。 -
是的,见证了同样的事情。在执行
test.groovy之前,我还尝试通过groovyc编译Vehicle.groovy,但我仍然看到它在抱怨。这可能是个问题。 -
将
test.groovy与Vehicle.groovy放在同一个包中,编译Vehicle.groovy然后运行groovy test.groovy有效!! -
@dmahapatro:我不确定“旁边”是什么意思。如果您的意思是“不在包中,例如我正在使用的
test”,则在我的情况下这不是一个选项,并且类似于我的工作脚本(问题中的最后一个代码 sn-p)。
标签: groovy