Java 在webapp中获取当前svn版本

Java 在webapp中获取当前svn版本,java,svn,web-applications,revision,Java,Svn,Web Applications,Revision,在java webapp中显示/使用修订号的最佳方式是什么 我们只是使用ant来构建我们的.war档案,没有buildserver之类的。我希望能够在资源文件中写入某种形式的if$ref,但只有在提交了相关文件时才会更新。我在全球范围内都需要它 你推荐什么?更新某些文件的提交后触发器? 自定义ant脚本?有没有一种更简单的方法? 或者最好有自己的独立于svn的版本号 编辑:很好的建议!谢谢你的回答 见 该线程中我最喜欢的是将$Id:$转储到您需要修订Id的代码中。当您进行导出时,SVN将使用真实

在java webapp中显示/使用修订号的最佳方式是什么

我们只是使用ant来构建我们的.war档案,没有buildserver之类的。我希望能够在资源文件中写入某种形式的if$ref,但只有在提交了相关文件时才会更新。我在全球范围内都需要它

你推荐什么?更新某些文件的提交后触发器? 自定义ant脚本?有没有一种更简单的方法? 或者最好有自己的独立于svn的版本号

编辑:很好的建议!谢谢你的回答


该线程中我最喜欢的是将
$Id:$
转储到您需要修订Id的代码中。当您进行导出时,SVN将使用真实数据填充该代码。

如果您使用的是windows,您可以查看随tortoise附带的SubWCRev.exe


它给出当前的存储库版本,并将$WCREV$替换为said,您可以将其作为上下文参数包含在web.xml中,然后从中获取它。

有几个Ant任务可以为您完成此任务。

来自底格里斯的是最古老的

文档是-特别是查看
info
元素,它将Subversion存储库的修订号公开为Ant属性,并调用
rev
。您可以使用正常的Ant替换机制将此值写入资源文件

也有人在谷歌代码托管上贴了一个帖子——从未使用过,所以不能发表评论


如果您的构建中已经有Ant,那么这两种方法对我来说都是最简单的方法。

在打包webapp之前,运行svn info并将输出重定向到WEB-INF/classes中的某个文件。当webapp启动时,解析该文件并将其隐藏在servlet上下文或类似的地方。在每个页面的页脚中,显示此版本-如果您使用的是Tiles或SiteMesh,则此更改只需在一个文件中完成


Maven用户可以尝试Maven buildnumber插件。

我们使用以下ant任务在jar的属性中包含svn版本,以及正在使用的其他包的版本

<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>

如果您使用的是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>


您可以在需要的地方输入修订值。

我更喜欢此解决方案,因为它简单且开箱即用。
 <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>