4

我在我的 Java 类中使用 GroovyClassLoader 来解析某个(理想情况下是复杂的)groovy 文件(将在下一步中执行):

调用 MyClass.java

final Class parsedClass = groovyClassLoader.parseClass(groovyFile);

知道:

  • Groovy 文件需要存储在文件系统中,因为需要在不重新部署的情况下进行更改。
  • 这个 groovy 文件需要几个导入:

GroovyFile.groovy 导入

import com.my.import.one.Import1DTO
import com.my.import.two.Import2DTO
import com.my.import.three.Import3DTO
import com.my.import.four.Import4DTO
import com.my.import.five.Import5DTO

当调用parseClass方法时,会引发此异常:

例外

unable to resolve class com.my.import.one.Import1DTO;
unable to resolve class com.my.import.two.Import2DTO;
unable to resolve class com.my.import.three.Import3DTO;
unable to resolve class com.my.import.four.Import4DTO;
unable to resolve class com.my.import.five.Import5DTO;

在解析基类之前,我可以在不解析每个导入类的情况下获得我期望的行为吗?

谢谢!

4

1 回答 1

4

这是一个使用addClasspath()方法的示例 MyClass.javaGroovyClassLoader

import groovy.lang.GroovyClassLoader;

public class MyClass {
    public static void main(String... args) {
        GroovyClassLoader groovyClassLoader = new GroovyClassLoader();

        // add "lib" to the classpath
        groovyClassLoader.addClasspath("lib");

        String groovyFile = "GroovyFile.groovy";
        Class parsedClass = groovyClassLoader.parseClass(groovyFile);
        System.out.println("class is " + parsedClass.toString());
    }
}

我假设 DTO 是用 Groovy 编写的,并且我们使用“myimport”,因为“my.import.x”会由于非法语法而失败。如果我们有一个像这样的“lib”目录,带有已编译的类:

lib/com/myimport/one/Import1DTO.groovy
lib/com/myimport/one/Import1DTO.class
lib/com/myimport/two/Import2DTO.groovy
lib/com/myimport/two/Import2DTO.class

并且 GroovyFile.groovy 存在于主目录中。例如

import com.myimport.one.Import1DTO
import com.myimport.two.Import2DTO

println "hi there"

那么上面的Java代码对我有用。

我在类路径(用于 GroovyClassLoader)上使用带有 groovy-all-2.2.1.jar 的 Groovy 2.2.1。

于 2014-02-20T03:38:06.750 回答