使用maven-shade-plugin,但是依赖的类未包含在最终的jar包中。

3
在我的项目的pom.xml文件中,我有以下依赖项:
<dependency>
    <groupId>com.my.library</groupId>
    <artifactId>MyLib</artifactId>
    <version>1.0</version>
    <type>jar</type>
</dependency>

<dependency>
  ...
</dependency>

我希望将com.my.library:MyLib这个依赖库的类文件打包到我的项目最终生成的jar文件中,因此我使用了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
@khmarbaise,因为我的大型项目使用了许多依赖项,我只想在最终的jar包中包含一个依赖项的类,这就是为什么我使用includes而不是excludes。 - user842225
@user842225:我同意你不应该手动逐个排除库,但khmarbaise说得有道理。首先尝试这样做,看看它是否被包含,然后进一步调查(并检查我的答案)。 - carlspring
2个回答

1
定义一个<artifactSet>
<artifactSet>
    <includes>
        <include>com.my.library:MyLib</include>
    </includes>
</artifactSet>

尝试从<filters/>中移除<artifact/>。这样应该可以解决问题。

0

将模式更改为

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接