【发布时间】:2019-07-06 15:30:21
【问题描述】:
给定一个包含依赖列表的 pom.xml 文件,是否有一个 Maven 命令可以将所有这些 jar 打包到一个大 jar 中? 我不想在构建中包含我的 .class 文件 - 我只想在构建中包含库 .class/jar 文件 - 有没有办法做到这一点?
我看到了这个插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/Crunchify/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
- 我无法弄清楚它将依赖项复制到哪里 - 即使我硬编码了一个路径而不是
${project.build.directory}/Crunchify/lib,也没有任何内容写入该位置, - 我假设它是在复制 jar,而不是将多个 jar 的内容放入一个大 jar 文件中。
我也看到了这个通用插件:
http://maven.apache.org/plugins/maven-assembly-plugin/usage.html
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.1</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id> <!-- this is used for inheritance merges -->
<phase>package</phase> <!-- bind to the packaging phase -->
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
但是当我在 pom.xml 中使用 maven-assembly-plugin 运行 mvn clean package 时,我没有看到任何新的 jar 文件。
【问题讨论】:
-
maven-shade-plugin (maven.apache.org/plugins/maven-shade-plugin) 是要走的路。它可以处理组合 jar 时出现的所有奇怪情况(例如,合并元数据)。
-
@Rob 谢谢,你能展示一个只打包依赖项而不打包用户/项目类的例子吗?
-
为了帮助理解一个好的解决方案可能是什么,您能否解释一下为什么您不希望您的类出现在生成的 JAR 中?
-
${project.build.directory}通常是target文件夹...