为什么使用Gradle代替Ant或Maven? [关闭]

天涯浪子 提交于 2020-03-13 14:39:34

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

如果您在其他工具上使用Gradle,为什么?


#1楼

Gradle将乐趣重新投入了构建/组装软件。 我在整个职业生涯中都使用ant来构建软件,并且我一直认为开发工作中实际的“ buildit”部分是必不可少的。 几个月前,我们公司对不使用二进制存储库(也就是将罐子检入vcs)感到厌倦,因此我承担了调查此事的任务。 从常春藤开始,因为它可以用螺栓固定在蚂蚁上,所以运气不佳就可以像我想要的那样发布我的内置文物了。 我去了maven,用xml破解了,为一些简单的辅助库工作了出色的工作,但是在尝试捆绑准备部署的应用程序时遇到了严重的问题。 花费了相当长的时间搜索谷歌插件和阅读论坛,并且为我难以使用的各种插件下载了数万亿个支持罐。 最终,我获得了胜利(这时变得非常痛苦,并烦恼“这不应该那么难!”)

但是从第一天起,我的情绪开始好转。 我要去某个地方。 我花了两个小时才能迁移我的第一个ant模块,而构建文件基本上什么也没有。 轻松安装一个屏幕。 最大的“哇”是:用xml构建脚本 ,这有多愚蠢? 声明一个依赖项需要一行的事实对我很有吸引力->您可以轻松地在一页上看到某个项目的所有依赖项。 从那时起,我始终如一地前进,对于迄今为止我遇到的每个问题,都有一个简单而优雅的解决方案。 我认为这些是原因:

  • groovy对于Java开发人员而言非常直观
  • 文档很棒很棒
  • 灵活性是无限的

现在,我花了很多时间试图思考新功能以添加到我们的构建过程中。 那病得厉害


#2楼

我不会用Gradle来激怒自己(到目前为止只是一个玩具项目) [作者表示,到目前为止,他们仅在一个玩具项目上使用了Gradle,而不是Gradle是一个玩具项目-请参阅注释] ,但我要说的是之所以会考虑使用它,是因为Ant和Maven的挫败感。

根据我的经验,Ant通常是只写的(是的,我知道可以编写漂亮的模块化,优雅的build ,但事实是大多数人不会写)。 对于任何非平凡的项目,它都会变得弯曲,并会格外小心,以确保复杂的构建真正可移植。 它的命令性性质可以导致在构建之间复制配置(尽管宏可以在此提供帮助)。

Maven采用相反的方法,并希望您与Maven生命周期完全集成。 经验丰富的Ant用户会发现这特别令人讨厌,因为Maven消除了您在Ant中拥有的许多自由。 例如,有一个Sonatype博客 ,列举了许多Maven批评及其回应。

Maven插件机制允许非常强大的构建配置,并且继承模型意味着您可以定义一整套父POM,将整个企业的构建配置封装起来,并且各个项目都可以继承这些配置,从而使其轻量化。 Maven配置非常冗长(尽管Maven 3承诺会解决此问题),如果您想做“非Maven方式”的任何事情,则必须编写一个插件或使用可靠的Ant集成。 注意,我碰巧喜欢编写Maven插件,但感谢许多人会反对所涉及的工作。

Gradle承诺会在Ant和Maven之间达到最佳位置。 它使用Ivy的方法来解决依赖项。 它允许在配置上进行约定,但还包括作为头等公民的Ant任务。 它还明智地允许您使用现有的Maven / Ivy存储库。

因此,如果您遇到了任何麻烦,并且陷入了Ant / Maven的任何痛点,那么值得尝试Gradle,尽管在我看来,是否您不只是将已知问题换成未知问题,还有待观察。 布丁的证据是在饮食中,所以我会保留判断,直到产品更成熟,其他人消除了任何扭结(由于某种原因,他们称其为流血边缘)。 不过,我仍将在玩具项目中使用它,意识到这些选择总是很高兴的。


#3楼

这不是我的答案,但肯定会引起我的共鸣。 摘自2012年10月的ThoughtWorks技术雷达

两件事导致了基于XML的构建工具(如Ant和Maven)的疲劳:太多恼怒的尖括号和插件体系结构的粗糙。 尽管语法问题可以通过一代代来解决,但是插件体系结构严重限制了构建工具随着项目变得越来越复杂而优雅地增长的能力。 我们已经感觉到插件是错误的抽象级别,而是更喜欢基于语言的工具(例如Gradle和Rake),因为它们提供了更细粒度的抽象和更长期的灵活性。


#4楼

我部分同意Ed Staub的观点。 与Maven相比,Gradle绝对更强大,并且可以长期提供更大的灵活性。

在执行了从maven到gradle的评估之后,我们决定继续解决gradle遇到的两个问题(速度比maven慢,代理不起作用)。


#5楼

Gradle可用于多种用途-比Ant更好的瑞士军刀-但它专门针对多项目构建。

首先,Gradle是一个依赖项编程工具,这也意味着它是一个编程工具。 使用Gradle,您可以执行设置中的任何随机任务,并且Gradle将确保正确且及时地执行所有声明的依赖项。 您的代码可以以任何形式的布局(树形,平面形,分散形,...)分布在许多目录中。

Gradle有两个不同的阶段:评估和执行。 基本上,在评估期间,Gradle会在应该查找的目录中寻找并评估构建脚本。 在执行期间,Gradle将执行评估期间已加载的任务,同时考虑到任务之间的相互依赖性。

在这些依赖项编程功能之上,Gradle通过与Apache Ivy集成添加了项目和JAR依赖项功能。 如您所知,与Maven相比,Ivy是一个功能更强大且自以为是的依赖管理工具。

Gradle检测项目之间以及项目与JAR之间的依赖关系。 Gradle可与iBiblio这样的Maven存储库(下载和上传)一起使用,也可以与您自己的存储库一起使用,还可以支持您可能拥有的其他存储库基础结构。

在多项目构建中,Gradle既可适应又可适应构建的结构和体系结构。 您不必像Maven那样使结构或体系结构适应构建工具。

Gradle竭尽全力不让自己陷入困境,Maven几乎从未做出过任何努力。 约定好,但灵活性也好。 Gradle为您提供了比Maven更多的功能,但最重要的是,在许多情况下,Gradle将为您提供远离Maven的轻松过渡路径。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!