我在 Java 类中使用 GroovyClassLoader 来解析某个(理想情况下是复杂的)groovy 文件(将在下一步中执行):
在MyClass.java中调用
final Class parsedClass = groovyClassLoader.parseClass(groovyFile);
知道:
- 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
当。。。的时候解析类方法被调用,引发此异常:
例外情况
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;
在解析基类之前不解析每个导入类,我可以获得我期望的行为吗?
Thanks!
这是一个示例 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)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)