2

无论如何在运行时获取我的战争的 maven 部署插件在运行时生成的完整工件版本/内部版本号?

如果 maven 进程生成并打包一个带有该值的属性文件就可以了。

请记住,我的项目会为每次部署生成唯一的(带时间戳的)工件版本。

4

2 回答 2

1

尝试这个:

<configuration>
    <archive>
        <manifest>
            <addDefaultImplementationEntries/>
            <addDefaultSpecificationEntries/>
        </manifest>
    </archive>
</configuration>

这会将构建战争的 pom 中的 maven 详细信息添加到 MANIFEST.MF 文件中,您可以在运行时读取该文件。

我偶尔使用的另一种方法是使用属性文件的过滤,并将 pom 值放入其中 - 如果您已经有了属性文件/配置加载机制,这很有用。

然后,当它被部署时,它使用来自 pom 的相同值,你很好。

-克里斯

于 2014-07-05T07:44:09.600 回答
-1

您可以使用maven-jar-plugin将其打包到您的清单文件中,该文件可以在您需要的任何地方通过您的应用程序读取。

这是将 pom.xml 中的属性写入清单文件的基本配置。

      <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.4</version>
          <configuration>
              <archive>
                  <manifest>
                      <addClasspath>false</addClasspath>
                  </manifest>
                  <manifestEntries>
                      <Implementation-Vendor>Vendor Name</Implementation-Vendor>
                      <Implementation-Version>${revision}</Implementation-Version>
                      <Build-Timestamp>${timestamp}</Build-Timestamp>
                      <Build-Number>${release}_${revision}</Build-Number>
                  </manifestEntries>
              </archive>
          </configuration>
          <executions>
          <!-- your jar executions here -->
          </executions>           
      </plugin>

您的属性值将在 pom.xml 中定义为:

<properties>
    <timestamp>${maven.build.timestamp}</timestamp>
    <release>DevelopmentBuild</release>
    <revision>Some Value</revision>
<properties>

编辑:

这也可以使用maven-war-plugin来完成。您可以在此处获得有关 WAR Manifest Customization 的更多信息。

于 2014-06-21T06:04:51.153 回答