作为构建过程的一部分,我正在生成一个单独的工件(内部带有静态Web文件的压缩文件),我想在其中包含war插件生成的清单文件中的相同信息。清单文件正确生成到war文件中,但是我想访问它,所以我可以复制它并将它放在我的压缩文件中。
在maven-war-plugin的文档:清单目标中,它显示为:
清单文件在warSourceDirectory中创建。
默认位置:$ {basedir} / src / main / webapp
然而,唯一产生的清单是在战争中。对我来说,生成的清单文件将被放入我的源代码也没有意义。我认为它将被放入战争打包的目标中。
我错过了什么吗?
答案 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
文件具有相同的清单。