如何将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】:

或者您可以使用 addDefaultImplementationEntriesaddDefaultSpecificationEntries 标志添加多个条目,包括 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),则该行将从清单中排除。

这可以进入 ma​​ven-war-plugin 配置,如下所示:

<plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <archive>
            <manifest>
                <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
            </manifest>
        </archive>
    </configuration>
</plugin>

【讨论】:

以上是关于如何将maven项目版本放入war文件清单中?的主要内容,如果未能解决你的问题,请参考以下文章

用于内部版本号的 Maven + Mercurial

如何使用 Maven 在 EAR 中添加 WAR

如何在 maven-war-plugin 中正确设置清单类路径

如何使用Maven构建将常规文件夹添加到我的存储库中?

将压缩文件放入 jar

如何将maven的jar项目简单快速的转变成war项目