导入冲突 - 因为相同的包结构

时间:2016-01-05 10:12:52

标签: java eclipse maven logging log4j

我的代码依赖于abc.jar文件。这个abc.jar文件在包org.apache.log4j下有一个名为Logger的类,但这不是Apache的Logger。

我想使用Apache的Logger。我在Apache的Logger中为maven添加了一个依赖项。但问题是,当我想使用Apache的Logger时,它会自动从abc.jar文件中获取Logger。

2 个答案:

答案 0 :(得分:0)

当两个JAR具有相同类名的相同Package时,从特定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");

答案 1 :(得分:-1)

为防止此类冲突,您应使用完全限定的类名..e。 org.apache.log4j.Logger logger = new org.apache.log4j.Logger();

除非必须避免碰撞,否则使用完全限定的包名称通常被视为不良样式。