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

时间:2013-07-22 19:28:15

标签: maven maven-war-plugin

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

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

  

清单文件在warSourceDirectory中创建。

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

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

我错过了什么吗?

1 个答案:

答案 0 :(得分:7)

如果您查看built-in lifecycle reference,您会看到<packaging>war</packaging>生命周期中的任何时刻都没有任何阶段的war:manifest目标。

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

如果MANIFEST.MF处有${basedir}/src/main/webapp/META-INF/MANIFEST.MF个文件,那么当war:war目标正在执行时,它将使用该文件,而不是动态生成MANIFEST.MF并嵌入它直接进入.war文件而不创建中间文件。

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

战争插件有许多目标,我倾向于建议保持清除:

  • war:inplace
  • war:manifest

原因是因为这两个目标都修改了src树中的文件,这违反了target中仅触及文件的标准Maven做法(这使得{{1}非常好{{1}因为你只需要删除目标)

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