另一个针对Java的构建工具真正让我明白了什么?

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

推荐答案

我不使用Gradle的愤怒自己(只是一个玩具项目到目前为止)[author means they have used Gradle on only a toy project so far, not that Gradle is a toy project - see comments],但我要说的原因,人们会考虑使用它将是因为蚂蚁和Maven的挫折.

根据我的经验,Ant通常是只写的(是的,我知道可以写beautifully modular, elegant build,但事实是大多数人不这样做).对于任何不平凡的项目,它都会变得令人费解,并且会非常小心地确保复杂的构建是真正可移植的.它的命令性可能导致在构建之间复制配置(尽管宏在这里可以有所帮助).

Maven采取相反的方法,希望您完全集成到Maven生命周期中.有经验的Ant用户发现这特别discord,因为Maven删除了您在Ant中拥有的许多自由.例如,有一个Sonatype blog,它列举了许多Maven的批评和他们的回应.

Maven插件机制允许非常强大的构建配置,继承模型意味着您可以定义一小部分父POM,将整个企业的构建配置封装起来,单个项目可以继承这些配置,从而使它们变得轻量级.Maven配置非常冗长(尽管Maven 3promise 会解决这个问题),如果你想做任何"不是Maven方式"的事情,你必须编写一个插件或使用hacky Ant集成.请注意,我碰巧喜欢编写Maven插件,但也明白很多人会反对所涉及的工作.

Gradlepromise 在Ant和Maven之间找到最合适的位置.它使用Ivy的方法来解决依赖关系.它允许约定优先于配置,但也包括作为一等公民的蚂蚁任务.它还明智地允许您使用现有的Maven/Ivy存储库.

因此,如果您遇到了Ant/Maven的任何一个痛点,可能值得try 一下Gradle,尽管在我看来,您是否愿意用已知的问题来换取未知的问题,这还有待观察.不过,布丁的证据在于食用,所以我会保留判断,直到产品稍微成熟一些,其他人已经解决了任何问题(他们称其为流血是有原因的).不过,我仍然会在我的玩具项目中使用它,知道这些选项总是很好的.

Java相关问答推荐

int Array Stream System. out. print方法在打印Java8时在末尾添加% sign

如何在Docker容器中使用wireock—Webhooks阻止请求?

try 使用Java 9或更高版本对特殊对象图进行解析时出现NullPointerException

Oracle DUAL表上使用DDL时jOOQ问题的解析'

无法在org. openjfx:javafx—fxml:21的下列变体之间进行 Select

@org.springframework.beans.factory.annotation.Autowired(required=true)-注入点有以下注释:-SpringBoot

如何使用AWS CLI从S3存储桶中的所有对象中删除用户定义的元数据?

从ActiveMQ Classic迁移到ActiveMQ Artemis需要进行哪些客户端更改?

为什么我的回收视图会显示重复的列表?

使用存储在字符串变量中的路径目录打开.pdf文件

在执行流和相关操作时,使用Java泛型为2个方法执行相同的操作,但对象不同

try 在Android Studio中的infoWindow中使用EditText(Java)

如何在Spring Boot中创建可以将值传递给配置的&Enable&Quot;注释?

根本不显示JavaFX阿拉伯字母

Quarkus:运行时出现EnumConstantNotPresentException

从12小时开始的日期模式

有没有办法知道在合并中执行了什么操作?

使用迭代器遍历HashMap不会因IF条件而停止

为什么mvn编译生命周期阶段不只是编译已更改的java文件?

Java方法参数:括号中的类型声明?