3

作为构建过程的一部分,我正在生成一个单独的工件(其中包含静态 Web 文件的压缩文件),我希望在其中包含与 war 插件生成的清单文件中相同的信息。清单文件已正确生成到 war 文件中,但我想访问它,以便我可以复制它并将它也放入我的压缩文件中。

在 maven-war-plugin:manifest 目标的文档中,它写道:

清单文件在 warSourceDirectory 中创建。

默认为位置:${basedir}/src/main/webapp

但是,生成的唯一清单是在战争中。将生成的清单文件放入我的源代码对我来说也没有任何意义。我认为它将被放在战争被打包的目标中。

我错过了什么吗?

4

1 回答 1

9

如果您查看内置的生命周期参考,您会发现<packaging>war</packaging>生命周期中的任何一点都不是war:manifest绑定到任何阶段的目标。

因此,默认情况下,此目标不会执行(除非您添加执行)。

如果在目标执行时有一个MANIFEST.MF文件,它将使用该文件,而不是动态生成文件并将其直接嵌入到文件中,而无需创建中间文件。${basedir}/src/main/webapp/META-INF/MANIFEST.MFwar:warMANIFEST.MF.war

据我所知,该war:manifest目标旨在用于生成模板MANIFEST.MF,然后您可以自定义和使用该模板。

战争插件有许多目标,我倾向于建议不要这样做:

  • war:inplace
  • war:manifest

原因是因为这两个目标都修改了src树中的文件,这违背了仅接触文件的标准 Maven 实践target(这非常好mvn clean,因为您只需要删除目标)

关于您的问题,关键是您正在生成一个单独的工件。当您坚持每个 Maven 模块一个工件时,Maven 效果最好。因此,单独的工件将具有单独的模块。您只需将其添加.war为依赖项(记住<type>war</type>),然后使用它dependency:unpack-dependencies来解压缩.war文件...您可以只解压缩它META-INF/MANIFEST.MF,如果最终如此,target/${project.build.finalName/META-INF/MANIFEST.MF那么当您打包第二个工件时,您将确保它具有相同的清单作为你的.war文件。

于 2013-08-19T21:51:36.997 回答