2008-10-05 72 views
8

当收到错误报告或无法工作的消息时,我的一个首字母缩写问题始终是什么版本?在测试的很多阶段有不同的构建,规划和部署这通常是一个不平凡的问题。我希望能够在JAR中查看/切换到相同的分支,版本或标签,这些分支,版本或标签是源代码的源代码。发布JAR。如何最好地将Subversion版本信息存储在EAR中?

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

我的线沿线的思考:

  • 增加一个版本的文件,但有什么内容呢?
  • 将信息存储在META-INF文件中,但在哪些属性下具有哪些内容?
  • 复制源到结果归档
  • 加入的svn:属性,所有来源的关键字的地方编译器留给他们是

我结束了使用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> 

并非所有的构建都会导致web服务。由于应用程序服务器中的更新,部署前的ear文件必须保持相同的名称。使文件成为可执行文件仍然是一种选择,但在此之前我只包含一个版本信息文件。

<target name="version"> 
    <svn><wcVersion path="${dir.source}"/></svn> 
    <echo file="${dir.build}/VERSION">${revision.range}</echo> 
</target> 

参考文献:
svnrevision:http://svnbook.red-bean.com/en/1.1/re57.html
SVN信息http://svnbook.red-bean.com/en/1.1/re13.html
Subclipse的SVN任务:http://subclipse.tigris.org/svnant/svn.html
svn客户端:http://svnkit.com/

+0

I SvnTask比在接受的答案中运行“svnversion”更加便于携带吗? – 2008-10-14 11:02:00

回答

5

在使用Ant脚本中的svnversion,如果命令来获取版本号:

<exec executable="svnversion" outputproperty="svnversion" failonerror="true"> 
    <env key="path" value="/usr/bin"/> 
    <arg value="--no-newline" /> 
</exec> 

然后使用$ {} svnversion,如果物业在EAR地方。我们把它放在EAR文件名,但你也可以把它放在一个自述或版本文件耳内,或指定在EAR的META-INF/MANIFEST.MF版本:

<!-- myapp-r1234.ear --> 
<property name="ear" value="myapp-r${svnrevision}.ear" /> 
1

从我的脑海的顶部。每个jar版本的标签?

1

我们的构建的第一部分是在包的根目录下创建一个version.txt文件,并转储用于检查代码的标记(在我们的例子中)CVS ...此外,最后一部分我们的构建过程会将完全构建的EAR检查回CVS以供将来参考。

这样,如果我们有一个web应用程序的问题 - 这只是一个要求记者点击/app/version.txt的情况 - 从那里我们可以深入了解CVS中的特定构建历史记录以找到相关组件(处理应用程序中不同版本的库)来查找错误。

不知道这对我们的支持民众有多大帮助 - 但它绝对是他们抱怨不是在那里!

4

你想提供Subversion分支和存储库编号。正如在How to access the current Subversion build number?中讨论的那样,svn info命令会为您提供这些信息,然后您可以使用这些信息来构建VERSION文件或将其放入您构建到* AR文件中的任何其他文件中。如果你已经没有别的想法,你可以考虑使用XmlProperty Ant task提取从 的输出SVN  信息  --xml命令的相关信息

1

做自动生成,并放置一个标签(带有日期当构建成功时(与unittest of course一起),在代码库上添加代码。

在您的交付过程中,仅向客户交付标签化版本。这样你就可以控制,并且可以将标签名称放在某个地方的readme.txt文件中,或者让ear文件的文件名反映标签名称。

我个人转回CVS,这是其中一个原因。在CVS中,我可以有一个班级报告它的标签。我所有的jar文件都包含一个“main”,这使得它们可以运行。有了支持问题,我要求客户做一个“java -jar somejar.jar”并将输出发送给我,并与问题一起。

这样我确信他们正在使用的构建,我甚至可以获得像java版本,操作系统类型和版本的信息。没有客户必须回答奇怪的问题。

这很简单但非常有效。

1

为什么不把构建号码放到一个属性文件中......然后可以通过java轻松读取并输出到帮助|关于对话框(小程序/应用程序),网页页脚或任何其他可能的GUI。

(见每个SOF页的页脚....有SVN版本号在那里。)

似乎负荷比看在WAR /耳/ JAR等简单的时间更容易?

0

我将绝对存储库修订版本存储为我的完整版本号的一部分。这让人们快速浏览一下给定的版本是否在给定的版本中。

我们还将版本号/构建日期/ etc作为自定义属性存储在耳朵的清单文件中,这些仅仅是信息性的。我们还将它存储在内置于我们jar中的属性文件中,以便应用程序可以读取它。

3

查看jreleaseinfo项目。包含一个ANT任务,该任务可以生成可在运行时调用的Java类,以显示项目的发布信息。

我喜欢它的简单。

相关问题