繁体   English   中英

Maven:从阴影插件中排除依赖项

[英]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:*:jarcom.sun.jersey.contribs:jersey-multipart来排除。

               <artifactSet>
                  <excludes>
                     <exclude>com.sun.jersey.contribs:jersey-multipart</exclude>
                   </excludes>
               </artifactSet>

在依赖项标记中添加范围标记,值为“提供”。 它将排除这种依赖性。 类似于下面的依赖

对于采取大量步骤从您的胖 jar 中排除某些可传递伪影并且它仍然存在的任何人,可能有两个原因:

  1. 此依赖项对于其他依赖项是可传递的,而不是您已排除的那个依赖项。 因此,您需要在其他地方添加排除标记(如果您的排除位于<dependencies>部分,而不是插件级别)。

mvn dependency:tree对于这些搜索非常有用。

  1. 这些依赖类作为普通类直接从某些依赖工件进入您的 jar,而不是传递依赖

您的项目的一个依赖项有可能代表 fat jar。您要排除的某些类作为普通类出现在您的项目中,而不是传递依赖项。 因此 Maven 无法排除它。 这也是 Maven 提供的 scope 不起作用的原因(类仍然存在于您的 jar 中)。

更多细节在这里: https://mchesnavsky.tech/maven-dependency-exclusion-not-working/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM