Конфликты имен в jar-файле - PullRequest
0 голосов
/ 25 ноября 2011

У меня есть каталог / плагин с двумя jar-файлами A.jar и B.jar. У обоих есть файл с одинаковым именем config.xml

File file = new File("plugin/");
for (File item: file.listFiles()) {

    if (item.isFile() && item.getName().substring(item.getName().lastIndexOf(".")).equals(".jar")) {
        ClassPathHacker.addFile(item); // classPathHacker adds the jar to classpath

        InputStream is = getClass().getClassLoader().getResourceAsStream("config.xml");
    }
}

Но проблема в том, что он не загружает новый файл config.xml после новой итерации, а каждый раз загружает первый файл config.xml. Как решить этот конфликт?

Ответы [ 3 ]

0 голосов
/ 25 ноября 2011

Вы уверены, что он не загружает оба файла config.xml?Помните, что при разрешении обработки имен начинается слева от PATH / CLASSPATH и перемещается по одному токену за раз вправо, пока не будет достигнут конец списка или не будет найдено первое совпадение.

0 голосов
/ 25 ноября 2011

Используйте ClassLoader#getResources() для получения URL-адресов всех файлов config.xml.Затем вы можете выбрать, какой из них использовать, возможно, вам понадобится последний.

Другой вариант - не связываться с хакерами загрузчика классов, а просто прочитать нужный файл прямо из .jar, используя ZipFile

0 голосов
/ 25 ноября 2011

поместите файл с последними файлами перед другим в путь к классам

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...