Maven Assembly插件.有什么方法可以直接从描述符文件中解压缩/卸载归档文件,而不是依赖于antrun插件



我使用maven汇编插件2.2.1版来构建一个自定义专有格式的包。作为这个过程的一部分,我需要提取一堆外部档案(我所说的外部档案是指它们没有被列为maven依赖项,但它们是文件系统上的任意文件)。

你知道maven程序集是否能够做到这一点吗?我看过,很明显,它能够在任意文件夹中提取一堆依赖项,但无法提取外部存档。

<dependencySet>中使用<unpack>true</unpack>是一种方法。

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构建使用,则不需要。

现在,压缩内容将从一个存档流式传输到另一个存档,原始文件不会复制到远程存储,但是您将始终需要在任何构建程序集的reactor中构建hack模块。

从maven的角度来看,"文件系统上的任意文件"意义不大。

您应该能够从"您的机器"、"集成服务器(jenkins…)"的任何一点运行您的maven pom。Ant是一个用于"自制"构建的工具,maven提倡约定而非配置,以及可重用性。

因此,您的项目所依赖的任何资源都应该是依赖项,或者以某种方式包含在您的项目中

我希望我所有的项目都可以构建为id,只需简单的svn检查即可。任何不在项目中的东西都应该从mvn存储库中下载。

因此,当我必须编写一个程序集项目时,我会确保项目中的所有内容都可用,作为资源。如果没有,你可以为共享资源构建一个简单的项目/pom,或者使用一些特殊的插件来实现这一点。

最新更新