【问题标题】:What are some good java make utilities?有哪些好的 java make 实用程序?
【发布时间】:2010-09-15 05:16:42
【问题描述】:

我正在寻找用于构建大型 Java 程序的 make 实用程序。我已经知道 ANT,但想看看还有什么可用的。

理想情况下,它应该能够处理破坏 GNU Make 的 .java->.class 包目录怪异。

Win32,但跨平台是加分项。

编辑: 我看到了使用 ANT 的一些缺点,这就是为什么我想查看其他选项的原因,尽管我可能最终还是会使用它,只是因为它有效。

  • 需要重要的 XML 生成文件,“HelloWorld”已经有 25 行,任何更合理的程序都会很快变大。
  • 为我解决了所有错误的问题。
    • ant 使编写 jar 和 javac 命令行更容易,更容易生成清单,更容易指定 .java 源文件,更容易指定 jvm/java 属性,更容易编写自定义构建工具。
    • ant 并没有使 java 类依赖更容易,而且似乎没有更强大的变量系统,这两个问题通常都可以通过 make 实用程序来解决。

我会使用 gnu make,但它无法确定带有包声明的 .java 文件的 .class 文件将在哪里结束。

【问题讨论】:

    标签: java ant makefile


    【解决方案1】:

    Ant 和 Maven 绝对是两个标准。如果你已经熟悉 Ant 并且想要 Maven 自带的依赖管理,你可以看看Ivy。

    Ant 和 Maven 都缺乏的一点是构建脚本中的真正控制结构。您可以为 Ant 下载一些插件来提供这种控制,但是(同样,如果您已经熟悉 Ant)您可以查看 Gant,它是 Ant 的 Groovy 包装器。

    【讨论】:

      【解决方案2】:

      如果您正在开始一个新项目,您可能需要查看maven。一开始有点难,但它会为你处理一堆东西,包括依赖项。

      如果你已经有一个项目要为制作一个构建文件,那么除了前面提到的ant之外,我没有任何建议。

      【讨论】:

        【解决方案3】:

        忘记蚂蚁!!

        如果你问我,Apache Maven 是要走的路。

        我最喜欢的功能是它内置在依赖管理中。 这意味着您不必将第 3 方 JAR 签入您的源代码控制项目。

        您在 maven POM(项目对象模型 - 它基本上是您项目的 XML 描述)中指定您的依赖项,然后 maven 会自动下载、编译它们并将它们与您的应用程序打包。

        其他非常好的功能是: 发布管理和分发出版物 - 使用 Maven 控制台命令执行发布。此功能将在源代码管理中标记您的代码库。签出一个干净的副本,构建它并打包它以进行部署。第二个命令会将其上传到您的存储库以分发给其他最终用户。

        已经使用 maven 的大型且不断增长的库存储库 - 每个 Apache 项目都使用 maven。装载更多也在船上。 See for yourself, here's the main repo

        能够托管您自己的存储库。 - 您可以在其中发布自己的构建,也可以上传其他公共存储库中不存在的 JAR(如大多数 SUN jar)

        【讨论】:

        • 如果您正在做任何有价值的事情,您必须使用 Maven 托管您自己的存储库,否则您会遇到多个单点故障(其他人的存储库)。此外,Maven 的文档……缺乏。
        • 它有其粗糙的边缘,但最后我发现 maven 是迄今为止最好的 Java 构建工具/依赖管理器。如果不是maven,前段时间我早就被java逼疯了。
        【解决方案4】:

        这与其说是一个问题,不如说是一个答案。 ANT 是构建 Java 的标准方式。它适用于 Java、无数的 Java 工具以及 Cruise Control。那你为什么要尝试其他的呢?

        除非您有 ANT 无法覆盖的边缘情况,否则我建议您坚持使用 ANT。

        当然,我很乐意让知识渊博的人指出为什么我的态度是愚蠢的,以及为什么有一个很好的理由来寻找替代方案;)

        【讨论】:

        • ANT 太重了,XML 很粗糙,几乎不可能避免重建所有内容。
        • Ant 给出了构建一切的命令,但那是因为 javac 足够聪明,不会这样做。当然 XML 很丑陋,但如果我不想看,我就不必看它。我可以选择让我的 IDE 处理它,或者我可以选择自定义它。
        • 所以基本上 ant 的优点是你不用看它,它也不必真正智能地构建你的项目。坦率地说,我可以用脚本做到这一点。
        【解决方案5】:

        如果您想要相当轻量级的东西,另一种选择是scons。我用了一点,发现它很容易理解,特别是如果你已经知道 python 语法的话。另一个选项是maven,但无论如何不简单。但是,它确实提供了许多附加功能,例如帮助管理文档。但是,我不会将其称为替代品;)

        【讨论】:

          【解决方案6】:

          蚂蚁多年来一直是领导者。但是它的 build.xml 是基于 xml 的,它非常冗长。依赖管理可以通过与ivy耦合来实现。

          ma​​ven 努力提供 ant+ivy 串联所提供的开箱即用的功能,它在工作时很好。如果它停止这样做,并且您必须找出它与依赖管理相混淆的地方,那么它很可能是您能想象到的最糟糕的地狱。它也是 pom.xml... 是用 xml 编写的。

          sbt 是皇家 scala 构建工具,使用 ivy 进行依赖管理,构建文件以 scala DSL 编写。相当成熟,但scala方言可能不是你喜欢的。

          buildr 构建文件在 ruby​​ 中指定。与 maven 存储库兼容,并带来它自己的依赖管理。 Ant 集成也在那里。

          gradle 使用 groovy 构建文件。除了 maven 或 ivy 支持之外,在过去使用 ivy 并且不满意之后,它现在拥有自己的依赖管理器。无缝蚂蚁集成。拥有迄今为止最简单的语法。


          ant, ivy, maven, buildr 都是 apache 项目。


          TL;DR

          检查gradle 或buildr。

          【讨论】:

          • 不错的相当全面的列表,谢谢。我会看一下 gradle,可能会简要介绍一下 sbt。
          【解决方案7】:

          jmk。它很原始,但非常小,您可以将其嵌入到源 .tar.gz 文件中而几乎不会改变其大小。

          【讨论】:

          • 看到了 JMK,但不知道它是否应该替换 make,或者它是否用 java 做的事情比 make 通常做的更智能。有经验吗?
          • 它几乎可以直接替代 make 并且具有类似的功能集。要解决您的目录问题,您需要一些能够解析 java 源代码的东西。
          • 对。对于 C 编译器,有一些参数可以正确生成依赖项,以与构建相同的方式解析路径。理想情况下,javac 会具有相同的功能。
          【解决方案8】:

          除非 Maven 最近确实有所改进,否则我会避开它。除非你有某种怪物“多项目”,当然有无数的依赖。

          在尝试做最简单的事情(例如通过 FTP 将war 文件传输到服务器)时,在厌倦了查看完全无用和无用的错误之后,Maven 被扔掉了,Ant 尘土飞扬。从那以后我再也没有回头。

          【讨论】:

            【解决方案9】:

            嗯,很明显,有经典的 make(make、gmake、nmake)实用程序,还有(我认为)一些用 Ruby 或 Python 编写的构建系统。它们不是特定于 Java 的,而只是可编写脚本的构建系统。

            但 ANT 在 8 到 9 年的时间里一直处于领先地位,就基础而言,它很容易上手。

            过去,make from 对于编译 java 来说特别糟糕,因为它通常会为每个文件单独调用 javac 编译器。 ANT 不会因此受到影响,并且也许可以修改 make 以不这样做。但正是 ANT 的元素之一让它如此受欢迎。简直太快了。

            我很欣赏 ANT 可能不是完美的解决方案,但它确实很实用。

            【讨论】:

            • 可以告诉 GNU Make 一次构建多个文件,使用 + 目标语法,可以通过编程方式构建。也可以指定一个类似库的目标,它只重建已更改的源文件,但全部在一个命令行上。
            • 大多数其他 make 实用程序也是如此,仅供参考
            【解决方案10】:

            我从Ant 转换为Maven 2,从那以后就再也没有回头。 Ant 和 Maven 2 种不同的构建方式。使用 Ant,您将提供有关如何构建事物的说明。而使用 Maven 2,您可以告诉它您想要构建什么。如果您有一个现有的 Ant 构建,xml,您可以通过将其包装在 Maven 2 pom.xml 中来重构您构建的第一步。

            【讨论】:

              【解决方案11】:

              1) ant + ivy 如果你有对 ant 的现有投资,那是相当不错的。您不必仅仅为了依赖项而从 ant 迁移到 maven。

              2) gant 和 ant:他们如何比较:http://java.dzone.com/articles/ant-or-gant-part-1

              3) http://www.gradle.org/ -- 使用 groovy!

              BR,
              ~A

              【讨论】:

                【解决方案12】:

                我喜欢将 ant 与 ant4eclipse 一起使用。这使我可以在 eclipse 中设置依赖项,在 eclipse 中进行开发构建和测试,并使用 ant 进行持续构建。

                【讨论】:

                • 这是一个很好的解决方案,但我更喜欢更独立的东西。
                【解决方案13】:

                我一直在使用 ANT。这是因为我使用 Google Web Toolkit (GWT) 开发 Web 应用程序,它具有将客户端 java 编译成 java 脚本的额外步骤。有了 ant,我只需要知道 GWT 是如何工作的,然后我自己编排构建。使用 maven,我必须等到有人写插件。或者我自己写一个。有可能会出现其他不遵循通常约定的框架和工具。我不必一直寻找 maven 插件。有了 ant,我可以以透明的方式做任何我想做的事情。我也喜欢编写 xml 文件。 (我必须这样做,因为我必须编写几个 - web.xml、application.xml、persistence.xml、SqlMap.xml、dataset.xml 等。我的观点 _ XML 是你必须学会​​喜欢的一件事)

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2020-12-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-04-21
                  • 2016-01-20
                  • 2011-03-28
                  • 1970-01-01
                  相关资源
                  最近更新 更多