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

22
我经常听到“ant”的提及,但不太明白它的作用是什么?据我所知,它应该是用来编译项目的,但我不是可以在Eclipse中点击运行->运行来完成这个任务吗?
编辑:我想我应该重新表述我的问题。我已经知道ant是一种“构建自动化软件”,我的问题是,什么是构建自动化?我认为你应该测试你的应用程序,在它运行时通过Eclipse或命令行Java点击“构建”按钮,然后它会将其制作成.jar文件?那么为什么需要“自动化”这个过程呢?

更改了标题,因为Click Upvote似乎更多地寻找关于构建自动化的信息,而不是特别是Ant。 - Dana
@Dana:您更改标题的方式使这成为完全不同的问题。这并不反映最初“点击 Upvote”的意图。 - OscarRyz
我认为这反映了他的意图,但如果不是,他总是可以回退。 - Dana
也许中间某个位置比较好? - OscarRyz
检查我的编辑的方法。没问题 :) 干杯! - OscarRyz
我喜欢修改后的标题,它正是我所想要的。 - Ali
12个回答

24
我已经知道ant是一种“构建自动化软件”,我的问题是,什么是构建自动化?我认为你应该测试你的应用程序,当它运行时,你在eclipse中点击“构建”按钮或通过命令行Java,它会生成一个.jar文件。那么为什么需要“自动化”这个过程呢?
并非所有Java开发都是通过eclipse完成的,也不是所有的jar包都可以通过命令行构建(或应该使用命令行构建)。
您可能还需要运行测试用例、单元测试和许多其他过程。
Ant所做的就是提供一种机制来自动化所有这些工作(以便您不必每次都手动完成),或者您可以每天下午6点调用此Ant脚本。例如,在某些项目中,需要进行每日构建,以下是可以使用Ant自动化的任务,从而无需人工干预:
- 连接到Subversion服务器。 - 下载/更新最新版本 - 编译应用程序 - 运行测试用例 - 打包应用程序(在jar、war、ear或任何其他格式中) - 将此构建的二进制文件提交到Subversion。 - 在远程服务器上安装应用程序 - 重新启动服务器 - 发送带有作业摘要的电子邮件。
当然,对于其他项目来说,这样做可能过度,但对于其他一些项目来说,这非常有帮助。

17

rogeriopvl是绝对正确的,但是回答你的“我不能只需在Eclipse中点击运行->运行吗?”的问题:这对于你自己正在工作的项目来说是可以的,而且不需要在多个环境中进行可重复的、可编写脚本的构建。

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


2
稍微扩展一下。除非你是单个开发人员,否则在IDE中构建“生产”构建是一个坏主意。不同系统上的某些人可能具有不同的路径、jar、版本等。Ant提供了一个系统独立的构建,通常包括单元测试、源标记等内容。 - Chris Kessel

11

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

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

我看过Ant完成以下一些任务:

  • 编译代码
  • 使用版本控制检出最新版本或标记正在构建的版本
  • 运行SQL脚本以构建或重建测试数据库
  • 从外部资源复制文件以包含在项目中
  • 将代码捆绑成jar、war或ear文件
  • 将Web应用程序部署到应用服务器
  • 重新启动应用服务器
  • 执行测试套件
  • 静态分析,例如CheckStylePMD
  • 向团队发送电子邮件以通知构建状态。
  • 基于构建信息生成文件。
    • 例如:我的应用程序中有一个仅显示版本/构建信息的JSP。在运行构建时,它由Ant生成,并在部署应用程序时由生产操作团队检查此页面以确保他们已部署了正确的构建。

8
在许多大公司(以及可能一些小公司)中,你会发现生产代码并不是由开发人员构建的。相反,开发人员可能会将其代码检入源代码存储库并进行标记。然后将此标记交给构建团队。
构建团队在一个单独的(干净的)区域 - 可能在某个无头服务器上(即没有 GUI) - 然后检出代码并运行构建脚本。构建脚本将完全独立于桌面环境/IDE。
这确保了任何位于任何一个开发人员计算机上的内容都不会“污染”构建过程。(或者更有可能的是,系统工作所需的内容都在源代码控制之内!)
因此,你使用的大多数软件永远不会从开发人员的桌面构建而成。
附:你可能还想看看持续集成的概念。

这个答案非常有帮助。在阅读这个答案时,我脑海中浮现出一些问题。 - muneeb_ahmed
作为一名Java开发人员,我不想在我的项目中使用任何构建自动化工具(例如Ant、Maven或Gradle)。那么,我应该学习哪种编程语言来构建自动化工具呢? - muneeb_ahmed

6
简短的答案是Ant是创建完整项目构建的好方法,它独立于任何开发者可能使用的特定工具。 没有独立的构建,事情很快就会失控 - 特别是对于大型项目团队来说。
现在详细回答一下... 我参与了几个没有任何独立构建概念的项目。 在一个项目中,有一个非开发人员被指派构建和部署软件。 他创建了147个单独的Windows批处理文件来编译每个EJB,每个servlet和每个客户端组件。 对于此构建,没有错误检查。 所有日志消息,包括错误消息都发送到标准输出。 需要手动阅读该日志以识别哪个异常或信息打印是正常的,哪个是错误的。 他还必须部署这个软件。 部署同样复杂,因为有几个负载平衡层。 必须将每个模块手动放置在正确的位置,并设置选项以匹配下游和上游层。 使用此方法构建和部署此软件至少需要3天时间。 当然,在此期间之后,任何人才能确定构建是否“有效”。 通常,在此期间之后所有程序员都将争相调试构建。 程序员会说我的模块在我的IDE中工作正常。 我只需像这样点击运行,看到?
实际上,单个软件模块通常都是可以工作的,但构建和部署效率极低。 同样糟糕的是,任何人都无法将构建部署到多个环境中。 管理层会说,好吧,现在你们已经在我们的回归测试环境中使这个构建工作了。 现在在另一个环境中部署同一构建,以便销售人员可以演示即将推出的软件。 这应该很简单,但需要至少2天时间,随后进行“构建调试”期。 构建和部署从来都不是简单而准确的。 这真的拖慢了项目的进展。
总之,我们用完全基于Ant的构建和部署机制替换了整个过程。 最终结果是可以在不到30分钟内自动创建和部署完整构建。 管理构建和部署的QA人员可以保持白板,其中列出了哪个环境中具有哪个构建,并且哪个组正在使用该环境。 在旧系统中,这是不可能的。

5

12
当有人在维基百科上发布答案链接时,我很讨厌。难道你不觉得在我发帖之前我就已经检查过了吗? - Ali
2
@Click:不一定-在您的原始问题中确实没有证据表明这一点。根据标题回答问题的答案是“自动化构建过程”。鉴于“点击按钮”并不是自动化,我无法看出这个答案有什么不好。 - Jon Skeet
1
@ClickUpvote:不要无礼。如果你提出问题,这意味着你拥有的信息不足。别人怎么知道你的基础知识是什么。如果你已经阅读了http://www.catb.org/~esr/faqs/smart-questions.html,你应该知道在问题中加入你尝试过的内容。 - Sunny Milenov
@Click: 你说过你经常“看到Ant的引用”,但这并不等同于知道它是一个构建自动化工具。你说你知道它可以编译项目,但构建不仅仅是编译。如果你不能充分解释好问题,那是你的问题,而不是回答者的问题。 - Jon Skeet
这也是“参见”下的第一个引用……如果你真的感兴趣,那么并不难找到。 - Jon Skeet
显示剩余5条评论

4

Ant可以实现CRISP(完整、可重复、信息丰富、可调度、可移植)构建。您可以在Mike Clark的演示文稿和他的书《务实的项目自动化》中找到有关此主题的详细信息。


2

Ant是一种构建工具,类似于makefile(尽管其语法在XML中有所不同)。如果您只使用Eclipse,那么坚持使用它就可以了,您始终可以将Ant构建文件转换为Eclipse项目(如果我记得正确的话,Eclipse的启动配置相当于Ant的构建目标)。

如果您想部署应用程序的源代码并允许其他人轻松地构建或设置它,那么使用Ant自动化处理可能不是一个坏主意。但通常对于用户来说这不是一致的体验,至少我还没有看到关于应该存在哪些目标以及执行什么操作的共识。

Ant也可以用于定期自动构建(您不想每晚都在Eclipse中运行吧? :-))


2
如果你身边有一个 CITCON,我认为你会从中获得很多收益,这是一场持续集成和测试会议。你可以与许多人交流自动化应用于构建和测试软件的好处。
基本上,人们使用 Ant(以及其他工具)来自动化提交后想要发生的所有事情。这种自动化的基本优势是更快、更好、更便宜。
更快,因为事情会立即发生,不需要等待人类处理。
更好,因为计算机非常擅长每次以相同的方式执行相同的任务。(人类往往做不到这一点。)
更便宜,因为出错的次数更少,出现的错误也会更快地被发现,因此修复起来更便宜。

0

您还在引用 ""导出ant构建文件".

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

此外,您可以配置项目的“构建器”项目属性»构建器),以在手动或自动构建项目时运行任何脚本(ant或其他)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接