2016-05-16 5 views
0

Я пытаюсь проанализировать код проекта java. У меня есть проект для анализа в банке, который я добавляю в javassist path, используя функцию insertClassPath. Все работает нормально, если я пытаюсь получить доступ к форме класса проекта. Проблема в том, что мне нужно также получить доступ к классам из библиотек, которые использует проект.Загрузите библиотечные банки с javassist

Я попытался добавить библиотеку в путь класса так же, как я сделал это с помощью jar проекта, но я получаю исключение NotFoundException, поэтому я думаю, что я не даю правильный путь.

код выглядит следующим образом:

String jarFileName = "C:/Users/diana/Desktop/Test/ckjm.jar"; 
ClassPool pool = ClassPool.getDefault(); 
    try{ 
     pool.insertClassPath(jarFileName); 
     pool.insertClassPath("C:/Users/diana/Desktop/Test/ckjm/lib/bcel-5.2.jar"); 
    } catch (NotFoundException e) { 
     System.out.println("error loading jar!!"); 
    } 

Я использовал harcoded строку только для целей тестирования. Ящик находится в папке lib или проекте, который был заархивирован в банку. Я не уверен, как добавить ящик, который содержится в другой банке.

Примечание: если я держать библиотеку в качестве отдельной банки (и дать путь, как: «C: /Users/diana/Desktop/Test/bcel-5.2.jar») это ковшики мелкого

Любую помощи будут оценены

ответ

0

Если ваша цель JAR находится внутри другого JAR, вы можете использовать LoaderClassPath создан с использованием URLClassLoader, который определяется с помощью JarURLConnection URL путь к JAR.

Так что у вас есть цель JAR, inner.jar, встроенный внутри другого JAR, C: /Users/diana/outer.jar.

Предположим, что он находится в подкаталоге lib.

URL-адрес внешнего JAR будет файл:/C: /Users/diana/outer.jar.

URL внутреннего JAR будет jar: file:/C: /Users/diana/outer.jar! /lib/inner.jar.

Вы код для загрузки этого пути к классам будет:

URL cpUrl = new URL("jar:file:/C:/Users/diana/outer.jar!/lib/inner.jar"); 
URLClassLoader cpUrlLoader = new URLClassLoader(new URL[]{cpUrl}); 
pool.insertClassPath(new LoaderClassPath(cpUrlLoader)); 
+0

Я попытался это, но до сих пор я не могу получить доступ к классам из кувшина. Функция insertClassPath не генерирует исключение, но когда я пытаюсь получить доступ к классу с помощью pool.get (className), я получаю NotFoundException –

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