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中。