什么是构建自动化软件(例如,Ant)?

时间:2009-03-04 14:11:21

标签: java ant build-process

我很多时候看到了蚂蚁的参考但是我没有完全明白它的意思?从我听说它应该编译你的项目,但我不能通过点击Run->在eclipse中运行来做到这一点?

编辑:我想我应该重新解释一下我的问题。我已经知道ant是一个“构建自动化软件”,我的问题是,构建自动化究竟是什么?我认为你应该测试你的应用程序,当它运行时,你点击eclipse中的'build'按钮或通过命令行java,它会生成一个.jar文件?那么为什么你需要“自动化”这个过程呢?

12 个答案:

答案 0 :(得分:23)

  

我已经知道ant是一个'构建自动化软件',我的问题是,构建自动化究竟是什么?我认为你应该测试你的应用程序,当它运行时,你点击eclipse中的'build'按钮或通过命令行java,它会生成一个.jar文件?那么为什么你需要“自动化”这个过程呢?

并非所有Java开发都是通过eclipse完成的,并非所有jar都可以从命令行构建(或者应该从命令行构建)。

您可能还需要运行测试用例,单元测试以及许多其他过程。

蚂蚁的作用是提供一种机制来自动完成所有这些工作(所以你不必每次都这样做),也许你可以每天下午6点调用这个蚂蚁脚本。

例如,在某些项目中,需要每日构建,以下是可以使用ant自动执行的任务,因此它们可以在没有人为干预的情况下运行。

  • 连接到subversion服务器。
  • 使用最新版本下载/更新
  • 编译应用程序
  • 运行测试用例
  • 打包应用程序(罐子,战争,耳朵或其他)
  • 将此构建二进制文件提交给subversion。
  • 在远程服务器中安装应用程序
  • 重新启动服务器
  • 发送包含作业摘要的电子邮件。

当然对于其他项目来说这是矫枉过正,但对其他一些项目来说非常有帮助。

答案 1 :(得分:17)

rogeriopvl绝对正确,但回答你的问题“我不能通过点击Run - >在Eclipse中运行来做到这一点吗?”问题:这对于您自己开发的项目来说很好,并且在多个环境中不需要可重复的,可编写脚本的构建。

但是,如果您正在开发一个开源项目,或者需要能够在构建服务器上构建的专业软件等,那么需要运行特定的IDE并不是一个好主意。

答案 2 :(得分:11)

Ant用于自动化构建过程,但构建过程通常不仅仅是编译过程。 Ant具有可用于执行各种有用功能的“任务”。你可以通过编写一个java类并告诉ant在哪里找到它来创建你自己的任务来做任何事情。然后,您可以混合并匹配这些任务,以创建将执行一组任务的目标。

您还可以设置动态环境来构建应用程序。您可以设置属性文件以保存可在构建过程中使用的变量,即保存文件路径,类路径等。这有助于区分部署路径,数据库实例等的测试和生产构建。可能会改变。 Ant还包括流量控制(如果等)

我见过蚂蚁的一些事情:

  • 编译代码
  • 使用版本控制签出最新版本或标记正在构建的版本
  • 运行sql脚本以构建或重建测试数据库
  • 从外部资源复制文件以包含在项目中
  • 将代码捆绑成jar,war或ear文件
  • 将Web应用程序部署到应用程序服务器
  • 重新启动应用程序服务器
  • 执行测试套件
  • 静态分析,即CheckStylePMD
  • 向团队发送电子邮件,提醒他们注意构建。
  • 根据构建中的信息生成文件。
    • 示例:我的应用程序中有一个jsp,它只显示版本/构建信息。它在我运行构建时由ant生成,生产运营团队在部署应用程序时检查此页面以确保它们已部署正确的构建。

答案 3 :(得分:8)

在许多大公司(可能还有一些较小的公司)中,您会发现生产代码不是由开发它的人构建的。相反,开发人员可以将他们的代码检查到源代码存储库并标记它。然后他们将这个标签提供给构建团队。

构建团队,在一个单独的(干净的)区域 - 可能在某个无头服务器上(即没有GUI) - 然后检查代码并运行构建脚本。构建脚本将完全独立于桌面环境/ IDE

这可以确保任何一个开发人员的计算机上没有任何东西“污染”构建。 (或者,更有可能的是,系统无需任何外部源控制!)

因此,您使用的大多数软件永远不会,永远从开发人员的桌面构建。

PS。您可能还想看看Continuous Integration

的想法

答案 4 :(得分:6)

简短的回答是Ant是一种创建完整项目构建的好方法,它独立于任何开发人员可能使用的任何特定工具。如果没有独立的构建,事情就会很快变得混乱 - 特别是对于大型项目团队而言。

现在,对于长期的回答......我被带入了几个项目而没有任何独立构建的感觉。在一个项目中,有一个人不是开发人员,负责构建和部署软件。他创建了147个单独的Windows批处理文件来编译每个EJB,每个servlet和每个客户端组件。此构建没有错误检查。所有日志消息(包括错误消息)都标准化了。他可以通过读取此日志来手动识别打印的异常或消息是正常的以及哪条消息是错误的。他还必须部署他刚刚构建的这个软件。由于存在多个负载平衡层,因此部署同样复杂。必须手动将每个模块放置在正确的位置,并设置选项以匹配下游和上游层。使用此方法构建和部署此软件至少需要3天时间。当然,只有这样才能确定构建是否“有效”。通常,在此期间之后,所有程序员都会争先恐后地调试构建。程序员会说我的模块在我的IDE中工作正常。我只需点击这样运行,看看?

实际上,各个软件模块通常都有效,但构建和部署非常无效。同样糟糕的是,任何人都可以将构建部署到多个环境同样困难。管理层会说,好的,你现在可以在我们的回归测试环境中使用这个版本。现在在这个其他环境中部署相同的构建,以便销售人员可以演示和发布软件。这应该很简单,但也需要至少2天,然后是“调试构建”期间。构建和部署从未简单且​​永远不准确。它确实减慢了项目的速度。

无论如何,我们用完整的基于Ant的构建和部署机制替换了整个过程。最终结果是可以在不到30分钟的时间内创建和部署完整的构建,完全自动化。管理构建和部署的QA人员可以保留一个白板,其中包含哪个环境部署到哪个环境以及哪个组正在使用该环境。这是旧系统无法实现的。

答案 5 :(得分:5)

Ant用于自动化软件构建过程:

http://en.wikipedia.org/wiki/Apache_Ant

答案 6 :(得分:4)

Ant允许CRISP(完整,可重复,信息丰富,可调度,可移植)构建。您可以通过Mike Clark和他的书presentation在此Pragmatic Project Automation中找到有关它的精彩信息。

答案 7 :(得分:2)

Ant是一个构建工具,类似于makefile(尽管XML中的语法非常不同)。如果您只使用Eclipse,那么可以坚持使用它,您可以随时将Ant构建文件转换为Eclipse项目(如果我没记错的话,那么Eclipse的启动配置就相当于Ant的构建目标)。

如果要部署应用程序的源代码并允许其他人轻松构建或设置它,那么使用Ant自动执行该操作可能不是一个坏主意。但对于用户而言,这通常不是一致的经验,或者至少我没有就目标应该达到什么目标以及到目前为止所做的事情达成共识。

Ant也可用于常规自动构建(你不想每晚都在Eclipse中运行,对吧?: - ))

答案 8 :(得分:2)

如果有一个接近你,我认为你会从CITCON,持续集成和测试会议中获得很多。您可以与很多人讨论应用于构建和测试软件的自动化的好处。

基本上人们使用Ant(使用其他工具)来自动化他们想要在提交后发生的一切。这种自动化的基本优势是更快,更好,更便宜。

更快因为事情会立即发生,而无需等待人类绕过它。

更好因为计算机真的很擅长每次都以同样的方式做同样的事情。 (人类往往会嗤之以鼻。)

更便宜因为你的错误更少,而且发生的错误会更快被发现,因此修复起来会更便宜。

答案 9 :(得分:0)

您还指“”Export ant buildfile“。

如果您编写自己的Ant脚本以在eclipse之外构建应用程序,则可以编写自己的目标,使用Ant task委派给生成的 build.xml

此外,您可以配置项目的“构建者”project properties » Builders),以便在手动或自动构建项目时运行所需的任何脚本(ant或其他)。

答案 10 :(得分:0)

Joel(Spolsky)对“乔尔测试”进行了a great article。他们中的许多人围绕着能够经常,快速和可靠地做重要事情。其中一件事是你的构建。

答案 11 :(得分:-1)

Eclipse正在使用ant来构建,运行,部署......

“Ant是一个基于Java的构建工具。从理论上讲,它有点像Make,没有Make的皱纹和纯Java代码的完全可移植性。” (来自link text