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

时间:2020-03-06 15:04:07  来源:igfitidea点击:

在Java Web应用程序中显示/使用修订号的最佳方法是什么?

我们只是使用ant来构建.war存档,而不使用buildserver等。我希望$ ref可以在资源文件中写入,但是只有在提交相关文件时才会更新。我在全球需要它。

你会推荐什么?提交后触发器会更新某些文件?
自定义的蚂蚁脚本?有没有更多的非骇客的方式来做到这一点?
或者最好有一个独立于svn的我自己的版本号。

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

解决方案

看到这个线程。

我最喜欢的那个线程只是在代码中将$ Id:$转储到我们想要修订ID的位置。导出时,SVN将使用真实数据填充该数据。

如果我们使用的是Windows,则可以查看乌龟附带的SubWCRev.exe。

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

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

tigris的SvnAnt任务是最古老的。

这里的文档特别要看一下info元素,该元素将Subversion存储库的修订号公开为Ant属性,它称为rev。我们可以使用常规的Ant替换机制将此值写入资源文件。

有人还在Google代码托管上提出了一个类似的(简单的)任务,尽管从未使用过,但却无法发表评论。

如果我们已经有Ant,那么这两种方法对我来说似乎都是最简洁的方法。

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

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

我们使用以下ant任务在罐子的属性中包含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>

然后我们可以像这样在web应用中访问它

String version = this.getClass().getPackage().getImplementationVersion();