GroovyClassLoader和导入 [英] GroovyClassLoader and imports

查看:0
本文介绍了GroovyClassLoader和导入的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

我是否可以在不分析每个导入类的情况下获得预期的行为,然后再分析基类?

谢谢!

推荐答案

下面是一个使用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.port.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和导入的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆