如何从maven-war-plugin获取生成的MANIFEST.MF文件?

Nor*_*mac 3 maven maven-war-plugin

作为构建过程的一部分,我正在生成一个单独的工件(内部带有静态Web文件的压缩文件),我想在其中包含war插件生成的清单文件中的相同信息.清单文件正确生成到war文件中,但是我想访问它,所以我可以复制它并将它放在我的压缩文件中.

在maven-war-plugin的文档:清单目标中,它显示为:

清单文件在warSourceDirectory中创建.

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

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

我错过了什么吗?

Ste*_*lly 8

如果您查看内置生命周期参考,您将看到生命周期中的任何一点都不<packaging>war</packaging>war:manifest任何阶段的目标.

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

如果在目标执行时存在MANIFEST.MF文件,${basedir}/src/main/webapp/META-INF/MANIFEST.MFwar:war它将使用该文件而不是生成动态MANIFEST.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文件.