Конфликт импорта - из-за одинаковой структуры пакета

Мой код зависит от файла abc.jar. Этот файл abc.jar содержит класс Logger в пакете org.apache.log4j, но это не Logger от Apache.

Я хочу использовать Logger от Apache. Я добавил зависимость в maven для Apache Logger. Но проблема в том, что когда я хочу использовать Logache от Apache, он автоматически выбирает Logger из файла abc.jar.

2 ответа

Загружать класс из определенного JAR, когда оба JAR имеют одинаковый пакет с одинаковым именем класса.

1) Вам нужно указать путь к JAR, из которого вам нужно использовать класс.

Для этого вы можете использовать

URL myURL = new URL("jar:file:" +OfficialApacheJarPath+"!/");
    URL[] urls =  new URL[]{myURL};
    URLClassLoader cl = URLClassLoader.newInstance(urls);
    Class c = cl.loadClass("Logger");

Чтобы предотвратить такое столкновение, вы должны использовать полное имя класса name.eg org.apache.log4j.Logger logger = new org.apache.log4j.Logger();

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

Другие вопросы по тегам