如何将maven项目版本放在war文件清单中?

问题描述:

我需要让Maven将POM文件的版本号插入位于/WEB-INF/manifest.mf下的WAR文件中的清单。如何将maven项目版本放在war文件清单中?

我该怎么做?我能够使用maven-jar-plugin轻松地在JAR文件中为此进行文件归档,但这不适用于WAR文件。

感谢您的帮助!

使用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> 
+0

如果您也有兴趣通过网址阅读这些版本信息,例如'http:// example.com/versioninfo.txt',您可以过滤'versioninfo.txt'模板,其中包含您的'$ {project .version}和[将版本文件包含在war中](http://www.taringamberini.com/en/howto/java/2015/including-release-info-into-war/)通过使用'maven -war-plugin'。 – taringamberini 2015-09-25 07:37:17

${project.version}放在您的manifest.mf中您希望版本的位置。为了达到这个目的,我相信你需要资源插件,以便manven能够“过滤”包含在war文件中的资源。

+0

但清单文件不是资源。它在构建时生成,对吗?如果在构建时生成,则不会将其作为资源进行处理。我误解了什么? – 2011-04-25 17:54:46

+0

@Matthew它可以是一个资源,但它是一个不正确的方法。你是对的,这个文件是由maven-war-plugin实时生成的。你的回答是正确的。 – yegor256 2011-04-26 17:11:23

或者你可以使用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),那么该行将被从清单中排除。

这可能进入Maven的战争插件配置如下:

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