在webapp中获取当前的svn版本

发布于 2024-07-06 19:25:54 字数 273 浏览 8 评论 0原文

在 java web 应用程序中显示/使用修订号的最佳方式是什么?

我们只使用 ant 来构建我们的 .war 存档,没有构建服务器之类的。 我希望有某种 if $ref 可以写入资源文件中,但这仅在提交相关文件时更新。 我在全球范围内都需要它。

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

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

what is the best way of displaying/using the revision number in a java webapp?

we just use ant to build our .war archive, no buildserver or such. i'd hope there was some kind if $ref that i could write in a resource file, but this is only updated when the file in question is committed. i need it globally.

what would you recommend? post-commit triggers that update certain files?
custom ant scripts? is there a more non-hacky way of doing this?
or it it better to have my own version number independent of svn.

edit: great suggestions! thanks a lot for the answers!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

世界如花海般美丽 2024-07-13 19:25:54

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

,然后您可以像这样在 web 应用程序中访问它

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

We use the following ant task to include the svn version in a attribute in the jar, along with the version of other packages that are being used

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

And then you can access it in your webapp like this

String version = this.getClass().getPackage().getImplementationVersion();
少女的英雄梦 2024-07-13 19:25:54

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

并在您想要的位置设置修订值。

If you are using ant you can define this task:

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

and you the revision value where you want.

九八野马 2024-07-13 19:25:54

有几个 Ant 任务可以为您执行此操作。

SvnAnt 任务< /a> 来自底格里斯河是最古老的。

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

有人还在 Google 代码托管上提出了类似(更简单)的任务 - 从未使用过它虽然所以不能发表评论。

如果您的构建中已经有 Ant,那么这两种方式对我来说似乎都是最巧妙的方式。

There are a couple of Ant tasks that can do this for you.

SvnAnt task from tigris is the oldest.

Documentation is here - in particular take a look at the info element which exposes the Subversion repository's revision number as an Ant property which it calls rev. You can write this value to your resouces file using the normal Ant substituion mechanisms.

Someone has also put up a simillar (simpler) task on google code hosting - never used it though so can't comment.

Either of these seem like the neatest way to me if you already have Ant in your build.

小嗲 2024-07-13 19:25:54

请参阅此帖子

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

See this thread.

My favourite from that thread is just dumping $Id:$ in your code where you want the revision ID. SVN will populate that with the real data when you do an export.

北陌 2024-07-13 19:25:54

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

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

If you are using windows you could look at SubWCRev.exe which comes with tortoise.

It gives the current repository revision and will replace $WCREV$ with said, you could include this in your web.xml as say a context param and then get it from there.

冷弦 2024-07-13 19:25:54

在打包 web 应用程序之前,运行 svn info 并将输出重定向到 WEB-INF/classes 中的某个文件。 当 web 应用程序启动时,解析此文件并将其存储在 servlet 上下文或其他类似位置。 在每一页的页脚中,显示此版本 - 如果您使用的是 Tiles 或 SiteMesh 等内容,则只需在一个文件中完成此更改。

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

Before the webapp is packaged, run svn info and redirect the output to some file in WEB-INF/classes. When the webapp starts up, parse this file and have it stashed away in the servlet context or some similar place. In the footer of every page, display this version - if you are using something like Tiles or SiteMesh, this change needs to be done only in one file.

Maven users can try the maven-buildnumber plugin.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文