9

我对基于 Groovy 的 Ant 替代方案感到失望。AntBuilder 不能在 Eclipse 中工作,Eclipse 的 Groovy 插件令人失望,而 Gradle 还没有准备好。

Ant 文档有一个标题为“在 Ant 之外使用 Ant 任务”的部分,其中介绍了如何从 Java 代码中使用 Ant 库。这里还有另一个例子:

http://www.mail-archive.com/dev@ant.apache.org/msg16310.html

从理论上讲,用 Build.java 替换 build.xml 似乎很简单。Ant 文档提示了我必须发现的一些未记录的依赖项(从在 Java 中使用 Ant 的角度来看是未记录的)。

鉴于对 Ant 脚本的失望程度,我想知道为什么以前没有这样做过。也许它有也不是一个好的构建系统。

有没有人尝试使用 Ant 库在 Java 中编写构建文件?

4

6 回答 6

7

我们的构建系统主要基于您所描述的内容,并且确实运行良好。我们使用来自自定义 java 程序的 Ant 任务(尤其是文件操作任务),这些程序使用基于约定的应用程序模块布局的自动发现来组装应用程序。

可能需要一些胶水 Ant XML,来执行诸如自己编译构建脚本之类的事情,并实际调用 java 来执行构建,但这并不重要。

java不仅比Ant更具可读性,尤其是在条件执行方面,而且速度也快得多。我们以前基于 Ant 的构建需要一分钟左右的时间来组装一个 EAR,现在基于 java 的版本大约需要 5 秒。

于 2009-06-10T07:55:57.037 回答
2

鉴于 Java 已编译,这是一种鸡与蛋的问题。您需要构建您的 Build.java 来构建您的项目。

Ant 目前支持使用 BeanShell、Groovy 和许多其他工具编写内联脚本,这确实有助于减少对内联脚本的需求。

编辑:针对 Dean 的多条评论,如果您的构建严格包含一个漫长的过程,那么您确实不需要 ant 的构建脚本。然而,构建脚本的强大之处在于它确保依赖项只执行一次,同时允许多个入口点,如果你自己动手,这绝非易事。

如果您不喜欢 XML 格式,那么您并不孤单,ANT 的作者同意您的观点。但是,如果您对构建过程的看法可以从您的 IDE 作为其唯一启动点启动,我会说您的构建需求非常简单。

EDIT2:我赞成 skaffman 的回答,因为它直接说明了这个问题。在评论中,我们似乎同意该方法适用于程序构建,但不适用于声明性构建,并且您至少需要一点 ANT xml 才能让您的 Build.java 滚动,以避免鸡和鸡蛋问题。这似乎达到了问题的关键。

于 2009-06-09T21:50:27.637 回答
2

你有个好主意。Cliff Click 也有类似的想法:http: //blogs.azulsystems.com/cliff/2008/01/i-hate-makefile.html

如果您通过它,我建议您使其尽可能简单,这样您的构建系统就不需要[非平凡的]构建系统本身。

于 2009-06-10T01:16:36.830 回答
2

一个重要的观点似乎在这里丢失了。

Ant 是用 Java 编写的,我正在寻找一种比通过 xml 更好地使用 Ant 任务(Ant 库中的 API)的方法。在我的一生中,我看不出使用 xml 调用 Java 会比使用 Java 调用 Java 更好或更容易。

一个障碍是 xml 方法有文档,而 Java 方法没有文档,所以我必须下载并熟悉 Ant 代码。

我有几个星期没有发布这个问题,因为我确信以前有人做过,而且我的 google-foo 只是需要改进。使用 Java 来调用 Ant API 而不是 xml 似乎很明显,以至于我仍然对没有为 Ant 和 xml 方法开发的基于 Java 的并行方法感到惊讶。

但是,仅仅因为它很明显并不意味着有人以前做过。

于 2009-06-10T19:35:29.730 回答
0

虽然我认为这是可能的,但您可能最好使用 shell 脚本,然后编写一个完整的 java 程序来简单地自动构建。

您将错过 ant 的主要用途之一,即易于指定的文件集和易于阅读的属性。

我坚持使用 ant,因为 Groovy 太接近于编写整个应用程序而无法构建您的真实应用程序。太复杂的麻烦。

于 2009-06-09T21:26:29.680 回答
0

虽然在 Java 程序中使用 Ant 任务相当容易,但如果我是你,我可能会坚持使用 Ant 构建文件。如果您正在做一些 groovy 开发,如果 Eclipse 不能满足您的需求,那么您可能需要寻找其他地方(IntelliJ、NetBeans 等)。

于 2009-06-09T22:12:24.377 回答