2009-06-09 34 views
9

我对基于Groovy的替代Ant的幻想破灭了。 AntBuilder不能在Eclipse中工作,Eclipse的Groovy插件令人失望,而且Gradle还没有准备好。使用Build.java替换build.xml - 使用Java和Ant库作为构建系统

Ant文档有一个标题为“在Ant之外使用Ant任务”的部分,它为如何使用Java代码中的Ant库提供了一个预告。还有一个例子在这里:

http://www.mail-archive.com/[email protected]/msg16310.html

理论上它似乎很简单与Build.java替换build.xml文件。 Ant文档暗示了一些我不得不发现的未公开的依赖关系(从Java内部使用Ant的角度来看,这没有证明)。

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

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

+0

为什么你不认为Gradle已经准备好了? – tronda 2009-06-30 11:28:29

+0

+1我正在考虑这样做。蚂蚁紧身衣很累人。 – amarillion 2009-10-27 11:20:43

+0

对于任何关注此事的人...有一个更广泛的讨论与一些更多的信息在这里: http://ant.1045680.n5.nabble.com/Replacing-build-xml-with-Build-java-Doing-Ant-直接构建Java-td1354956.html – ricosrealm 2012-02-10 17:59:41

回答

7

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

可能需要一些粘贴Ant XML来完成像编译构建脚本本身,并实际调用java来执行构建,但它很小。

不仅Java比Ant更具可读性,尤其是在涉及条件执行的情况下,但速度更快。我们的基于Ant的构建过去需要花费一分钟左右来组装一个EAR,现在基于Java的版本大约需要5秒钟。

0

虽然我认为它是可能的,但你可能会更好地使用shell脚本,然后编写一个完整的java程序来简化自动化构建。

你会错过蚂蚁的关键用途之一,它是易于指定的文件集并易于阅读属性。

由于Groovy太接近编写整个应用程序来构建真正的应用程序,所以我坚持使用ant。麻烦太复杂了。

+0

有时Ant build.xml文件确实成为他们自己的子项目。构建可能很复杂,对于xml来说太复杂了。 – 2009-06-10 03:14:28

2

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

Ant当前支持使用BeanShell,Groovy和其他一些脚本的内联脚本,这可以真正帮助减少对此的需求。

编辑:为了回应Dean的多个评论,如果你的构建严格地包含一个很长的过程,那么确实你不需要ant的构建脚本。然而,构建脚本的强大之处在于,它确保依赖关系只允许执行一次,同时允许多个入口点,如果您自己创建入口点,那么这些远不是微不足道的。

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

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

+0

没有鸡和鸡蛋的问题。从Eclipse内部或您使用的任何IDE构建并执行Build.java。 Ant

2

重要的一点似乎已经迷失在这里。

Ant是用Java编写的,而我正在寻找的是使用Ant任务(Ant库中的API)比通过xml更好的方法。对我而言,我看不到如何使用xml来调用Java比使用Java来调用Java更好或更容易。

其中一个障碍是xml方法被记录,而Java方法没有记录,所以我必须下载并熟悉Ant代码。

因为我确信有人曾经这么做过,并且我的google-foo只是需要改进,所以我拒绝发布这个问题几个星期。使用Java调用Ant API而非xml看起来非常明显,我仍然感到惊讶的是,没有为Ant开发的基于Java的并行方法以及xml方法。但是,仅仅因为它很明显并不意味着以前有人做过。