Buildr,Gradle还是等待Maven 3?

Ste*_*vik 60 maven-2 gradle buildr maven-3

我真的厌倦了一直与Maven 2挣扎.构建工具不应该妨碍.最近我一直在关注Buildr和Gradle.Maven 3似乎解决了一些困难.那么,我现在该怎么办?Buildr?摇篮?还是等一年Maven 3?

Ric*_*ler 47

没有构建系统是一个神奇的子弹.我发现Maven解决的问题多于它对我的影响,但我很乐意编写插件来解决它的缺点,我也处理了数百个项目,所以Maven的继承和依赖处理对我很有帮助.

浏览SO一点,你会看到Buildr和摇篮双方也有问题(相同的蚂蚁和常春藤),通常你的交易一组问题,另一个和它找到最痛苦的情况.

是否有任何特别困扰你的Maven或者它是一般的痒?如果是很值得期待的一个具体问题上吉拉Maven的3个问题,如果这个问题不解决,就可以提高它,否则有可能会小点,在你等待

  • 而不是排除我添加具有"提供"范围的依赖项,因此它不会显示在类路径或WAR中.它仍然会在编译类路径上,但只要您不在代码中使用commons-logging就可以了. (9认同)
  • 最新版本的Gradle远不如Maven那么冗长和灵活.我同意Buildr和Gradle也存在问题,但对我而言,归结为这一点:所有三个工具中的简单易事都很容易,但Gradle在执行大多数构建需要执行的自定义操作时似乎比Maven更灵活最终. (8认同)
  • 你可以排除传递依赖,虽然它有点笨拙,看看这个页面:http://docs.codehaus.org/display/MAVENUSER/Dependency+Mechanism (2认同)

Ste*_*ver 47

Maven 3的Maven谱系背后的人们总是认为项目构建是同质的,即:所有构建问题从根本上归结为同样的问题.面对相反的观点,这种世界观可以相当一致,但需要付出代价.Maven中缺少脚本逻辑("当你想要脚本时,你知道你做错了什么"),繁琐的插件API("没有普通的Maven用户应该想要编写插件")和中央存储库("我们都具有相同的依赖性")是这个总体假设的所有证明.

在现实世界中,构建问题是异构的,因为人们出于各种各样的原因构建软件.他们都像我们所有'钻孔'一样"发展",偶尔解决独特的问题.无论您的抽象级别如何,在比较任意构建问题时,您总会发现相似之处.这些相似之处和对差异的谴责是Maven设计的垮台以及它为什么会引起如此大的抨击的原因.基本上,Maven的前景是专制和乌托邦.

PS:Maven具有很好的功能,例如配置约定和使用存储库的想法(Maven实现这个想法很麻烦).

  • 在您在团队环境中工作之前,您无法理解现场maven repo/proxy的重要性,并且您需要追逐人们以找出他们正在谈论的罐子.一个'第三方'回购,人们可以上传罐子意味着每个人都会玩相同的玩具. (9认同)
  • 在与Maven 3合作一年后,这总结得非常好.基本上,如果您的构建问题与Maven认为您应该运行的方式一致,那么您将度过一段美好的时光.一旦你做任何远程智能或定制的事情,它会让你用血来付钱.我不讨厌它,但它不像我认为的那样灵活. (7认同)
  • 我使用Groovy编写非常复杂的Maven构建脚本.我还有一些最独特的版本 - 我用Maven构建书籍.POM很容易理解. (5认同)
  • @steven:为什么maven被设计破坏的重要概要.正如其他一些人说的那样:热爱maven的人,热爱它的理论; 讨厌maven的人,讨厌现实! (3认同)

Dav*_* W. 18

我们在这里使用Maven,但是我发现一旦你超出了一个简单的项目,pom.xml开始变得越来越复杂.你开始花费大量时间来解决如何配置你的pom来做你想做的事情,以及如何解决各种问题.

真正让我感动的是我们正在建造的耳朵.我们在那个ear文件中有多个战争,而Maven通常会将这些库包含在战争中.但是,为了减少战争的规模,并使罐子保持不变,我们希望将战争之间的罐子放在耳朵的lib目录中.

不幸的是,Maven并没有很好地处理这个问题.我们需要为每个战争的poms手动配置它,然后将所有这些依赖项添加到耳朵的pom中.

在另一个项目中,我们有基于HTML的帮助文件.编写帮助的人在Microsoft Word中编写它们然后使用程序将它们转换为HTML.单个字符更改可以在数百个文件中产生混响.

为了解决这个问题,我们的帮助系统作为单个压缩文件存储在我们的源存储库中.当我们的文档团队创建一组新的帮助文件时,他们会将其压缩并替换存储库中的文件.

因此,我的部分构建解压缩此文件并将其置于战争中.在Ant中很容易做到,除非你使用Antrun插件允许你编写Ant代码来处理Maven在没有完整插件的情况下无法处理的问题,否则不能在Maven中执行.

我可以看到Maven在做什么,但理论领先于现实.我发现Ivy和Ant可以完成Maven所做的大部分依赖性检查,而没有编写和维护poms的所有问题.

如果您还没有使用Maven,请首先尝试使用Ivy Ant.然后,当Maven 3出来的时候,尝试一下.我记得从Maven 1到Maven 2的过渡.它们彼此完全不兼容,你使用Maven 1学到的任何东西都已经过时了.在Maven 2中学习和重做你的项目是很愚蠢的,突然发现自己为Maven 3重做了一切.

  • 您可以使用依赖插件来解压缩该zip. (2认同)

dfa*_*dfa 8

maven 3.x已嵌入IDE中(至少在netbeans上,请查看此链接以获取更多信息).今天你可以和maven 3.x一起玩,只需用netbeans构建一个Maven项目.

另一个好消息是,maven在IDE项目中集成EJB/WS获得了更多的"企业"支持(至少在netbeans上).

因此,我会坚持使用maven 2.x进行生产构建,并使用maven 3.x进行开发.

  • fwiw:m2eclipse和maven3由Sonatype并行开发. (2认同)

小智 5

Maven 2和3在各种项目中都非常适合我.我目前正在使用Maven 3 alpha 7,它运行得非常好,特别是与Eclipse Maven插件结合使用.

Maven在两个方向上与Ant无缝集成.在我当前的项目中,我们多次从Ant调用Maven以执行复杂的集成测试.同样,我们使用Ant通过Maven的AntRun插件,我们也编写了自己的Maven插件.顺便说一下,这只需几分钟就可以归结为写一个带注释的Pojo.

Maven因为许多开发人员不喜欢规则或惯例而受到很多抨击.很简单,没有人强迫你使用Maven.如果您想要最终的自由 - 无论如何 - 为您加入的每个项目重新编写自己的构建过程.但是,如果您想创建软件而不是在每个项目上使用定制的构建过程重新发明轮子,请选择Maven.

  • 你让它听起来像Maven或重新发明轮子之间的选择,但这是一个巨大的谬误.我今天在项目中使用的Ant构建文件几乎与我8年前使用的文件相同.它的轮子一直在滚动.相比之下,Maven是一个继续刺破的轮子.这不是因为开发人员不喜欢他们给Maven flak的约定.他们放弃了它,因为偶尔他们需要做一些非传统的事情. (3认同)