2014-10-10 2 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

Пример хорошо работает в Eclipse с плагином Groovy, но автономный компилятор Groovy не будет работать. – Gert

ответ

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

+2

Просто скомпилируйте все ('**/*. Groovy'). Или даже лучше использовать maven, gradle, make, younameit. – cfrick

Смежные вопросы