如何在maven程序集中包含依赖项文件

时间:2012-10-11 09:22:47

标签: maven maven-assembly-plugin

我有一个maven项目,配置(通过使用pom.xml和assembly.xml)打包一个zip文件,包含已编译的webapp(war文件)和src / main /文件夹下的所有文件我们运行mvn clean package assembly:single

这个项目导入/使用另一个maven项目(它变成一个jar文件),而该项目又导入/使用第三个maven项目(同样是一个jar文件)。

第三个项目还包含src / main /文件夹中的一些文件,每当我构建主项目时,我都希望将它放在zip文件中的其他文件旁边(链接顶部的那个文件)战争文件)。

是否有可能告诉maven在zip文件中包含所有依赖项(或者在一个特定的依赖项中)的特定文件夹中的所有文件?

2 个答案:

答案 0 :(得分:2)

从这里开始:Maven: The Complete Reference - 8.5. Controlling the Contents of an Assembly

请注意,如果您deploy一个带有assembly:assembly的Maven项目(您真的应将其配置为<build>插件,而不是在命令行中使用),则程序集会“附加”到项目并安装在存储库中。然后,您可以使用Maven依赖关系表示法来访问它们,即mygroup:myartifact:extrafiles:zip

我发现汇编描述符<dependencySets>很难配置。它们实际上是针对简单的情况(包括应用程序在运行时需要的JAR文件)。

以下是我对您期望的结果采取的一般方法:

  1. 使用Maven Dependency Plugin dependency:copy从其他项目下载特定文件,将其放在target/

  2. 的子目录下
  3. 配置程序集描述符,将这些下载/解压缩的文件添加到最终的程序集工件中。

  4. 或者,使用Maven Ant Run Plugin一起破解某些内容。

答案 1 :(得分:1)

您需要从第三个项目生成一个额外的程序集来打包额外的文件。附加程序集ID,以便生成一个名为third-1.0.0-extrafiles.zip的包

然后使用&lt; type&gt; extrafiles&lt; / type&gt;将此作为第一个项目的依赖项添加在依赖描述符中。在第一个项目的程序集中,你必须告诉它“解包”这种类型的依赖项(所以你没有拉链压缩)