另一种针对 Java 的构建工具到底能给我带来什么?

如果您使用 Gradle 而不是其他工具,为什么?

有帮助吗?

解决方案

我不使用摇篮在愤怒自己(只是一个玩具项目到目前为止)的 [作者表示他们已经使用摇篮上只有一个玩具项目到目前为止,没有那么摇篮是一个玩具项目 - 看评论] 的,但我要说的是一个会考虑使用它会因为挫折的原因Ant和Maven。

在我的经验Ant是往往只写(是的,我知道这是可能写的精美模块化,优雅的构建 S,但事实上很多人并不知道)。对于任何不平凡的项目变得令人费解,并采取非常谨慎,以确保复杂的版本是真正的便携。它的强制性质会导致配置复制之间架起(虽然宏能够帮助你在这里)。

的Maven采用相反的方法并期望用户完全使用Maven生命周期集成。有经验的蚂蚁用户发现这个特别的不和谐随着Maven删除许多你在蚂蚁有自由的。例如有一个 Sonatype的博客枚举许多Maven的批评和他们的响应。

在Maven插件机制,可以非常强大的生成配置和继承模型意味着你可以定义一小封装的构建配置为一体的企业和个别项目可以继承这些配置父POM中的,使他们轻巧。 Maven的配置是非常详细的(虽然Maven的三个承诺来解决这个),如果你想要做什么,是“不Maven的方式”,你必须写一个插件或使用哈克Ant集成。注意我碰巧喜欢写Maven插件,但认识到,很多人会反对所付出的努力。

摇篮承诺击中Ant和Maven之间的最佳平衡点。它采用常春藤的对依赖解析方法。它允许约定优于配置,而且还包括Ant任务作为头等公民。它还明智地允许您使用现有的Maven /常春藤库。

所以,如果你已经打了,结果被卡住任何蚂蚁/ Maven的痛点,它可能是值得尝试的摇篮了,但在我看来,这还有待观察,如果你不会只是进行交易的已知问题未知的。布丁的证明是在吃,但这样我会保留判断,直到该产品是多了几分成熟和其他人已经冰释前嫌是否有任何问题(他们称之为前沿的一个原因)。我仍然会在我的玩具项目,可以用它虽然,这是一件好事,知道的选项。

其他提示

摇篮可用于多种用途 - 这是一个更好的瑞士军刀比蚂蚁 - 但它是专门针对多项目建立

首先,摇篮是一个依赖编程工具这也意味着它是一个编程工具。随着摇篮,你可以在你的设置执行任何任务,随机和摇篮将确保所有申报依赖条件正确和及时的执行。您的代码可以在多个目录中的任何一种布局的传播(树平,散,...)。

摇篮有两个不同的阶段:评估与执行。基本上,在评估期间摇篮将寻找并评估它应该看的目录构建脚本。在执行期间摇篮将执行已期间评估考虑到任务间的依赖关系被加载任务。

在这些依赖编程的顶部设有摇篮通过与Apache常春藤一体化添加项目和JAR依赖性特征。正如你所知道的Ivy是一个自以为是的更强大和更依赖管理工具,不如说是Maven的。

摇篮检测项目之间和项目和JAR之间的依赖性。摇篮工程与Maven仓库(下载和上传)之类的ibiblio上一个或您自己的资料库,但也支持和其他类型的,你可能有仓库的基础设施。

在多项目建立摇篮既适应和适应构建的结构和体系结构。您不必到您的结构或架构适应您的构建工具,将与Maven是必需的。

摇篮试图努力不再让你的方式,努力的Maven几乎从不。公约是好的却又如此的灵活性。摇篮为您提供了更多的功能比Maven的做,但最重要的是在许多情况下,摇篮将为您提供一个无痛的过渡路径远离Maven的。

这可能有点争议,但 Gradle 并没有掩盖它是一种成熟的编程语言的事实。

Ant + ant-contrib 本质上是一种图灵完备的编程语言,没有人真正愿意用它来编程。

Maven 尝试采取相反的方法,尝试完全声明性,并在需要逻辑时强制您编写和编译插件。它还强加了一个完全不灵活的项目模型。Gradle 结合了所有这些工具的优点:

  • 它遵循约定优于配置(ala Maven),但仅限于您想要的程度
  • 它可以让您像在 Ant 中一样编写灵活的自定义任务
  • 它提供优于 Ant 和 Maven 的多模块项目支持
  • 它的 DSL 可以使 80% 的事情变得简单,使 20% 的事情成为可能(与其他构建工具不同,其他构建工具使 80% 的事情变得容易,10% 的事情成为可能,10% 的事情实际上不可能)。

Gradle 是我尚未使用过的最可配置、最灵活的构建工具。它需要预先进行一些投资来学习 DSL 和配置等概念,但如果您需要一个简单且完全可配置的 JVM 构建工具,那么它是很难被击败的。

摇篮很好地结合了Ant和Maven,同时从两个框架最好的。灵活性从Ant和约定优于配置,依赖关系管理和插件从Maven的。

所以,如果你想拥有一个标准的Java编译,就像行家,但测试任务必须做一些自定义步骤它可能看起来像下面。

<强>的build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

在的,它使用常规语法其给出更表达功率然后蚂蚁/行家的XML顶部。

这是蚂蚁的一个超集 - 您可以使用所有Ant任务的gradle中与漂亮,时髦的语法,即

ant.copy(file:'a.txt', toDir:"xyz")

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

我们使用的摇篮,并选择了它在Maven和蚂蚁。蚂蚁给了我们全面的灵活性和常春藤提供更好的依赖管理Maven的相比,但没有多项目构建的大力支持。你最终做编码,支持多项目建立了很多。也有一些构建按约定是好的,使构建脚本更加简洁。与Maven,需要按约定建立太远,和自定义您的构建过程将成为黑客攻击。此外,Maven的促进每一个项目发布的假象。有时候你不得不分成子项目项目,但你希望所有的子项目的兴建和版本一起。真的不是Maven是专为。

使用摇篮可以有蚂蚁的灵活性和通过的Maven的惯例建立。例如,它是琐细的与自己的任务延长了传统的构建生命周期。你不会被强迫使用一个约定,如果你不想。 Groovy是更漂亮的代码比XML。在摇篮中,可以定义本地文件系统上项目之间的依赖关系,而不需要发布的文物为每一个存储库。最后,摇篮使用常春藤,因此具有优良的依赖管理。对我来说,唯一真正的缺点迄今是缺乏成熟的Eclipse集成的,但Maven的选项是不是真的好多了。

这是没有的我的的答案,但绝对与我共鸣。这是一个从 ThoughtWorks的雷达技术从2012年10月

  

两件事情都造成疲劳与基于XML的构建工具等Ant和   Maven的:太多的愤怒尖括号和插件的粗糙   架构。虽然语法问题可以处理通过   代,插入式架构严重地限制了构建能力   作为项目变得更复杂的工具优雅地成长。我们已经走过   感觉到插件是错误的抽象水平,而喜欢   语言基础像摇篮工具和耙相反,因为他们提供   细粒度抽象和更大的灵活性长期

Gradle 将乐趣重新带回到构建/组装软件中。我的整个职业生涯都使用 ant 来构建软件,并且我一直认为开发工作中实际的“buildit”部分是一种不可避免的罪恶。几个月前,我们公司厌倦了不使用二进制存储库(又名将 jar 签入 vcs),我接到了调查此问题的任务。从常春藤开始,因为它可以用螺栓固定在蚂蚁的顶部,但没有太多运气让我构建的工件按照我想要的方式发布。我选择了 Maven,并使用 xml 进行了破解,在一些简单的辅助库方面表现出色,但在尝试捆绑准备部署的应用程序时遇到了严重的问题。在谷歌上搜索插件和阅读论坛花了相当长的时间,最终为我很难使用的各种插件下载了数万亿个支持 jar。最后我选择了 gradle (此时变得非常痛苦,并且很恼火“它不应该这么难!”)

但从第一天起我的心情就开始好转。我正在取得进展。我花了大约两个小时来迁移我的第一个 ant 模块,并且构建文件基本上什么都没有。轻松安装一个屏幕。最大的“哇”是:建造 脚本 在 xml 中,这有多愚蠢?声明一个依赖项需要一行这一事实对我来说非常有吸引力 -> 您可以在一页上轻松查看某个项目的所有依赖项。从那时起我就一直在不断地滚动,到目前为止我遇到的每一个问题都有一个简单而优雅的解决方案。我认为有以下几个原因:

  • groovy 对于 java 开发人员来说非常直观
  • 文档很棒到很棒
  • 灵活性是无限的

现在,我花了很多时间尝试想出新功能以添加到我们的构建过程中。那病有多严重?

它也更容易管理本地版本。 Ant和Maven是有效的Java只。一些插件Maven的,尝试处理一些本地的项目存在,但他们没有做有效的工作。 Ant任务可以写成编译的本机项目,但它们太复杂和笨拙。

我们做的Java使用JNI和许多其他本地位。摇篮大大简化了我们的蚂蚁乱。当我们开始引进依赖管理本机项目是凌乱。我们得到了Maven来做到这一点,但相当于摇篮代码为的是需要什么样的Maven一小部分,而且人们可以阅读和理解它没有成为Maven的大师。

我与埃德的Staub部分同意。摇篮肯定更强大相比Maven和提供了更多的灵活性长期

进行评估,以从行家移动到摇篮后,我们决定坚持到Maven本身的两个问题 我们的gradle与遇到的(速度比行家慢,代理不工作)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top