在 java webapp 中显示/使用修订号的最佳方式是什么?
我们只是使用 ant 来构建我们的 .war 档案,没有 buildserver 之类的。我希望有某种 $ref 可以写入资源文件,但这仅在提交相关文件时更新。我需要它全球。
你会推荐什么?更新某些文件的提交后触发器?自定义蚂蚁脚本?有没有更简单的方法来做到这一点?或者最好有我自己的独立于svn的版本号。
编辑:很好的建议!非常感谢您的回答!
在 java webapp 中显示/使用修订号的最佳方式是什么?
我们只是使用 ant 来构建我们的 .war 档案,没有 buildserver 之类的。我希望有某种 $ref 可以写入资源文件,但这仅在提交相关文件时更新。我需要它全球。
你会推荐什么?更新某些文件的提交后触发器?自定义蚂蚁脚本?有没有更简单的方法来做到这一点?或者最好有我自己的独立于svn的版本号。
编辑:很好的建议!非常感谢您的回答!
我们使用以下 ant 任务将 svn 版本包含在 jar 的属性中,以及正在使用的其他包的版本
<target name="package" depends="compile" description="Package up the project as a jar">
<!-- Create the subversion version string -->
<exec executable="svnversion" failifexecutionfails="no" outputproperty="version">
<arg value="."/>
<arg value="-n"/>
</exec>
<!-- Create the time stamp -->
<tstamp>
<format property="timeAndDate" pattern="HH:mm d-MMMM-yyyy"/>
</tstamp>
<jar destfile="simfraserv.jar">
<manifest>
<attribute name="Built-By" value="${user.name} on ${time.date}" />
<attribute name="Implementation-Version" value="${svn.version}" />
<attribute name="Implementation-Java" value="${java.vendor} ${java.version}" />
<attribute name="Implementation-Build-OS" value="${os.name} ${os.arch} ${os.version}" />
<attribute name="JVM-Version" value="${common.sourcelevel}+" />
</manifest>
<fileset dir="bin">
<include name="**/*.class"/>
</fileset>
<fileset dir="src">
<include name="**"/>
</fileset>
</jar>
</target>
然后你可以像这样在你的 webapp 中访问它
String version = this.getClass().getPackage().getImplementationVersion();
如果您使用的是 ant,您可以定义此任务:
<target name="version">
<exec executable="svn" output="svninfo.xml" failonerror="true">
<arg line="info --xml" />
</exec>
<xmlproperty file="svninfo.xml" collapseattributes="true" />
<echo message="SVN Revision: ${info.entry.commit.revision}"/>
<property name="revision" value="${info.entry.commit.revision}" />
</target>
和你想要的修订值。
有几个 Ant 任务可以为您完成这项工作。
来自 tigris 的SvnAnt 任务是最古老的。
文档在这里- 特别是查看info
将 Subversion 存储库的修订号公开为它调用的 Ant 属性的元素rev
。您可以使用正常的 Ant 替换机制将此值写入资源文件。
有人还在谷歌代码托管上提出了一个类似(更简单)的任务——虽然从未使用过,所以无法发表评论。
如果您的构建中已经有 Ant,那么这两种方法对我来说都是最简洁的方式。
看到这个线程。
该线程中我最喜欢的只是$Id:$
在您想要修订 ID 的代码中转储。当您进行导出时,SVN 将使用真实数据填充它。
如果您使用的是 Windows,您可以查看 Tortoise 附带的 SubWCRev.exe。
它给出了当前的存储库修订,并将 $WCREV$ 替换为说,您可以将其作为上下文参数包含在您的 web.xml 中,然后从那里获取它。
在打包 webapp 之前,运行 svn info 并将输出重定向到 WEB-INF/classes 中的某个文件。当 webapp 启动时,解析这个文件并将它隐藏在 servlet 上下文或类似的地方。在每一页的页脚,显示这个版本——如果你使用的是 Tiles 或 SiteMesh 之类的东西,这个改变只需要在一个文件中完成。
Maven 用户可以尝试 maven-buildnumber 插件。