Maven构建【警告】我们有一个重复类 [英] Maven build [WARNING] we have a duplicate class
问题描述
任何人有任何想法发生了什么事我Maven构建?我得到了很多重复的警告。
Anybody has any idea what happened to my maven build? I am getting a lot of duplicate warnings.
[WARNING] We have a duplicate org/apache/commons/logging/impl/LogFactoryImpl$1.class in /home/shengjie/.m2/repository/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar
[WARNING] We have a duplicate org/apache/commons/logging/impl/LogFactoryImpl.class in /home/shengjie/.m2/repository/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar
[WARNING] We have a duplicate org/apache/commons/logging/impl/NoOpLog.class in /home/shengjie/.m2/repository/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar
[WARNING] We have a duplicate org/apache/commons/logging/impl/SimpleLog$1.class in /home/shengjie/.m2/repository/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar
[WARNING] We have a duplicate org/apache/commons/logging/impl/SimpleLog.class in /home/shengjie/.m2/repository/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar
[WARNING] We have a duplicate org/apache/commons/logging/impl/Jdk14Logger.class in /home/shengjie/.m2/repository/commons-logging/commons-logging-api/1.0.4/commons-logging-api-1.0.4.jar
我看着我的本地回购平方米,我有两个班在那里的commons-logging-API JAR,LogFactoryImpl.class和LogFactoryImpl $ 1.class。相同的警告中提到的所有类。
I've looked into my local m2 repo, I have two classes there in commons-logging-api jar, LogFactoryImpl.class and LogFactoryImpl$1.class. Same as all the classes mentioned in the warnings.
有一点要提的是,我使用遮阳插件在我的pom.xml
One thing to mention is that I am using shade plugin in my pom.xml.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.4</version>
<configuration>
<createDependencyReducedPom>true</createDependencyReducedPom>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.~~~~black out my own main class here~~~~~</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
我注意到,依赖关系树看起来如下
I noticed that the dependency tree looks like as below
[INFO] +- org.apache.cxf:cxf-bundle-jaxrs:jar:2.5.1:compile
[INFO] | \- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] \- org.apache.hadoop.hive:hive-jdbc:jar:0.7.1-cdh3u3:compile
[INFO] \- org.apache.hadoop.hive:hive-common:jar:0.7.1-cdh3u3:compile
[INFO] \- commons-logging:commons-logging-api:jar:1.0.4:compile
和的commons-logging.jar的和的commons-logging-api.jar文件都有组织/阿帕奇/公/日志/ LogFactory.class。
and commons-logging.jar and commons-logging-api.jar both have org/apache/commons/logging/LogFactory.class.
不知何故沙德插件试图挤进他们在结束一个大胖子罐子。那么警告显示出来。有人说,这是忽略警告。但我有点担心,应用如何知道什么是应该使用的确切类,如果有同名的两个复制类?
somehow Shad plugin is trying to squeeze them in to a big fat jar at the end. then the warning is showing up. It's been said this is ignorable warning. But I am a bit worried, How does the application know what is the exact class should be used if there are two duplicated class with the same name?
推荐答案
看看在依赖排除部分的<一个href=\"http://maven.apache.org/guides/introduction/introduction-to-optional-and-excludes-dependencies.html\">Maven DOC 。
Take a look at the "Dependency Exclusions" section in the Maven doc.
在您提供的例子,我会排除的commons-logging:的commons-logging-API中:jar:1.0.4:编译
从 org.apache.hadoop.hive:蜂房常见的有:罐:0.7.1-cdh3u3:编译
。在你的pom.xml:
In your provided example, I'll exclude the commons-logging:commons-logging-api:jar:1.0.4:compile
dependency from org.apache.hadoop.hive:hive-common:jar:0.7.1-cdh3u3:compile
. In your pom.xml :
<dependency>
<groupId>org.apache.hadoop.hive</groupId>
<artifactId>hive-common:jar</artifactId>
<version>0.7.1-cdh3u3</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging-api</artifactId>
</exclusion>
</exclusions>
</dependency>
这篇关于Maven构建【警告】我们有一个重复类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!