簡體   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