如何将maven项目版本放入war文件清单中?
Posted
技术标签:
【中文标题】如何将maven项目版本放入war文件清单中?【英文标题】:How to put maven project version in war file manifest? 【发布时间】:2011-08-12 10:23:11 【问题描述】:我需要让 Maven 将 POM 文件中的版本号插入到位于 /WEB-INF/manifest.mf 下的 WAR 文件中的清单中。
我该怎么做?我可以使用 maven-jar-plugin 在 JAR 文件中轻松归档执行此操作的文档,但这不适用于 WAR 文件。
感谢您的帮助!
【问题讨论】:
【参考方案1】:将 $project.version
放入 manifest.mf 中您希望版本所在的位置。为了使其工作,我相信您需要资源插件,以便 manven 将“过滤”资源,因为它们包含在您的 war 文件中。
【讨论】:
但是清单文件不是资源。它是在构建时生成的,对吗?如果它是在构建时生成的,那么它不会被作为资源处理。我是不是误会了什么? @Matthew 它可以是一种资源,但这是一种不正确的方法。没错,该文件是由 maven-war-plugin 即时生成的。你下面的答案是正确的。【参考方案2】:使用 maven-war-plugin 解决了这个问题。看下面的配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1.1</version>
<configuration>
<archive>
<manifestEntries>
<version>$project.version</version>
</manifestEntries>
</archive>
</configuration>
</plugin>
【讨论】:
如果您也有兴趣通过 Web URL 阅读此类版本信息,例如http://example.com/versioninfo.txt
,您可以过滤一个 versioninfo.txt
模板,其中包含 your$project.version
和 include the version file into the war by使用maven-war-plugin
。【参考方案3】:
或者您可以使用 addDefaultImplementationEntries 或 addDefaultSpecificationEntries 标志添加多个条目,包括 project.version
属性。
addDefaultImplementationEntries
Implementation-Title: $project.name
Implementation-Version: $project.version
Implementation-Vendor-Id: $project.groupId
Implementation-Vendor: $project.organization.name
Implementation-URL: $project.url
addDefaultSpecificationEntries
Specification-Title: $project.name
Specification-Version: $project.version
Specification-Vendor: $project.organization.name
两者的默认值都是假的。如果未定义属性(例如 project.organization.name
),则该行将从清单中排除。
这可以进入 maven-war-plugin 配置,如下所示:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
</manifest>
</archive>
</configuration>
</plugin>
【讨论】:
以上是关于如何将maven项目版本放入war文件清单中?的主要内容,如果未能解决你的问题,请参考以下文章