如何最好地在EAR中存储Subversion版本信息?

Ren*_*ene 8 java svn ant release

当收到错误报告或it-doesnt-work消息时,我的姓名首字母问题始终是什么版本?由于不同的构建处于测试的许多阶段,因此规划和部署这通常是一个非常重要的问题.

我是发布Java JAR(ear,jar,rar,war)文件的情况,我希望能够查看/在JAR中切换到作为已发布JAR源的同一分支,版本或标记.

如何最好地调整ant构建过程,以便svn checkout中的版本信息保留在创建的构建中?

我在思考:

  • 添加一个VERSION文件,但有什么内容?
  • 将信息存储在META-INF文件中,但在哪些属性下使用哪些内容?
  • 将源复制到结果存档中
  • 将svn:properties添加到所有源中,并在编译器保留的位置使用关键字

我最终使用svnversion方法(接受的anwser),因为它扫描整个子树而不是svn info,它只是查看当前文件/目录.为此,我在ant文件中定义了SVN任务,使其更具可移植性.

<taskdef name="svn" classname="org.tigris.subversion.svnant.SvnTask">
  <classpath>
    <pathelement location="${dir.lib}/ant/svnant.jar"/>
    <pathelement location="${dir.lib}/ant/svnClientAdapter.jar"/>
    <pathelement location="${dir.lib}/ant/svnkit.jar"/>
    <pathelement location="${dir.lib}/ant/svnjavahl.jar"/>
  </classpath>        
</taskdef>
Run Code Online (Sandbox Code Playgroud)

并非所有构建都会产生Web服务.由于应用程序服务器中的更新,部署之前的ear文件必须保持相同的名称.使文件可执行仍然是一个选项,但在那之前我只包括一个版本信息文件.

<target name="version">
  <svn><wcVersion path="${dir.source}"/></svn>
  <echo file="${dir.build}/VERSION">${revision.range}</echo>
</target>
Run Code Online (Sandbox Code Playgroud)

参考:
svnrevision:http://svnbook.red-bean.com/en/1.1/re57.html
svn info http://svnbook.red-bean.com/en/1.1/re13.html subclipse
svn task:http: //subclipse.tigris.org/svnant/svn.html
svn客户端:http://svnkit.com/

Pet*_*ton 5

在Ant脚本中使用svnversion命令获取修订号:

<exec executable="svnversion" outputproperty="svnversion" failonerror="true">
  <env key="path" value="/usr/bin"/>
  <arg value="--no-newline" />
</exec>
Run Code Online (Sandbox Code Playgroud)

然后在EAR中的某处使用$ {svnversion}属性.我们将它放在EAR文件名中,但您也可以将其放在EAR内的自述文件或版本文件中,或者在EAR的META-INF/manifest.mf中指定版本:

<!-- myapp-r1234.ear -->
<property name="ear" value="myapp-r${svnrevision}.ear" />
Run Code Online (Sandbox Code Playgroud)