当收到错误报告或it-doesnt-work消息时,我的首字母问题之一始终是什么版本?由于不同的构建处于测试的许多阶段,因此规划和部署这通常是一个非常重要的问题。
我是发布Java JAR(ear,jar,rar,war)文件的情况我希望能够查看/在JAR中切换到作为发布源的相同分支,版本或标记JAR。
如何最好地调整ant构建过程,以便svn checkout中的版本信息保留在创建的构建中?
我正在思考:
我最终使用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 info http://svnbook.red-bean.com/en/1.1/re13.html
subclipse svn任务:http://subclipse.tigris.org/svnant/svn.html
svn客户端:http://svnkit.com/
答案 0 :(得分:5)
使用Ant脚本中的 svnversion 命令获取修订号:
<exec executable="svnversion" outputproperty="svnversion" failonerror="true">
<env key="path" value="/usr/bin"/>
<arg value="--no-newline" />
</exec>
然后在EAR中的某处使用 $ {svnversion} 属性。我们将它放在EAR文件名中,但您也可以将它放在EAR内的自述文件或版本文件中,或者在EAR的 META-INF / manifest.mf 中指定版本:
<!-- myapp-r1234.ear -->
<property name="ear" value="myapp-r${svnrevision}.ear" />
答案 1 :(得分:4)
您想要提供Subversion分支和存储库编号。正如How to access the current Subversion build number?中所讨论的,svn info
命令将为您提供此信息,然后您可以使用它来构建VERSION文件或放置在您构建到* AR文件中的任何其他文件中。如果您没有其他想法,可以考虑使用XmlProperty Ant task从您的输出中提取相关信息
svn info --xml命令
答案 2 :(得分:3)
查看jreleaseinfo项目。包含一个ANT任务,可以生成一个可在运行时调用的java类,以显示项目的发布信息。
我喜欢它的简洁性。
答案 3 :(得分:2)
另请参阅此问题:Build and Version Numbering for Java Projects (ant, cvs, hudson)
它包含几个有用的代码段。
答案 4 :(得分:1)
从我的头脑中。每个jar构建的标签?
答案 5 :(得分:1)
我们的构建的第一部分在包的根目录中创建了一个version.txt文件并转储用于检查代码的标记(在我们的例子中)CVS ...另外,我们的最后一部分构建过程将完全构建的EAR检入CVS以供将来参考。
这样,如果我们遇到一个webapp问题 - 只是要求记者点击/app/version.txt - 从那里我们可以深入查看CVS中的特定构建历史以找到相关组件(处理应用程序中不同版本的库)以找到错误。
不确定这对我们的支持人员有多大帮助 - 但他们肯定抱怨不在那里!
答案 6 :(得分:1)
自动构建,并在构建成功时在代码库上放置一个标记(带有日期戳)(使用unittest ofcourse)。
在您的交付流程中,仅向客户提供已标记的构建。这样你就可以控制了,可以将标记名放在某个地方的readme.txt中,或者让ear文件的文件名反映标记名。
我亲自切换回CVS,这也是其中一个原因。在CVS中,我可以有一个类报告它的标签。我的所有jar文件都包含一个“main”,使它们可以运行。有了支持问题,我请客户做一个“java -jar somejar.jar”并将输出发送给我。
这样我就可以确定他们正在使用的构建,我甚至可以获得java版本,操作系统类型和版本等信息。没有客户必须回答奇怪的问题。
这很简单但非常有效。
答案 7 :(得分:1)
为什么不将构建号放入属性文件中......然后可以通过java轻松读取并输出到帮助|关于对话框(小应用程序/应用程序),网页页脚或您可能拥有的任何其他GUI。
(请参阅每个SOF页面上的页脚....那里有SVN版本号。)
看起来容易比看WAR / EAR / JAR等容易的时间?
答案 8 :(得分:0)
我将绝对存储库修订存储为我的完整版本号的一部分。这使人们可以快速浏览一下给定的更改是否属于给定版本。
我们还将版本号/构建日期/等存储在耳朵的清单文件中作为自定义属性,这些只是信息性的。我们还将它存储在jar中内置的属性文件中,因此应用程序可以读取它。