我们正在建立一个基于maven的项目。现在我尝试使用shade插件生成一个可运行的jar文件。
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.myCompany.mainClass</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<pluginRepositories>
<pluginRepository>
<id>apache maven</id>
<url>http://repo1.maven.org/maven2/org/apache/maven/plugins</url>
</pluginRepository>
</pluginRepositories>
当我运行maven build时,会发出许多警告: [警告]我们在C:\ Users \ maven.repo \ company \ org \ slf4j \ slf4j-nop \ 1.6.2 \ slf4j-nop-1.6.2中有一个重复的org / slf4j / impl / StaticMDCBinder.class的.jar
似乎每个依赖都会重复。 有人可以给我一些关于此的建议吗? 非常感谢,感恩节快乐。
答案 0 :(得分:2)
使用maven dependency:tree
命令可以打印并检查所有日志记录依赖项,其中一些可能包含重复的类,例如http://maven.40175.n5.nabble.com/Duplicate-class-warnings-when-using-shade-plugin-td121854.html
然后使用exclude
标记删除Exclude all transitive dependencies of a single dependency
另外,我建议使用maven-assembly-plugin
将带有依赖关系的jar附加为可配置分类器下的附加工件,而不是替换原始工件(如配置中):
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>attached</goal>
</goals>
<phase>package</phase>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.myCompany.mainClass</mainClass>
</manifest>
</archive>
</configuration>
</execution>
</executions>