[英]maven-shade-plugin: exclude a dependency and all its transitive dependencies
[英]Maven: exclude dependency from shade plugin
我在mvn clean install
之后看到了下一个字符串
包括 com.sun.jersey.contribs:jersey-multipart:jar:1.5 在阴影部分 jar
问题:即使我为 maven-shade-plugin 添加了排除项,我也无法使其不着色(参见下面的代码)
我的 maven-shade-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<artifactSet>
<excludes>
//Here ==> <exclude>com.sun.jersey.contribs:jersey-multipart:jar</exclude>
</excludes>
</artifactSet>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>Main</Main-Class>
<Build-Number>123</Build-Number>
</manifestEntries>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.handlers</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>META-INF/spring.schemas</resource>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
根据http://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html ,您的排除语法是错误的:
从最终工件中包含/排除的工件。 工件由一般形式groupId:artifactId:type:classifier的复合标识符表示。 ... 为方便起见,语法groupId等效于groupId:*:*:* , groupId:artifactId等效于groupId:artifactId:*:*并且groupId:artifactId:classifier等效于groupId:artifactId:*:classifier 。
因此,要么使用com.sun.jersey.contribs:jersey-multipart:*:jar
或com.sun.jersey.contribs:jersey-multipart
来排除。
<artifactSet>
<excludes>
<exclude>com.sun.jersey.contribs:jersey-multipart</exclude>
</excludes>
</artifactSet>
对于采取大量步骤从您的胖 jar 中排除某些可传递伪影并且它仍然存在的任何人,可能有两个原因:
<dependencies>
部分,而不是插件级别)。 mvn dependency:tree
对于这些搜索非常有用。
您的项目的一个依赖项有可能代表 fat jar。您要排除的某些类作为普通类出现在您的项目中,而不是传递依赖项。 因此 Maven 无法排除它。 这也是 Maven 提供的 scope 不起作用的原因(类仍然存在于您的 jar 中)。
更多细节在这里: https://mchesnavsky.tech/maven-dependency-exclusion-not-working/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.