Я хочу получить все пути jar, которые я могу найти .class файл в этих баночках. Я написал функцию для поиска всех банок в основной папке App, но столкнулся с проблемой - некоторые пакеты jar существуют, но устарели и не используются OSGi, например. xxxx_1.0.0.jar и xxxx_1.2.0.jar существуют, но OSGi используется только 1.2.0. Если я буду искать в основной папке, они будут в списке результатов.Как получить все пути jar, используемые OSGi?
Так есть способ получить все файлы jar, которые используются OSGi? Затем я могу отфильтровать файлы jar, которые не используются. Благодаря
Добавлено: Я пытался использовать этот способ, чтобы получить все Связки абсолютного URL, но не смог:
StringBuffer sb = new StringBuffer();
Bundle[] bundles = com.ibm.director.services.storage.debugtool.Activator.context.getBundles();
for (Bundle bundle : bundles) {
java.net.URL url = bundle.getClass().getProtectionDomain().getCodeSource().getLocation();
sb.append("File:" + url.getFile() + ", Path:" + url.getPath() + "\n");
}
Но сто раз следующий повторять вывод:
File:/opt/ibm/director/lwi/runtime/core/eclipse/plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030-RCP20120203-1500.jar
File:/opt/ibm/director/lwi/runtime/core/eclipse/plugins/org.eclipse.osgi_3.4.3.R34x_v20081215-1030-RCP20120203-1500.jar,
File:....
Количество используемого пакета: 588, это может быть правильно, и мы можем получить абсолютный путь Bundles от API, но почему они все одинаковы? Как я могу получить реальный путь?
Можете ли вы объяснить, чего вы хотите достичь? Что вы хотите искать в файлах классов и почему? –
@Christian Schneider Я хочу декомпилировать runtime .class, имя которого вводится пользователем. Способ, которым я реализую, - собрать все банки в среде OSGi и serach этого класса. На самом деле оба xxx_1.2.0 и xxx_1.0.0 содержат этот файл, но используется только xxx_1.2.0. Я хочу только декомпилировать использованную. – JerryCai
Я думаю, что я помню, у вас был подобный вопрос некоторое время назад. В OSGi одно и то же имя класса может поступать из разных наборов, и поэтому разные версии могут использоваться одновременно. Поэтому, если вы хотите знать источник класса, вам также нужно указать класс/класс загрузчика, который видит класс. Оттуда вы можете узнать из проводки пакета, из которой был загружен класс jar. –