【问题标题】:use maven-shade-plugin, but dependency classes are not in the final jar使用 maven-shade-plugin,但依赖类不在最终 jar 中
【发布时间】:2014-09-09 08:33:15
【问题描述】:

在我项目的 pom.xml 中,我有以下依赖项:

<dependency>
    <groupId>com.my.library</groupId>
    <artifactId>MyLib</artifactId>
    <version>1.0</version>
    <type>jar</type>
</dependency>

<dependency>
  ...
</dependency>

我希望我的项目最终构建的 jar 包含上述 com.my.library:MyLib 依赖的类,所以我以以下方式使用 maven-shade-plugin

<plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-shade-plugin</artifactId>
     <version>2.3</version>
     <executions>
        <execution>
           <phase>package</phase>
           <goals>
              <goal>shade</goal>
           </goals>
           <configuration>  
              <filters>
                 <filter>
                   <artifact>com.my.library:MyLib</artifact>
                   <includes>
                       <include>com/my/library/**</include>
                   </includes>
                 </filter>
              </filters>
           </configuration>
        </execution>
     </executions>
</plugin>

然后,我运行 mvn clean install ,我的项目构建成功。

但是当我检查target/目录下的MyProject.jar的内容时,它不包含来自com.my.library:MyLib依赖的类,为什么? maven-shade-plugin 我哪里错了?

【问题讨论】:

  • 你在使用什么包含?为什么不开始没有任何包含/排除,然后排除不应该成为结果 jar 一部分的东西。
  • @khmarbaise ,因为我的大项目已经使用了很多依赖项,我只想在最终的 jar 中包含一个依赖项的类,这就是我使用包含而不是排除的原因。
  • @user842225:我同意您不必手动逐个排除这些库,但 khmarbaise 确实有道理。首先尝试这样,看看它是否被包含在内,然后进一步调查(并检查我的答案)。

标签: maven maven-2 maven-3 maven-plugin maven-shade-plugin


【解决方案1】:

定义一个&lt;artifactSet&gt;

<artifactSet>
    <includes>
        <include>com.my.library:MyLib</include>
    </includes>
</artifactSet>

并尝试从&lt;filters/&gt; 中删除&lt;artifact/&gt;。应该这样做。

【讨论】:

    【解决方案2】:

    改成

    <includes>
        <include>com/my/library/**.class</include>
    </includes>
    

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 2015-04-12
      • 2013-11-28
      • 2010-11-08
      相关资源
      最近更新 更多