2014-10-10 98 views
1

MyTestClass1.groovy:Groovy的编译器无法识别内枚举/类类型

class MyTestClass1 { 
    public static enum MyEnum { a, b } 
    public static class MyInnerClass { void a() {} } 
} 

MyTestClass.groovy:

class MyTestClass { 
    void test(MyTestClass1 c) {} 
    void test2(MyTestClass1.MyEnum c) {} 
    void test3(MyTestClass1.MyInnerClass c) {} 
} 

groovyc -cp . MyTestClass.groovy将无法​​通过。 test2/3被标记为失败,因为编译器不知道类型。 有没有什么窍门让这个编译?

+0

该示例在使用Groovy插件的Eclipse中运行良好,但独立的Groovy编译器不起作用。 – Gert 2014-10-10 08:43:50

回答

3

获得相同错误的唯一方法是编译MyTestClass而不是先编译MyTestClass1。最简单的解决方案是编译全部:groovyc -cp . MyTestClass*.groovy

$ ls 
MyTestClass.groovy MyTestClass1.groovy 
$ groovyc -cp . MyTestClass.groovy 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: 
MyTestClass.groovy: 4: unable to resolve class MyTestClass1.MyEnum 
@ line 4, column 20. 
      void test2(MyTestClass1.MyEnum c) {} 
        ^

MyTestClass.groovy: 5: unable to resolve class MyTestClass1.MyInnerClass 
@ line 5, column 17. 
      void test3(MyTestClass1.MyInnerClass c) {} 
       ^

2 errors 

$ groovyc -cp . MyTestClass1.groovy 
$ groovyc -cp . MyTestClass.groovy 
$ ls 
MyTestClass.class MyTestClass.groovy MyTestClass1$MyEnum.class MyTestClass1$MyInnerClass.class MyTestClass1.class MyTestClass1.groovy 
+0

但我不知道这些文件的代码依赖关系。我认为Groovy应该知道依赖关系并首先编译必要的类。 – Gert 2014-10-10 11:19:24

+2

只需编译所有('**/*。groovy')。或者甚至更好地使用maven,gradle,make,younameit。 – cfrick 2014-10-10 11:27:52