将build.xml替换为build.java-使用java和Ant库作为构建系统

将build.xml替换为build.java-使用java和Ant库作为构建系统,java,ant,build-automation,build-tools,Java,Ant,Build Automation,Build Tools,我对基于Groovy的Ant替代方案已经不再抱有幻想。AntBuilder不能在Eclipse中工作,Eclipse的Groovy插件令人失望,Gradle还没有准备好 Ant文档中有一个标题为“在Ant之外使用Ant任务”的部分,该部分介绍了如何使用Java代码中的Ant库。这里还有另一个例子: 理论上,用build.java替换build.xml似乎足够简单。Ant文档暗示了我必须发现的一些未记录的依赖项(从Java中使用Ant的角度来看,这些依赖项是未记录的) 鉴于对Ant脚本的失望程度

我对基于Groovy的Ant替代方案已经不再抱有幻想。AntBuilder不能在Eclipse中工作,Eclipse的Groovy插件令人失望,Gradle还没有准备好

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

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

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


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

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

您可能会错过ant的一个关键用途,即易于指定的文件集和易于读入的属性


我一直坚持使用ant,因为Groovy离编写整个应用程序太近了,无法构建真正的应用程序。太复杂了,不需要麻烦。

考虑到Java是编译的,这是一个鸡和蛋的问题。您需要构建build.java来构建项目

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

编辑:作为对Dean多次评论的回应,如果您的构建严格地由一个长过程组成,那么您确实不需要ant的构建脚本。然而,构建脚本的强大之处在于,它确保了依赖项只执行一次,同时允许多个入口点,如果您使用自己的入口点,这一点绝不是微不足道的

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


编辑2:我对斯卡夫曼的答案投了赞成票,因为它直接说明了这个问题。在评论中,我们似乎同意这种方法适合于过程性构建,但不适用于声明性构建,并且您至少需要一点ANT xml来启动build.java以避免鸡和蛋的问题。这似乎是问题的症结所在。

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

您有一个好主意。Cliff Click也有类似的想法:


如果您使用它,我建议您尽可能地保持它的简单,这样您的构建系统就不需要一个[非琐碎的]构建系统本身。

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

您可能需要一些glue Ant XML来完成编译脚本本身之类的工作,并实际调用java来执行构建,但这并不重要


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

这里似乎忽略了一个要点

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

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

我有几个星期没有发布这个问题,因为我确信以前有人这样做过,我的GoogleFoo需要改进。使用Java来调用AntAPI而不是xml似乎太明显了,以至于我仍然感到惊讶的是,没有一种基于Java的并行方法像xml方法那样为Ant开发


虽然这很明显,但并不意味着以前有人做过。

对于任何给定的项目,Build.java文件不应该比Build.xml文件多。在大多数情况下,最高级别的Build.java就是所有的。我的想法是使用Java中的Ant,而不是xml文件中的Ant。到Cliff的博客的链接断了,但我在github上发现了一个来自Cliff的build.Java:没有鸡和蛋的问题。从Eclipse或您使用的任何IDE中构建并执行Build.java。Ant任务是强调xml构建不足的一个半度量。为什么要添加脚本而不是仅仅替换整个不合适的方法?通常,构建脚本必须在构建机器上运行,而不是从IDE运行。如果你想用一种不同的方法,那就用一种动态语言。编译语言不是合适的构建平台,IMO。正如skaffman在上面指出的,我仍然可以使用一个简单的build.xml文件来控制build.java的执行,这样就不会依赖IDE。我对IDE的评论是针对典型的开发周期使用。可以使用控制build.java的更简单的build.xml来处理多个启动点。我不明白为什么用xml控制依赖项比用Java更简单。Java和xml都调用底层Ant TA