有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Ant的版本控制Java部署:帮助版本控制、测试等实现更好的构建

在过去的几个月里,我开发了一个Java项目,一个命令行实验分析工具。由于我的背景不是计算机科学专业(数学/工程专业),我很高兴能够攻读并学习项目管理和管理等概念;POM、版本控制(SVN)和构建脚本(ANT)。我之所以描述这一点,是为了说明这样一个事实:与算法和公式不同,大多数这些概念对我来说都不是天生的(我想有人会说,如果这样的区别是有效的/被接受的,我已经学会了做一个“编码器”而不是“程序员

话虽如此,我还是设法让事情在大部分时间都能顺利进行,尽管有时有些不完整/丑陋。因为我想在这一过程中学习和提高,所以我想在这里提问。我今天使用的ANT文件是经过一段时间的帮助创建的,附件如下

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

问题1:。。。在某种程度上添加版本控制,这样当我将软件作为jar文件提供给世界各地的用户时,他们和我都可以找到跟踪潜在问题和开发的方法。附加到JAR文件名的版本号(例如:prog-0.1.5.jar)以及运行时向用户提供的某种输出是理想的。有人告诉我,这可以通过ANT实现,但到目前为止我还没有任何运气。有什么建议吗

我也收到了下面的代码片段,但是我不知道为什么/如何在我的项目中工作,因为我没有声明这些属性

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

编辑:为了澄清我的一大堆问题,我想标准化项目中的版本控制。我可能用错了这个词,但现在版本控制的方式是:

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

举一个关于版本控制的示例:

  1. 我希望避免手动版本编号;这很容易出错
  2. 我希望使用不同版本的版本号来跟踪不同的版本,至少在本地是这样,因此,如果我碰巧需要调查旧版本,我总是使用旧版本。(我现在对只覆盖旧JAR的新版本执行ant dist-clean; ant dist
  3. 最好将版本号合并到构建中,以便在运行JAR时显示一行信息(例如,“您现在正在运行My_Awesome_软件v:0.1.3”)
  4. 以SVN作为版本跟踪,以ANT作为构建工具来完成上述任务。我不确定我是否有权在我们的服务器上更改版本跟踪,Maven在这个阶段不是一个选项。这似乎是一个更大的问题,学习中游比任何好处,它可能有

问题2:。。。研究单元测试。我读过很多关于单元测试是现代编程的圣杯的书,我对几年前大学的JUnit有一些遥远的记忆。我知道在一个理想的软件开发环境中,单元测试是绝对关键的,但是我不知道在我的情况下单元测试应该/可以如何实现;其中,软件具有最小的用户界面(一个参数文件和运行时的两个可选标志)和与分析相关的长(读取:小时)执行时间

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

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


结论s:我一直在使用ANT研究这个版本编号概念,我将很快为其他可能遇到相同问题的人总结我的发现:

  1. 创建一个属性文件,如下面提到的@Kevin Stembridge,例如build。财产。我的看起来像这样:

    微型。版本=5
    建筑数字=5
    专业版本=0
    少数的版本=0

  2. 使用以下命令从此文件导入属性:<property file="project-version.properties"/>

  3. 将所需的编号方案添加到jar标记中的jar名称。请参阅下面的代码

  4. 单元测试是必要的,无论像我这样的项目有多复杂。随着项目的发展,我将对此进行调查

感谢每一位对此做出贡献的人,我选择凯文的答案,因为这是唯一一个对我的解决方案有直接影响的答案


<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>

共 (3) 个答案

  1. # 1 楼答案

    我知道你把Ant作为构建工具。不过,我鼓励您考虑Maven。

    您描述的一些问题是Maven存在的原因。在创建JAR文件之前进行单元测试的想法、构建版本号的想法、在源代码存储库(SVN-even)中对版本进行分支和标记的想法都直接构建到Maven中

    缺点是,它是另一种学习工具,学习曲线可能很陡峭

  2. # 2 楼答案

    一,

    当您拥有多个版本时,您需要版本控制

    如果你没有它,你将在“啊,版本4.5.1.2源代码在那个zip文件中”结束,它很快就会变得非常乏味

    当您在版本控制系统之间进行选择时,请选择一个易于执行以下操作的系统:

    • 在应用程序中嵌入生成id
    • 使用所述构建id可以轻松获得与构建id对应的准确源代码
    • 对上述源代码进行bug修复

    这在今天很常见。满足于同样的要求。我个人碰巧喜欢git和github,但其他人喜欢mercurial和bzr

    二,

    不要忘记测试的原因。当事情破裂时,你需要尽快得到通知!这通常意味着您添加了一个以前中断并已修复的场景,然后查看这次是否中断。您通常在构建服务器中执行此操作,该服务器在您每次签入版本系统时执行快速测试,并在工作时间之外执行长时间测试

    三,

    我不知道您是否应该更改ant文件中的内容,但我鼓励您使用一种方法,使ant构建文件和IDE配置保持一定程度的同步。我使用ant4eclipse编写了一个使用Eclipse配置的构建系统。这非常棘手,我建议使用一个明确了解ant的IDE。我认为这在Eclipse中不起作用

  3. # 3 楼答案

    回答问题1:

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

    project.version=<my_version_number>
    

    在你的身体里。xml文件添加以下代码段:

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

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

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

    回答问题2:

    这是一个很大的讨论,我将不详细讨论。当然,为没有用户界面的代码创建一套好的单元测试是可能的(实际上更容易)。如果您知道给定输入的预期输出,那么您可以编写一个测试来确认它

    回答问题3:

    您的构建文件看起来很好。我看不出有什么问题

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