GroovyClassLoader and import

I use GroovyClassLoader in my Java class to parse some (ideally complex) groovy file (which will be executed in the next step):

Call in MyClass.java

final Class parsedClass = groovyClassLoader.parseClass(groovyFile);

Knowing that:

  • Groovy files must be stored on the file system because they must be changed without redistribution.
  • This groovy file will require several imports:

Import 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

When the parseClass method is called, this exception throws:

Exceptions

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;

Is it possible to get the behavior that I expect without parsing each import class before parsing the base class?

Thanks!

+4
source share
1 answer

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).

+5

Source: https://habr.com/ru/post/1527726/


All Articles