build设者,Gradle或等待Maven 3?
我真的厌倦了与Maven 2一直苦苦挣扎。 build立工具不应妨碍。 最近我一直在看Buildr和Gradle。 Maven 3似乎解决了一些困难。 那么,我现在该怎么办? Buildr? 摇篮? 或等待一年的Maven 3?
没有构build系统是一个神奇的子弹。 我发现Maven可以解决更多的问题,但是我很乐意编写插件来弥补它的缺点,我也处理了数百个项目,所以Maven的inheritance和依赖处理对我来说是相当有帮助的。
浏览一下,你会看到Buildr和Gradle都有问题(对于Ant和Ivy来说也是一样的),一般来说,你正在为另一个问题交易一组问题,并且find一个最不痛苦的情况。
有什么特别的东西在困扰着你,或者是一般的痒吗? 如果这是一个特殊的问题,那么值得关注Jira上的Maven 3问题 ,如果问题没有解决,那么可以提出这个问题,否则可能没有什么意义
我不会对Maven 3有太多的期望。Maven构build工具谱系背后的人们一直认为项目构build是同构的,即:所有的构build问题从根本上归结为同一个问题。 面对对立的观点,这个世界观可以相当一致地持续下去,但是要付出代价。 在Maven中没有脚本逻辑(“当你想脚本你知道你做错了什么”),繁琐的插件API(“没有普通的Maven用户应该想写一个插件”)和中央存储库(“我们都具有相同的依赖性“)都是这个总体假设的certificate。
在现实世界中,构build问题是异构的,因为人们以各种各样的原因构build软件。 它们都像我们所有人一样“发展”,偶尔也会解决独特的问题。 无论您的抽象级别如何,在比较任意构build问题时总是会发现相似之处。 正是这些相似之处和对差异的谴责才是对Mavendevise的失败,以及它为何如此之大的原因。 基本上,Maven的观点是独裁和乌托邦式的。
PS:Maven具有很好的特性,比如convention-over-configuration和使用仓库的想法(Maven实现这个想法很麻烦)。
我们在这里使用Maven,但是我发现,一旦你脱离了一个简单的项目,pom.xml开始变得越来越复杂。 你开始花大量的时间来研究如何configuration你的pom来做你想做的事情,以及如何解决各种问题。
真正吸引我的是我们正在build设的耳朵。 我们在这个耳朵文件中有多个战争,而且Maven通常会把这些库放在战争中。 然而,为了减less战争的规模,并保持jar子都是一样的,我们希望将战争之间共享的jar子放在耳朵的lib目录中。
不幸的是,Maven处理得不好。 我们需要为每个战争的poms手动configuration这个,然后将所有这些依赖添加到耳朵的pom中。
在另一个项目中,我们有基于HTML的帮助文件。 编写帮助的人在Microsoft Word中写入,然后使用程序将其转换为HTML。 单个字符的变化可以在数百个文件中混响。
为了解决这个问题,我们的帮助系统作为一个压缩文件存储在我们的源代码库中。 当我们的文档团队创build一组新的帮助文件时,他们将其压缩并replace存储库中的内容。
所以,我的部分内容是解压缩这个文件,并把它放在战争中。 在Ant中很容易做到,除非你使用Antrun插件,它允许你编写Ant代码来处理Maven在没有完整的插件的情况下无法处理的问题。
我可以看到Maven在做什么,但理论超越了现实。 我发现,常春藤和ant可以做大部分的依赖检查,Maven没有任何编写和维护poms的问题。
如果您还没有使用Maven,请首先尝试使用Ivy的Ant。 那么,当Maven 3出来时,试试看。 我记得从Maven 1到Maven 2的过渡。他们完全不兼容,而你使用Maven 1学到的东西已经过时了。 在Maven 2中学习和重做你的项目会突然发现自己重做Maven 3的所有东西都是愚蠢的。
Maven 3.x已经embeddedIDE (至less在netbeans上,请查看这个链接了解更多信息)。 你可以用maven 3.x来玩,只需用netbeans构build一个Maven项目即可。
另一个好消息是,maven在集成IDE项目中的EJB / WS(至less在netbeans上)获得了更多的“企业”支持。
所以我会坚持maven 2.x生产版本和玩Maven 3.x的发展。
Maven 2和3在各种项目上都为我完美地工作。 我目前正在使用Maven 3 alpha 7,其工作得非常好,特别是与Eclipse Maven插件结合使用。
Maven与Ant无缝集成 – 在两个方向上。 在我目前的项目中,我们多次从Ant中调用Maven以执行复杂的集成testing。 同样,我们通过Maven的AntRun插件使用Ant,并且我们也编写了自己的Maven插件。 顺便说一句,这只是一个几分钟的事情,归结为写一个带注释的Pojo。
Maven因为许多开发人员不喜欢规则或惯例而受到很大的冲击。 很简单,没有人强迫你使用Maven。 如果你想要最终的自由 – 无论如何 – 为你join的每个项目重新编写自己的构build过程。 但是,如果您想要创build软件而不是在每个项目上使用定制的构build过程重新创build轮子,请转至Maven。
保持你的代码保持良好的状态,并将其分解成明确的模块,并在构build系统之间移植成为一个小问题。
到目前为止,maven-2是中间2/3项目的不错select。 真的很简单,ant还是可以的。 对于真正复杂的,maven-2和其他工具(如antrun)的混合是不可避免的。
不知道为什么你有maven-2的问题。
它与ant和buildr不同,它是描述构build过程的工具,而不是脚本。 复杂构build,具有多个dynamic部分和嵌套和/或瞬态依赖的构build难于构build,因为它们很难描述。
给格子https://github.com/hackingspirit/Lattice试试。; 我是作者。 这里是独家新闻:
在莱迪思构build文件不是用XML编写的,而是用Python语言编写的。 这个好处是更好的可读性和强大的命令性的Python构build脚本。 对于多模块项目。 Lattice使用拓扑sorting来决定构build每个模块的正确顺序。 还计划莱迪思将分析模块依赖性,以确定模块编译如何并行化。 莱迪思的源代码非常精简,目前它由大约500行的Python源代码组成。
我想抱怨Maven的人应该多花些时间来研究可用的插件。 为了回应抱怨Maven僵化,难以使用自定义构build逻辑/提供对构build过程的细粒度控制 – 我build议寻找Maven的Ant插件(实际上有几个,但这里是一个: http : //maven.apache.org/plugins/maven-antrun-plugin )。 多年来,我已经非常成功地定制了Maven构build它。 基本上,它允许你运行任何Ant命令作为Maven构build的一部分,并且你可以用Ant做任何事情;)
ant与常春藤做相同的依赖pipe理Maven(事实上,它使用Maven的整个依赖pipe理基础设施,包括相同的URL存储库),但没有所有的POMconfiguration混乱。
与常青藤的ant可能是一个处理依赖问题的方式,为真正不想使用Maven的人。 它解决了Maven想要解决的90%的问题。