【问题标题】:GroovyClassLoader and importsGroovyClassLoader 和导入
【发布时间】:2014-03-20 00:05:20
【问题描述】:

我在我的 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;

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

谢谢!

【问题讨论】:

    标签: groovy java-7 groovyshell groovyclassloader


    【解决方案1】:

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

    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-all-2.2.1.jar 的 Groovy 2.2.1(用于 GroovyClassLoader)。

    【讨论】:

    • 谢谢!继续您的示例,我认为不需要重新部署如果我对 Import1DTO.groovy、Import2DTO.groovy 或 GroovyFile.groovy 进行了一些更改,但是,如果我使用所需的 Import3DTO.class 创建一个新的 Import3DTO.groovy 会发生什么?跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多