在webapp中获取当前的svn修订版

时间:2008-10-03 10:54:52

标签: java svn web-applications revision

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

我们只使用ant来构建我们的.war存档,没有构建服务器等。我希望有一些如果$ ref我可以在资源文件中写入,但只有在提交相关文件时才会更新。我需要全球化。

你会推荐什么?更新某些文件的提交后触发器? 自定义ant脚本?有没有更黑的方式这样做? 或者最好让我自己的版本号独立于svn。

编辑:很棒的建议!非常感谢你的答案!

6 个答案:

答案 0 :(得分:6)

我们使用以下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();

答案 1 :(得分:4)

如果您使用的是蚂蚁,则可以定义此任务:

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

并根据需要修改值。

答案 2 :(得分:3)

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

来自底格里斯河的

SvnAnt task是最老的。

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

有人在谷歌代码托管上也提出simillar (simpler) task - 从未使用它,但不能发表评论。

如果你的构建中已经有Ant,那么这些对我来说似乎是最好的方式。

答案 3 :(得分:1)

请参阅this thread

我对该主题的最爱只是将$Id:$转储到您想要修订版ID的代码中。当您进行导出时,SVN将使用实际数据填充它。

答案 4 :(得分:1)

如果你使用的是Windows,你可以查看陆龟附带的SubWCRev.exe。

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

答案 5 :(得分:0)

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

Maven用户可以尝试使用maven-buildnumber插件。