为什么使用Gradle而不是Ant或Maven?[已关闭]
另一个针对Java的构建工具真正让我得到了什么?
如果您使用Gradle而不是其他工具,为什么?
另一个针对Java的构建工具真正让我得到了什么?
如果您使用Gradle而不是其他工具,为什么?
我自己并没有愤怒地使用Gradle(到目前为止只是一个玩具项目)[作者的意思是到目前为止,他们只在一个玩具项目上使用Gradle,并不是说Gradle是一个玩具项目 - 见评论],但我想说,人们会考虑使用它的原因是因为Ant和Maven的挫败感。
根据我的经验,Ant通常是只写的(是的,我知道可以写出漂亮的模块化,优雅的构建,但事实是大多数人都没有)。对于任何重要的项目,它都会变得令人费解,并且非常小心地确保复杂的构建是真正可移植的。它的命令性质可能导致构建之间的配置复制(尽管宏可以在这里提供帮助)。
Maven 采取了相反的方法,并期望您与 Maven 生命周期完全集成。有经验的蚂蚁用户发现这特别不和谐,因为Maven删除了你在蚂蚁中的许多自由。例如,有一个Sonatype博客列举了许多Maven的批评及其回应。
Maven插件机制允许非常强大的构建配置,继承模型意味着您可以定义一小组父POM来封装整个企业的构建配置,并且单个项目可以继承这些配置,使它们保持轻量级。Maven配置非常冗长(尽管Maven 3承诺会解决这个问题),如果你想做任何“不是Maven方式”的事情,你必须编写一个插件或使用黑客般的Ant集成。注意我碰巧喜欢编写Maven插件,但很感激许多人会反对所涉及的努力。
Gradle承诺会击中Ant和Maven之间的最佳位置。它使用Ivy的方法来解决依赖关系。它允许约定而不是配置,但也包括作为一等公民的 Ant 任务。它还明智地允许您使用现有的Maven / Ivy存储库。
因此,如果您已经击中了任何Ant / Maven痛点并陷入困境,那么可能值得尝试Gradle,尽管在我看来,如果您不只是将已知问题换成未知问题,那还有待观察。布丁的证据在吃的时候,所以我会保留判断力,直到产品成熟一点,其他人已经解决了任何问题(他们称之为前沿是有原因的)。不过,我仍然会在我的玩具项目中使用它,了解这些选项总是好的。
Gradle可用于多种用途 - 它是一把比蚂蚁更好的瑞士军刀 - 但它专门专注于多项目构建。
首先,Gradle是一个依赖编程工具,这也意味着它是一个编程工具。使用 Gradle,您可以在设置中执行任何随机任务,Gradle 将确保正确及时地执行所有声明的依赖项。您的代码可以分布在任何布局(树形、平面、分散等)的许多目录中。
Gradle有两个不同的阶段:评估和执行。基本上,在评估期间,Gradle将在它应该查找的目录中查找并评估构建脚本。在执行期间,Gradle 将执行在评估期间加载的任务,同时考虑到任务相互依赖关系。
除了这些依赖编程功能之外,Gradle还通过与Apache Ivy集成来添加项目和JAR依赖功能。如您所知,Ivy是一个比Maven更强大,更少固执己见的依赖管理工具。
Gradle 检测项目之间以及项目与 JAR 之间的依赖关系。Gradle适用于Maven存储库(下载和上传),如iBiblio或您自己的存储库,但也支持和您可能拥有的其他类型的存储库基础架构。
在多项目构建中,Gradle既具有适应性,又适应构建的结构和架构。您不必像 Maven 那样根据构建工具调整结构或体系结构。
Gradle非常努力地不妨碍你,Maven几乎从未做过这种努力。公约是好的,但灵活性也是好的。Gradle为您提供了比Maven更多的功能,但最重要的是,在许多情况下,Gradle将为您提供远离Maven的无痛过渡路径。