3

我需要通过 http 响应从我的 web java 应用程序向前端发送内部版本号。但是在构建时设置它的最佳和正确方法是什么?我在竹子上使用maven。我知道我可以将版本号传递给 maven。但我不确定接下来的步骤。我只考虑从 maven 执行 ant,从 ant 将版本写入属性文件,并使用 java 应用程序中的资源读取它。请给点建议。谢谢

4

3 回答 3

10

我认为制作版本文件没有问题(我们在项目中使用这种方法)。如果您知道${build.version}在构建时您将拥有一些属性 (fe ),则可以使用过滤来实现您的目标。

1)在下面创建版本文件src/main/resources,内容如下

Version: ${build.version}

2)将以下内容添加到您的 pom.xml 中:

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
    </resource>
</resources>

3) 构建项目。过滤后的版本文件应该出现在target/classes.

于 2012-08-27T15:40:31.183 回答
7

我会将您的版本号作为manifest.mf的一部分。如果您打算使用 SVN 修订版(或任何其他 SCM,您只需要找到等效的插件)作为版本号,您可以使用maven-svn-revision-number-plugin以及maven-war-plugin .

这是一个关于如何将它与 SVN 一起使用的示例:

<plugin>
    <groupId>com.google.code.maven-svn-revision-number-plugin</groupId>
    <artifactId>svn-revision-number-maven-plugin</artifactId>
    <version>1.13</version>
    <executions>
        <execution>
            <goals>
                <goal>revision</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <entries>
            <entry>
                <prefix>scm</prefix>
            </entry>
        </entries>
    </configuration>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <archive>
            <manifestEntries>
                <SCM-Revision>${scm.revision}</SCM-Revision>
            </manifestEntries>
        </archive>
    </configuration>
</plugin>

然后从你的 Controller/Servlet 中读取它:

ServletContext application = getServletConfig().getServletContext();
InputStream inputStream = application.getResourceAsStream("/META-INF/MANIFEST.MF");
Manifest manifest = new Manifest(inputStream);
Attributes attr = manifest.getMainAttributes();
String value = attr.getValue("SCM-Revision");
于 2012-08-27T18:19:10.893 回答
2

我建议使用buildnumber-maven-plugin,它将设置${buildNumber}属性,你可以MANIFEST.MF这样写(如果它是 WAR):

<plugin>
  <artifactId>maven-war-plugin</artifactId>
  <configuration>
    <archive>
      <manifestEntries>
        <SCM-Revision>${buildNumber}</SCM-Revision>
      </manifestEntries>
    </archive>
  </configuration>
</plugin>

Then, you can read it using java.util.jar.Manifest class. Take a look at how we do it in jcabi-manifests. Here is a real life example (we are using Git): pom.xml. The application is deployed to Heroku: www.s3auth.com. You can see the revision number in the right bottom corner of the web page.

于 2012-08-27T19:39:17.183 回答