gradlew:如果gradle版本不一致,会发生什么错误

问题描述

我是新手。但是我确实在某种程度上理解了为什么鼓励开发人员使用gradlew而不是gradle。但是,如果开发人员使用不同版本的gradle来构建项目,会发生什么更糟的情况?归根结底,任何gradle版本都可以确保正确管理项目的依赖项。例如,如果某个Spring Boot项目依赖于2.x入门版插件,则无论使用什么版本的gradle,构建工具都会确保2.x可用

解决方法

据我所知,使用通用版本的Gradle的要点是插件兼容性。

在最近的几个版本中,Gradle的内部API发生了很大的变化,因此并非每个插件都适用于每个Gradle版本。

例如:Spring Boot的2.3.4参考明确指出其构建插件需要Gradle 6.3或更高版本(尽管提到5.6以不推荐的形式工作)

https://docs.spring.io/spring-boot/docs/2.3.x/reference/htmlsingle/#getting-started-system-requirements

因此,尽管可以确定使用了Spring Boot版本(因为已在构建文件中定义了它),但是任何较旧的Gradle版本在尝试构建项目时都可能会遇到异常。

即使您仅使用Gradle本身提供的插件,也可能存在兼容性问题。例如,java配置块最初是在Gradle 5中引入的(我认为),因此会在早期版本中引起语法错误。 或Java较旧版本的Gradle不支持的简单内容。

您使用的插件越多,越来越多的Gradle版本将无法运行它。因此,使用Gradle Wrapper是构建适用于所有人的一种简单方法。

从另一个角度来看:如果您是通常会维护构建的人,则可以使用Wrapper使用所有最新的Gradle功能,因为您可以确定它不会破坏任何东西。在使用功能之前让团队中的所有人手动更新可能会很痛苦

那只蜜蜂说,这实际上主要是维护问题。如果有人使用自己安装的gradle版本,不会有什么不好的事情,除非它可能无法正常工作。 如果团队中的每个人都使用相似的版本

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...