11

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

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

Win32,但跨平台是加分项。

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

  • 需要非平凡的 XML makefile,“HelloWorld”已经 25 行,任何更合理的程序都会很快变大。
    • ant 教程显示了 ant build.xml 文件的比较,这些文件与只运行所有 java 命令的大型 .bat 文件大致相同,只是时间更长。http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html,我已经有了其中之一。
    • Xml 意味着每一个依赖、变量、目标、规则和项目都有多余的东西,它只会让行变得难以阅读。尖括号税
  • 为我解决了所有错误的问题。
    • ant 使编写 jar 和 javac 命令行更容易,更容易生成清单,更容易指定 .java 源文件,更容易指定 jvm/java 属性,更容易编写自定义构建工具。
    • ant 并没有使 java 类依赖更容易,而且似乎没有更强大的变量系统,这两件事通常都可以通过 make 实用程序来解决。

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

4

13 回答 13

6

Ant 和 Maven 绝对是两个标准。如果您已经熟悉 Ant 并希望使用 Maven 附带的依赖管理,您可以看看Ivy

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

于 2008-10-04T00:16:45.407 回答
4

如果您正在开始一个新项目,您可能需要研究maven。起初有点难,但它为你处理了一堆东西,包括依赖关系。

如果您已经有一个项目要为其创建构建文件那么除了上述 ant 之外,我没有任何建议。

于 2008-10-03T23:27:36.910 回答
4

忘记蚂蚁!!

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

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

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

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

已经使用 maven 的大型且不断增长的库存储库 - 每个 Apache 项目都使用 maven。装载更多也在船上。自己看,这是主要的回购

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

于 2008-10-03T23:48:01.440 回答
2

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

除非您有 ANT 无法涵盖的边缘案例,否则我建议您坚持使用 ANT。

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

于 2008-10-03T23:27:49.920 回答
2

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

于 2008-10-03T23:28:46.470 回答
2

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

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

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

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

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


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


TL;博士

检查gradlebuildr

于 2013-08-11T10:22:56.253 回答
1

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

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

于 2008-10-04T09:41:04.503 回答
1

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

于 2008-10-04T00:47:37.250 回答
0

我一直在使用 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 是你必须学会​​喜欢的一件事)

于 2009-10-24T05:56:31.027 回答
0

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

但是 ANT 已经成为推动 8-9 年的领导者,就基础而言,它很容易上手。

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

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

于 2008-10-03T23:33:35.120 回答
0

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

于 2008-10-04T00:11:56.400 回答
0

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

于 2008-10-04T02:19:48.013 回答
0

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

于 2008-10-13T21:02:16.470 回答