Java 加载带有依赖项的groovy类
假设我想使用Java 加载带有依赖项的groovy类,java,groovy,Java,Groovy,假设我想使用GroovyClassLoader加载一个使用其他几个类的类 test1.groovy | |_test2.groovy | | | test3.groovy | test4.groovy 除了按顺序加载它们之外,test4->test3->test2->test1。我可以加载test1并加载它的所有依赖项吗 给定File1.groovy类似: import File2 new File2().sayHi( 'tim' ) c
GroovyClassLoader
加载一个使用其他几个类的类
test1.groovy
|
|_test2.groovy
| |
| test3.groovy
|
test4.groovy
除了按顺序加载它们之外,
test4->test3->test2->test1
。我可以加载test1
并加载它的所有依赖项吗 给定File1.groovy
类似:
import File2
new File2().sayHi( 'tim' )
class File2 {
def sayHi( name ) {
println "Hi $name"
}
}
import groovy.lang.GroovyClassLoader ;
import groovy.lang.GroovyObject ;
public class Test {
public static void main( String[] args ) throws Exception {
GroovyClassLoader loader = new GroovyClassLoader() ;
GroovyObject o = (GroovyObject)loader.loadClass( "File1" ).newInstance() ;
o.invokeMethod( "run", new Object[] {} ) ;
loader.close() ;
}
}
和File2.groovy
类似:
import File2
new File2().sayHi( 'tim' )
class File2 {
def sayHi( name ) {
println "Hi $name"
}
}
import groovy.lang.GroovyClassLoader ;
import groovy.lang.GroovyObject ;
public class Test {
public static void main( String[] args ) throws Exception {
GroovyClassLoader loader = new GroovyClassLoader() ;
GroovyObject o = (GroovyObject)loader.loadClass( "File1" ).newInstance() ;
o.invokeMethod( "run", new Object[] {} ) ;
loader.close() ;
}
}
和Test.java
类似:
import File2
new File2().sayHi( 'tim' )
class File2 {
def sayHi( name ) {
println "Hi $name"
}
}
import groovy.lang.GroovyClassLoader ;
import groovy.lang.GroovyObject ;
public class Test {
public static void main( String[] args ) throws Exception {
GroovyClassLoader loader = new GroovyClassLoader() ;
GroovyObject o = (GroovyObject)loader.loadClass( "File1" ).newInstance() ;
o.invokeMethod( "run", new Object[] {} ) ;
loader.close() ;
}
}
我可以用以下方法编译它:
javac -cp groovy-all-2.2.1.jar:. Test.java
当我这样做的时候:
java -cp groovy-all-2.2.1.jar:. Test
它打印:
Hi tim
我的示例与您的示例有何不同,您能在您的问题中添加差异吗?这是来自Java的吗?你试过了吗?是的,这是java的。如果您不按顺序加载它们,您将得到一个
多重编译错误异常。您能给出一个我可以测试的简单示例吗?GroovyClassLoader=new GroovyClassLoader();loader.loadClass(“test1”);loader.close()代码>假设您使用了上面的小图,它应该会抛出一个异常。除了使用loader.addClasspath(“test”)
之外,您的几乎是一样的。我发现了这一点,这让我觉得自己很笨。我的Test2是在Test2.groovy中,而不是在Test2.groovy中。