我在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方法时,这种理解会引发:

    异常(exception)
    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;
    

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

    谢谢!

    最佳答案

    这是一个MyClass.java示例,它在addClasspath()上使用GroovyClassLoader方法

    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代码对我有用。

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

    关于GroovyClassLoader和导入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21884218/

    10-09 04:37