【发布时间】:2009-10-23 21:01:15
【问题描述】:
我想在 Netbeans 项目的输出 JAR 文件名中附加一些版本号:例如 1.0、2.0b 甚至是 Subversion 修订号。不过,我似乎在这方面找不到任何东西。我也不确定这是否是构建系统 (Ant) 的责任,或者 IDE (Netbeans) 是否可以委托该过程。有没有一种集中的、干净的方式来做到这一点?
【问题讨论】:
我想在 Netbeans 项目的输出 JAR 文件名中附加一些版本号:例如 1.0、2.0b 甚至是 Subversion 修订号。不过,我似乎在这方面找不到任何东西。我也不确定这是否是构建系统 (Ant) 的责任,或者 IDE (Netbeans) 是否可以委托该过程。有没有一种集中的、干净的方式来做到这一点?
【问题讨论】:
IMO,这是构建系统的责任,而不是 IDE 的责任。让我换一种方式说:不要依赖你的 IDE 来构建你的项目,使用构建工具。在开发过程中使用 IDE 很好,但是依赖 IDE 来构建项目并不是一件好事(如果你明天改变你的 IDE,如果你想在没有那个 IDE 的另一台机器/操作系统上构建你的项目,如果你想要怎么办在无头机器上构建你的项目,如果你想自动化你的构建,如果有人想要构建那个项目并且没有那个 IDE 等等,等等)。真的,这就是构建系统的用途。
现在,关于您的初始请求,有plenty ways to add a version number。其中之一是使用 Ant 的 BuildNumber 任务:
这是一项可用于跟踪内部版本号的基本任务。
它将首先尝试从文件中读取构建号(默认情况下,当前目录中的 build.number),然后将属性 build.number 设置为读取的值(如果没有,则设置为 0价值)。然后它将数字加一并将其写回文件。 (如果您需要更好地控制属性名称或数字格式等内容,请参阅 PropertyFile 任务。)
例如像这样使用它:
<target name="jar" depends="compile">
<property name="version.num" value="1.00"/>
<buildnumber file="build.num"/>
<jar destfile="foo-${version.num}-b${build.number}.jar"
basedir="."
includes="**/*.class"
/>
</target>
或者你确实可以add subversion revision number。一个简单的方法似乎是安装SVNAnt 任务并使用the status task:
<target name="revisionnumber">
<!-- get the svn revision number -->
<svn>
<status path="application.cfm" revisionProperty="svn.revision" />
</svn>
<echo>Sandbox Revision: ${svn.revision}</echo>
</target>
最后,另一种选择是使用 Maven 代替 Ant,它具有内置的版本管理功能,正如 cetnar 所指出的那样。
【讨论】:
我不确定这是否是最好的方法,但我们将它放在 MANIFEST.MF 文件中,如下所示:
Implementation-Version: 2.0b
我们可以像这样以编程方式获取这个值:
String version_num = this.getClass().getPackage().getImplementationVersion();
【讨论】:
如果您想使用一个工具来处理您的构建,那么有很多关于,例如 CruiseControl,它基于 ANT,并且与您的源代码控制有相当深度的集成。
我使用它来自动增加内部版本号并将其用作 jar 版本号中的最后一位,例如1.4.168,其中 168 是内部版本号。我正要让它在获取内部版本号之前将标签放入 CVS,以便我确切知道 jar 中的代码。
【讨论】:
Maven 默认完成。即使你想用更详细的信息命名你的 jar 文件,你也可以使用build number plugin。
编辑
一开始我误解了您的问题,因此以下部分涉及在 jar 文件中添加此信息。
您可以通过creating manifest file 自己做。在 Maven 中,您可以通过 additional configuration 调整创建清单文件的过程。我想(我敢肯定)在 Ant 中应该有类似的功能。
【讨论】:
您可以使用 maven 进行 vesion 并从 pom 中读取。
阅读这篇文章: 嵌入maven版本号 在 http://happygiraffe.net/blog/2008/10/01/embedding-the-maven-version-number/
【讨论】: