有什么好的java make实用程序?

时间:2008-10-03 23:21:52

标签: java ant makefile

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

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

Win32,但跨平台是一个优势。

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

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

我使用gnu make,但它无法弄清楚包含声明的.java文件的.class文件最终会在哪里。

13 个答案:

答案 0 :(得分:6)

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

Ant和Maven缺少的一件事是构建脚本中的真正控制结构。你可以为Ant下载一些提供这种控制的插件,但是(再次,如果你已经熟悉了Ant)你可以看看Gant这是一个Groovy包装器。

答案 1 :(得分:4)

如果您要开始新项目,可能需要查看maven。这有点难,但它会为你处理一些包括依赖关系的东西。

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

答案 2 :(得分:4)

忘记ANT !!

如果你问我,

Apache Maven就是你的选择。

我最喜欢的功能是它内置于依赖管理中。 这意味着您不必将第三方JAR检查到源代码管理项目中。

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

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

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

能够托管您自己的回购。   - 您可以在哪里发布自己的版本,并上传其他公共回购中不存在的JAR(如大多数SUN罐子)

答案 3 :(得分:2)

这不是一个问题的答案。 ANT是构建Java的标准方法。它适用于Java,无数的Java工具和Cruise Control。那你为什么要尝试别的呢?

除非你有一个ANT没有覆盖的边缘案例,否则我建议你坚持使用ANT。

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

答案 4 :(得分:2)

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

答案 5 :(得分:2)

ant 多年来一直是领导者。但是它的build.xml是基于xml的,它是非常详细。可以通过将其与常春藤耦合来实现依赖管理。

maven 努力提供开箱即用的ant + ivy tandem所提供的功能,它很有用。如果它停止这样做,你必须找出它与依赖管理混淆的地方,它很可能是你能想象的最糟糕的地狱。它的pom.xml也是用xml编写的。

sbt 是皇家scala构建工具,使用ivy进行依赖关系管理,构建文件在scala DSL中编写。相当成熟,但斯卡拉方言可能不符合你的喜好。

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

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


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


TL; DR

检查gradlebuildr

答案 6 :(得分:1)

jmk。它是原始的,但是很小,你可以将它嵌入到源.tar.gz文件中,几乎不会改变它的大小。

答案 7 :(得分:1)

除非Maven最近真的有所改善,否则我会很清楚。除非你有某种怪物“多项目”,当然还有很多依赖。

在尝试做最简单的事情(比如将FTP war文件发送到服务器)时,看到完全无用且无用的错误后,Maven被扔掉了,而且Ant掉了下来。从那以后我没有回头。

答案 8 :(得分:0)

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

但是ANT一直是推动8到9年的领导者,而且从基础知识来看,它很容易上手。

在当天,为编译java而特别可怕,因为它通常单独为每个文件调用javac编译器。 ANT并没有受此影响,也许,make可能会被修改为不这样做。但它是ANT的一个元素,使它如此受欢迎。它很快。

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

1)如果你有蚂蚁的投资,蚂蚁+常春藤是相当不错的。你不必为了依赖性好东西而从ant转移到maven。

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

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

BR,
〜A

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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