3

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

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

4

2 回答 2

3

使用<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模块。

于 2012-10-03T09:26:00.660 回答
1

从 Maven 的角度来看,“文件系统上的任意文件”没有多大意义。

您应该能够从“您的机器”、“集成服务器(jenkins ...)”的任何位置运行您的 maven pom。Ant 是用于“自制”构建的工具,maven 提倡约定优于配置和可重用性。

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

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

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

于 2012-10-03T10:04:58.330 回答