我正在使用 Maven 程序集插件版本 2.2.1 以自定义的专有格式构建包。作为这个过程的一部分,我需要提取一堆外部档案(外部我的意思是它们没有被列为 maven 依赖项,但它们是文件系统上的任意文件)。
你知道maven组装是否能够做到这一点?我看过,显然,它能够在任意文件夹中提取一堆依赖项,但无法提取外部存档。
我正在使用 Maven 程序集插件版本 2.2.1 以自定义的专有格式构建包。作为这个过程的一部分,我需要提取一堆外部档案(外部我的意思是它们没有被列为 maven 依赖项,但它们是文件系统上的任意文件)。
你知道maven组装是否能够做到这一点?我看过,显然,它能够在任意文件夹中提取一堆依赖项,但无法提取外部存档。
使用<unpack>true</unpack>
in your<dependencySet>
是要走的路。
Maven 不支持外部存档。因此,您需要使用附加它们,例如,build-helper:attach-artifact
然后您可以通过<dependencySet>
其中一条评论想知道如何避免将附加的工件安装到 maven 存储库中(本地/远程)
解决方案是使用一个非传递依赖的虚拟模块。
我们依赖于正在构建的程序集不被用作传递依赖项。
所以你从一个虚拟模块开始,它看起来有点像
<project>
...
<packaging>pom</packaging>
...
<properties>
<maven.deploy.skip>true</maven.deploy.skip>
<maven.install.skip>true</maven.install.skip>
<!-- or you could override the plugin configuration for a safer - but less quick - solution -->
</properties>
...
</project>
该虚拟模块可以使用附加文件build-helper:attach-artifacts
您的程序集模块将仅列出具有传递依赖关系的依赖关系,<scope>provided</scope>
并<optional>true</optional>
防止其成为传递依赖关系。(如果程序集是安装程序包并且不会被其他 Maven 构建使用,则不需要。
然后,压缩内容将从一个存档流式传输到另一个存档,原始文件不会复制到远程存储库……但是您始终需要在构建程序集的任何反应器中构建hack模块。
从 Maven 的角度来看,“文件系统上的任意文件”没有多大意义。
您应该能够从“您的机器”、“集成服务器(jenkins ...)”的任何位置运行您的 maven pom。Ant 是用于“自制”构建的工具,maven 提倡约定优于配置和可重用性。
因此,您的项目所依赖的任何资源都应该是依赖项,或者以某种方式包含在您的项目中。
我希望我的所有项目都可以作为 id 构建,只需简单的 svn 签出即可。任何不在项目中的东西都应该从 mvn 存储库中下载。
因此,当我必须编写一个汇编项目时,我会确保项目中的所有内容都可用,作为资源。如果没有,你总是可以为共享资源构建一个简单的项目/pom,或者使用一些特殊的插件来为你做这件事。