Maven Assembly插件。有没有直接从描述符文件解压缩/解压缩归档的方法,而不是依赖于antrun插件?

时间:2012-10-03 09:11:36

标签: maven maven-assembly-plugin

我使用maven assembly插件版本2.2.1以自定义的专有格式构建包。 作为此过程的一部分,我需要提取一堆外部存档(通过外部我的意思是它们没有被列为maven依赖项,但它们是文件系统上的任意文件)。

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

2 个答案:

答案 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)

从maven的角度来看,“文件系统上的任意文件”并不意味着什么。

你应该可以从“你的机器”,“集成服务器(jenkins ......)”的任何一点运行你的maven pom。 Ant是“自制”构建的工具,maven促进约定优于配置和可重用性。

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

我希望我的所有项目都可以作为id构建,并使用简单的svn签出。应该从mvn存储库下载项目中没有的任何内容。

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