2012-01-04 7 views
2

Используя пример, приведенный в documentation for ClassLoader я могу загрузить класс, который находится в том же пакете, ${it}:Должен ли ClassLoader разрешать и загружать класс из другого пакета?

ClassLoader cl = it.class.getClassLoader() 
def builder = cl.loadClass("hudson.plugins.emailext.plugins.ContentBuilder", true).newInstance() 

Но когда я пытаюсь загрузить из другого пакета, как это:

def logParserParser = cl.loadClass("hudson.plugins.logparser.LogParserParser", true).newInstance() 

Я получаю сообщение об ошибке:

Exception: javax.script.ScriptException: java.lang.ClassNotFoundException: hudson.plugins.logparser.LogParserParser.

Как загрузить класс из другого пакета?

UPDATE:

Я был в состоянии сделать работу вокруг, чтобы исправить свою конкретную проблему. Было бы намного лучше, если бы класс просто решил. См. Мой ответ на другой вопрос: here.

ответ

0

Это зависит от того, как был настроен ClassLoader. Эти типы ошибок обычно возникают, когда класс, который вы хотите, использует класс, который недоступен. то есть сам класс доступен. Каково точное сообщение об ошибке?

+0

Я обновил свой вопрос с точной погрешностью. Я могу перейти к классу с файловым браузером, поэтому я знаю, что он есть. Класс делает свою работу в Jenkins в веб-браузере тоже, я просто пытаюсь получить к нему доступ, чтобы я мог получить его выход, не проходя через веб-браузер. – ubiquibacon

+0

Вы также можете получить эту ошибку, если класс ранее не загружался, например. статический блок выдал ошибку, однако истинная причина не сохраняется. –

0

Что вы пытаетесь работать, я думаю.

Может быть, проблема в том, что у LogParserParser нет открытого конструктора no-args?

Кроме того, вы можете попробовать запустить тестовую JVM с помощью -XX: + TraceClassLoading, чтобы лучше понять, что пытается выполнить загрузчик классов.

Смежные вопросы