4

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;

基本クラスを解析する前にすべてのインポート クラスを解析しなくても、期待どおりの動作を得ることができますか?

ありがとう!

4

1 に答える 1

4

addClasspath()メソッド onを使用する 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());
    }
}

「my.import.x」は不正な構文のために失敗するため、DTO は Groovy で作成され、「myimport」を使用すると仮定します。そのような「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コードが機能します。

クラスパス(GroovyClassLoader用)でgroovy-all-2.2.1.jarを使用してGroovy 2.2.1を使用しています。

于 2014-02-20T03:38:06.750 に答える