ClassLoader загружает неправильный экземпляр файла - PullRequest
2 голосов
/ 19 марта 2012

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

Так что в настоящее время я использую следующий фрагмент для получения файла в качестве входного потока, файл 'plugin.xml' находится в корне банки, и я не могу изменить это местоположение как другой кусокпрограммного обеспечения (dynatrace) создает этот файл и определяет его местоположение.

стандартный фрагмент:

InputStream is = JmxPlugin.class.getResourceAsStream("/plugin.xml");

Теперь я знаю, что проблема заключается в том, что ClassLoaderвыбирая первый файл, который соответствует имени 'Plugin.xml' вдоль пути к классу (тот, которого нет в моем банке, ура).

Может кто-нибудь придумать способ убедиться, что я выбрал правильный файлбез необходимости перемещать это?Относительный путь моего класса в банке - это com / кое-что / jmx / JmxPlugin.class.

(мне не нужно распаковывать банку в памяти).

Большое спасибо за любой вклад

Ответы [ 2 ]

0 голосов
/ 19 марта 2012

Самый простой способ - переместить ваш jar в classpath, чтобы он был первым, содержащим Plugin.xml. Другой подход заключается в использовании getResource () для определения местоположения вашего файла jar:

URL myJar=JmxPlugin.class.getResource("/"+JmxPlugin.class.getName().replace(".","/")+".class");

, а затем используйте этот URL дляоткройте файл jar и распакуйте файл Plugin.xml.

0 голосов
/ 19 марта 2012

Я не совсем уверен, но, похоже, Thread.currentThread().getContextClassLoader().getResourceAsStream("/plugin.xml") может решить вашу проблему.Если нет, вам придется создать свой собственный ClassLoader и решить проблему там.

...