有人知道我的maven版本发生了什么吗?我收到了很多重复的警告。
[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
我已经查看了我的本地m2存储库,我在commons-logging-api jar中有两个类,LogFactoryImpl.class和LogFactoryImpl$1.class。与警告中提到的所有类相同。
有一件事要提到的是,我正在使用我的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>
我注意到依赖关系树如下所示
[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
和api.jar文件都包含org/apache/commons/logging/LogFactory.class。
不知何故Shad插件试图把它们挤到一个大的脂肪jar里。然后警告出现了。有人说这是可以忽略的警告。但我有点担心,如果有两个同名的重复类,应用程序如何知道应该使用哪个确切的类?
8条答案
按热度按时间tzcvj98z1#
你可能也遇到了maven-shader-plugin的限制。它替换了默认的jar工件(由maven-jar-plugin创建)。这在干净的构建上工作得很好,但是在jar没有重新生成的重建中,着色器会在上次创建的jar上再次运行,该jar已经包含了所有类依赖项的副本。这会产生很多关于重复的警告。
此问题在maven-shader-plugin 2.0中仍未解决:https://issues.apache.org/jira/browse/MSHADE-126
一种解决方法是将maven-jar-plugin显式添加到您的pom.xml中,并添加配置设置
<forceCreation>true</forceCreation>
。rpppsulh2#
请查看Maven doc中的“依赖项排除”部分。
在您提供的示例中,我将从
org.apache.hadoop.hive:hive-common:jar:0.7.1-cdh3u3:compile
中排除commons-logging:commons-logging-api:jar:1.0.4:compile
依赖项。bf1o4zei3#
在我的例子中,我的父pom包含了commons-beanutils,而我的子模块(这是我唯一想编译的)包含了commons-io。
由于commons-io和commons-beansutil共享一些公共类,因此shade插件抱怨了重复项。注意,beansutiul被包括在内,尽管它并不需要,也没有被使用。
我通过将以下内容添加到配置中来最小化jar来解决这个问题:
现在,着色插件没有添加未使用的资源。
警告消失了。
3npbholx4#
以上所有内容(关于查看依赖关系树和排除)在大多数情况下都是正确的,但在我的情况下(我的依赖关系中没有重叠),初步的
clean
有所帮助(虽然不知道为什么):mvn**clean**package
个vs91vp4v5#
您可以排除不需要的jar(使用shade插件下的以下标记给出重复警告的jar)-
更多详细信息,请访问http://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html
djp7away6#
当我在eclipse中更新父项目的依赖关系时,我看到了这种情况。
我删除了我的目标目录中的所有文件,它修复了问题。
vddsk6oq7#
在我的例子中,我依赖于一个包,它也创建了一个阴影jar。
阴影jar用于部署,而不是作为依赖项安装。
在依赖关系的构建过程中创建一个减少依赖关系的POM,指示maven可以忽略哪些依赖关系。
在maven-shade-plugin配置中:
欲了解更多详情,请参阅此帖子:
maven-shade-plugin的用途是什么?为什么要重新定位java包?
我从maven那里得到的错误是:
警告:x.jar、y.jar包含重叠的类
ubby3x7f8#
你在你的pom中有依赖关系,其中包含重复的类,但没有适当的pom,我不能说一个字。