gpt4 book ai didi

java - 使用Ant进行Java部署:帮助进行版本控制,测试等,以实现更好的构建

转载 作者:行者123 更新时间:2023-11-30 05:58:06 25 4
gpt4 key购买 nike

在过去的几个月中,我开发了一个Java项目,一个命令行实验分析工具。由于我没有计算机科学专业的背景知识(相反,是数学/工程学),所以我很乐于学习和学习诸如项目管理和POM,版本控制(SVN)和构建脚本(ANT)之类的概念。我之所以这样描述,是为了描述这样一个事实,即与算法和公式不同,大多数概念对我而言并不是自然而然的(我想可能可以说我已经学会了成为“编码员”而不是“程序员”如果这样的区分是有效/可接受的)。

话虽这么说,我已经设法使大部分情况下都能正常工作,但有时还是不完整/难看。我想在此过程中不断学习和改进,因此想到了SO方面的问题。下面附有我今天使用的ANT文件,该文件是经过一段时间的帮助而创建的。

鉴于这种情况,我想...:

问题1:...在某种程度上添加了版本控制,因此当我以jar文件的形式向全球用户提供该软件时,他们和我都可以采用一种跟踪潜在问题和开发的方式。附加在JAR文件名称上的版本号(例如:prog-0.1.5.jar)以及在运行时对用户的某种输出将是理想的。有人告诉我,通过ANT可以做到这一点,但到目前为止我还没有任何运气。有任何提示或建议吗?

为此,我也收到了以下代码片段,但是由于我尚未声明这些属性,所以我不确定为什么/如何在我的项目中使用它。

<svn>
<status path="."
lastChangedRevisionProperty="someproject.build" />
</svn>


编辑:只是为了澄清我的很多问题,我想标准化项目中的版本控制。我可能以错误的方式使用了该术语,但是现在进行版本控制的方式是:


我对SVN服务器进行定期提交以跟踪更改(并进行备份)
我手动尝试跟踪软件的不同版本


举例说明我要完成的版本控制:


我想避免手动版本编号;那太容易出错了...
我想至少使用本地的版本号来跟踪不同的版本,因此,如果我碰巧需要研究一个较旧的版本,那么在任何时候我都使用较旧的版本。 (我现在对新版本执行 ant dist-clean; ant dist,而新版本只会覆盖旧的JAR)
如果版本号可以合并到版本中,那将是更可取的,因此在运行JAR时,提供一条信息行(例如“您正在运行My_Awesome_software v:0.1.3”)
为了实现上述目的,将SVN作为版本跟踪,并将ANT作为构建工具。我不确定是否有自由更改服务器上的版本跟踪,并且在这个阶段还不能选择Maven。中游学习似乎比它可能带来的任何好处更成问题...


问题2:……研究单元测试。我已经读过很多关于单元测试是现代编程的圣杯的知识,几年前,我对大学里的JUnit有一些遥远的回忆。我了解在理想的软件开发环境中,单元测试绝对至关重要,但是我不知道在我的情况下应该/应该如何执行单元测试。该软件的用户界面(参数文件和运行时的几个可选标志)最少,并且与分析相关的执行时间很长(阅读:小时)。

在这种情况下,没有单元测试仍然被认为是一种不好的做法,如果是这样的话,在构建测试时应该如何推理?

我觉得如果我尝试测试软件中的大多数功能,则单元测试通常会比实际软件大两倍,并且执行时间甚至会比实际软件更长。



结论:我一直在研究使用ANT的版本编号概念,我将简要总结我的发现,以供其他可能遇到相同问题的人参考:


创建一个如下所述的@Kevin Stembridge属性文件,例如build.properties。我的看起来像这样:

micro.version = 5
  build.number = 5
  major.version = 0
  minor.version = 0
使用以下命令从此文件导入属性: <property file="project-version.properties"/>
将所需的编号方案与jar标签中的jar名称关联。请参见下面的代码。
单元测试是必需的,但是对于像我这样的项目而言,则很复杂。随着项目的发展,我将对其进行研究。


感谢所有以某种方式做出贡献的人,我选择了凯文的答案,因为它是唯一对我的解决方案有直接影响的答案。



<target name="dist" depends="compile,static" description="Compiles and builds jar files">  

<mkdir dir="${dist}"/>
<buildnumber file="project-version.properties"/>
<property name="version.number" value="${major.version}.${minor.version}.${micro.version}"/>
<svn>
<status path="."
lastChangedRevisionProperty="rev.number" />
<info target="." />
</svn>

<jar basedir="${build}"
destfile="${dist}/fever-${version.number}-rev${rev.number}.jar"
includes="**/*" />
</target>

最佳答案

回答问题1:

要将版本号添加到jar和任何其他工件中,应创建一个名称为“ project-version.properties”的属性文件。在其中添加以下行:

project.version=<my_version_number>


在您的build.xml文件中,添加以下代码段:

<property file="project-version.properties" />


然后可以将版本附加到jar文件中,如下所示:

<jar destfile="${dist}/prog-cli-${project.version}.jar">


回答问题2:

这是一个很大的讨论,我不会赘述。当然(实际上更容易)可以为没有用户界面的代码创建一套很好的单元测试套件。如果知道给定输入希望获得的输出,则可以编写一个测试来确认该输出。

回答问题3:

您的构建文件看起来不错。我没有看到任何问题。

关于使用Maven的建议。通过使用约定,它将为您解决版本问题,但请注意,学习曲线并不是唯一的缺点。通过切换到Maven,您将牺牲灵活性,简单性和可靠性。

关于java - 使用Ant进行Java部署:帮助进行版本控制,测试等,以实现更好的构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4784637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com