Конфликт импорта - из-за одинаковой структуры пакета
Мой код зависит от файла 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();
Использование полностью определенных имен пакетов обычно считается плохим стилем, за исключением случаев, когда необходимо избегать коллизий.