我使用maven assembly插件版本2.2.1以自定义的专有格式构建包。 作为此过程的一部分,我需要提取一堆外部存档(通过外部我的意思是它们没有被列为maven依赖项,但它们是文件系统上的任意文件)。
你知道maven组装是否能够做到这一点?我看起来很明显,它能够在任意文件夹中提取一堆依赖项,但它无法提取外部存档。
答案 0 :(得分:2)
使用<unpack>true</unpack>
中的<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 模块在任何构建程序集的反应器中。
答案 1 :(得分:1)
你应该可以从“你的机器”,“集成服务器(jenkins ......)”的任何一点运行你的maven pom。 Ant是“自制”构建的工具,maven促进约定优于配置和可重用性。
因此,您的项目所依赖的任何资源都应该依赖,或以某种方式包含在您的项目中。
我希望我的所有项目都可以作为id构建,并使用简单的svn签出。应该从mvn存储库下载项目中没有的任何内容。
所以当我必须编写一个程序集项目时,我确保项目中的所有内容都可用作资源。如果没有,你总是可以为共享资源构建一个简单的项目/ pom,或者使用一些特殊的插件为你做这些。