Извлечение заводной банки - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть JAR-файл, который содержит некоторый класс. Из этого JAR-файла я хочу запустить определенный класс, предположим, A.class.

Во время выполнения я добавляю этот JAR-файл в свой код и извлекаю его содержимое.,Из извлеченной папки.После этого я создаю GroovyClassloader и добавляю извлеченный путь к папке в classpath groovy classloader.После этого я загружаю A.class с помощью Groovy Classloader.До этого кода у меня все работало нормально, но когда я пытаюсь создать экземпляр A.class в то время, код бросает исключение fount класса для другого зависимого класса A.class, т.е. если A.class import B.classчем во время создания экземпляра A.class кода, выдается исключение B класс не найден.Может быть потому, что загрузчик классов другой.

Может ли кто-нибудь подсказать мне, как решить эту проблему.

Мой код:

new UnZip().unZipIt(<groovy/jar/path>,</unzip/dir/path>);
GroovyClassLoader gcl = new GroovyClassLoader();
gcl.addClasspath(<unzip/dir/path>);
Class<?> klass = gcl.loadClass("A");
klass.newInstance();

PS: файл jar - это groovy, файл используется в коде java.

1 Ответ

0 голосов
/ 27 декабря 2018

Вам не нужно извлекать банку.Просто добавьте jar в classpath: gcl.addClasspath(<groovy/jar/path>);

Приведенный ниже код добавляет jar к загрузчику классов gcl по URL.Однако вы можете добавить его по filepath.

GroovyClassLoader gcl = new GroovyClassLoader();
gcl.addClasspath('http://central.maven.org/maven2/commons-io/commons-io/2.6/commons-io-2.6.jar');
Class<?> klass = gcl.loadClass("org.apache.commons.io.output.NullWriter");
def o = klass.newInstance();

println o.getClass()
...