Ant*_*edo 5 groovy groovyshell groovyclassloader java-7
我在我的Java类中使用GroovyClassLoader来解析某个(理想情况下很复杂的)groovy文件(将在下一步执行):
在MyClass.java中调用
final Class parsedClass = groovyClassLoader.parseClass(groovyFile);
Run Code Online (Sandbox Code Playgroud)
知道:
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
Run Code Online (Sandbox Code Playgroud)
当调用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;
Run Code Online (Sandbox Code Playgroud)
在解析基类之前,我是否可以获得我期望的行为而不解析每个导入类?
谢谢!
这是一个使用该addClasspath()方法的MyClass.java示例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());
}
}
Run Code Online (Sandbox Code Playgroud)
我假设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
Run Code Online (Sandbox Code Playgroud)
并且GroovyFile.groovy存在于主目录中.例如
import com.myimport.one.Import1DTO
import com.myimport.two.Import2DTO
println "hi there"
Run Code Online (Sandbox Code Playgroud)
那么上面的Java代码对我有用.
我在类路径上使用Groovy 2.2.1和groovy-all-2.2.1.jar(对于GroovyClassLoader).