【问题标题】:What is build automation software (for example, Ant)?什么是构建自动化软件(例如 Ant)?
【发布时间】:2010-10-11 06:39:01
【问题描述】:

我经常看到对 ant 的引用,但我不明白它到底是什么意思?据我所知,它应该编译你的项目,但我不能通过点击 Run->Run in eclipse 来做到这一点吗?

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

【问题讨论】:

  • 更改了标题,因为 Click Upvote 似乎更多地寻找有关构建自动化的信息,而不是特别是 Ant。
  • @Dana:您更改标题的方式使这是一个完全不同的问题。这并不反映“Click Upvote”的最初意图
  • 嗯,我认为这反映了他的意图,但如果不是,他总是可以恢复。
  • 也许中间有什么?
  • 查看我的编辑的方法。没关系 :) 干杯!

标签: java ant build-process


【解决方案1】:

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

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

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

ant 所做的是提供一种机制来自动化所有这些工作(因此您不必每次都这样做),也许您可​​以在每天下午 6 点调用这个 ant 脚本。

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

  • 连接到颠覆服务器。
  • 下载/更新到最新版本
  • 编译应用程序
  • 运行测试用例
  • 打包应用程序(jar、war、ear 等)
  • 将此构建二进制文件提交给 subversion。
  • 在远程服务器中安装应用程序
  • 重启服务器
  • 发送一封包含工作摘要的电子邮件。

当然,这对于其他项目来说是多余的,但对于其他一些项目来说非常有帮助。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 稍微扩展一下。除非您是单个开发人员,否则在 IDE 中构建“生产”版本是个坏主意。不同系统上的某个人可能有不同的 PATH、jar、版本等。Ant 提供了一个独立于系统的构建,通常包括单元测试、源标签等内容。
    【解决方案3】:

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

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

    我见过蚂蚁做的一些事情:

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

    【讨论】:

      【解决方案4】:

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

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

      这可确保任何一个开发人员的计算机上发生的任何事情都不会“污染”构建。 (或者,更可能的是,系统工作不需要任何外部源代码控制!)

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

      PS。你可能还想看看Continuous Integration的想法

      【讨论】:

      • 这个答案很有帮助。阅读这个答案时,我想到了一些问题。
      • 作为 java 开发人员,我不想为我的项目使用任何构建自动化工具(例如 ant 或 maven 或 gradle)。那么我应该为构建自动化工具学习什么编程语言?
      【解决方案5】:

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

      现在,长答案...我已经参与了几个项目,但没有任何独立构建的感觉。在一个项目中,有一个不是开发人员的人负责构建和部署软件。他创建了 147 个单独的 Windows 批处理文件来编译每个 EJB、每个 servlet 和每个客户端组件。此构建没有错误检查。所有日志消息,包括错误消息都进入标准输出。他可以通过阅读此日志来手动识别打印的哪些异常或消息是正常的,哪些消息是错误的。他还必须部署他刚刚构建的这个软件。部署同样复杂,因为有多个负载平衡层。每个模块都必须手动放置在正确的位置,并设置选项以匹配下游和上游层。使用这种方法构建和部署这个软件至少花了他 3 天的时间。当然,只有这样,任何人才能确定构建是否“有效”。通常,在这段时间之后,所有的程序员都会争先恐后地调试构建。程序员会说我的模块在我的 IDE 中运行良好。我就是这样点击运行,看到了吗?

      确实,各个软件模块通常都可以正常工作,但构建和部署却非常低效。同样糟糕的是,任何人将构建部署到多个环境都同样困难。管理层会说,好的,您现在可以在我们的回归测试环境中使用此构建。现在在这个其他环境中部署相同的构建,以便销售人员可以演示即将推出的软件。这应该很简单,但也至少需要 2 天,然后是“调试构建”期。构建和部署从来都不是简单和准确的。这确实减慢了项目的速度。

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

      【讨论】:

        【解决方案6】:

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

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

        【讨论】:

        • 我讨厌有人在维基百科上发布答案的链接。你不认为我会在我在这里发布之前检查过吗?
        • @Click:不一定-在您的原始问题中肯定没有证据。根据标题,问题的答案是“自动化构建过程”。鉴于“点击按钮”不是自动化,我看不出这个答案有什么不好。
        • @Click Upvote:小惊喜,但我同意@Jon Skeet;您的问题有缺陷,并且表明您甚至没有对该主题进行基础研究。 @regoeriopvl 的简洁而准确的回复当然不值得被打上攻击性的旗帜。
        • @ClickUpvote:不要粗鲁。如果你问一个问题,这意味着你所拥有的信息是不够的。一个人应该怎么知道你的基础知识是什么。如果您阅读过catb.org/~esr/faqs/smart-questions.html,您应该知道将您尝试过的内容放入问题中。
        • 我重新表述了我的问题,以便更好地解释我想知道的内容。
        【解决方案7】:

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

        【讨论】:

          【解决方案8】:

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

          如果您想部署应用程序的源代码并允许其他人轻松构建或设置它,那么使用 Ant 实现自动化可能不是一个坏主意。但对于用户而言,这通常不是一致的体验,或者至少我还没有看到太多关于应该有哪些目标以及到目前为止做什么的共识。

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

          【讨论】:

            【解决方案9】:

            如果您身边有一位,我想您会从CITCON(持续集成和测试会议)中获益良多。您可以与很多人谈论自动化应用于构建和测试软件的好处。

            基本上,人们使用 Ant(与其他工具)来自动化他们希望在提交后发生的所有事情。这种自动化的基本优势是更快、更好、更便宜。

            更快,因为事情会立即发生,无需等待人来处理。

            更好,因为计算机真的非常擅长每次都以同样的方式做同样的事情。 (人类往往会对此感到厌烦。)

            更便宜,因为你犯的错误更少,发生的错误被更快发现,因此修复成本更低。

            【讨论】:

              【解决方案10】:

              您还指的是“Export ant buildfile”。

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

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

              【讨论】:

                【解决方案11】:

                Joel (Spolsky) 在“The Joel Test”中有a great article。他们中的许多人都围绕着能够经常、快速和可靠地完成重要的事情。其中之一就是你的构建。

                【讨论】:

                  【解决方案12】:

                  Eclipse 正在使用 ant 构建、运行、部署……

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

                  【讨论】:

                  • Eclipse 在大多数任务中不使用 ant。 Netbeans 是一个使用 ant 处理一切的工具。
                  猜你喜欢
                  • 2010-09-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-11-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-12-30
                  • 2010-09-30
                  • 1970-01-01
                  相关资源
                  最近更新 更多