我需要通过 http 响应从我的 web java 应用程序向前端发送内部版本号。但是在构建时设置它的最佳和正确方法是什么?我在竹子上使用maven。我知道我可以将版本号传递给 maven。但我不确定接下来的步骤。我只考虑从 maven 执行 ant,从 ant 将版本写入属性文件,并使用 java 应用程序中的资源读取它。请给点建议。谢谢
3 回答
我认为制作版本文件没有问题(我们在项目中使用这种方法)。如果您知道${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
.
我会将您的版本号作为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");
我建议使用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.