加载使用其他类的静态内部类的类时,GroovyScriptEngine抛出MultipleCompilationErrorsException

时间:2018-09-12 12:06:01

标签: groovy

我遇到了GroovyScriptEngine的问题-似乎无法使用内部类。有人知道GroovyScriptEngine还是有一些限制?

我有一个包含这两个文件的目录:

// MyClass.groovy

public class MyClass {
    MyOuter m1;
    MyOuter.MyInner m2;
}

// MyOuter.groovy

public class MyOuter {
    public static class MyInner {}
}

我有以下测试课程:

import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;

import groovy.util.GroovyScriptEngine;

public class TestGroovyScriptEngine {

    public static void main(String[] args) throws MalformedURLException, ClassNotFoundException {

        final File myGroovySourceDir = new File("C:/MyGroovySourceDir");

        final URL[] urls = { myGroovySourceDir.toURL() };
        GroovyScriptEngine groovyScriptEngine = new GroovyScriptEngine(urls,
                Thread.currentThread().getContextClassLoader());

        Class<?> clazz = groovyScriptEngine.getGroovyClassLoader().loadClass("MyClass");
    }

}

运行它时,出现以下编译错误:

Exception in thread "main" org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
C:\MyGroovySourceDir\MyClass.groovy: 3: unable to resolve class MyOuter.MyInner 
 @ line 3, column 2.
    MyOuter.MyInner m2;
    ^

1 error

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:311)
    at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:983)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:633)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:582)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:354)
    at groovy.lang.GroovyClassLoader.access$300(GroovyClassLoader.java:87)
    at groovy.lang.GroovyClassLoader$5.provide(GroovyClassLoader.java:323)
    at groovy.lang.GroovyClassLoader$5.provide(GroovyClassLoader.java:320)
    at org.codehaus.groovy.runtime.memoize.ConcurrentCommonCache.getAndPut(ConcurrentCommonCache.java:147)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:318)
    at groovy.util.GroovyScriptEngine$ScriptClassLoader.doParseClass(GroovyScriptEngine.java:248)
    at groovy.util.GroovyScriptEngine$ScriptClassLoader.parseClass(GroovyScriptEngine.java:235)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:307)
    at groovy.lang.GroovyClassLoader.recompile(GroovyClassLoader.java:811)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:767)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:836)
    at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:824)

我本来希望“干净的编译”,但是内部类似乎引起了问题。

我的groovy类可以在groovyc或Eclipse中在命令行上很好地编译。

0 个答案:

没有答案