我对Gradle还很陌生,所以我想检查一下在一个单一的地方声明所有依赖版本的推荐Gradle等价物是什么,就像Maven的properties
标签一样
示例pom.xml
-
<properties>
<java.version>11</java.version>
<spring.version>5.0.5.RELEASE</spring.version>
<lombok.version>1.18.6</lombok.version>
<logback.version>1.2.3</logback.version>
...
</properties>
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
到目前为止,我在Gradle 中遇到了以下方法来实现同样的目的
将它们声明为
build.gradle
中buildscript
块中ext
块的一部分
示例build.gradle-buildscript { ext { LOMBOK_VERSION = '1.18.6' JUNIT_VERSION = '5.5.2' MOCKITO_VERSION = '3.1.0' SPRING_BOOT_VERSION = '2.2.4.RELEASE' SWAGGER_VERSION = '2.9.2' } } ... dependencies { compileOnly "org.projectlombok:lombok:$LOMBOK_VERSION" implementation "org.springframework.boot:spring-boot-starter:$SPRING_BOOT_VERSION" implementation "io.springfox:springfox-swagger-ui:$SWAGGER_VERSION" implementation "io.springfox:springfox-swagger2:$SWAGGER_VERSION" testImplementation "org.springframework.boot:spring-boot-starter-test:$SPRING_BOOT_VERSION" testImplementation "org.junit.jupiter:junit-jupiter-api:$JUNIT_VERSION" testIimplementation "org.mockito:mockito-junit-jupiter:$MOCKITO_VERSION" runtimeOnly "org.junit.jupiter:junit-jupiter-engine:$JUNIT_VERSION" }
将它们声明为根级中
ext
块的一部分ext { LOMBOK_VERSION = '1.18.6' JUNIT_VERSION = '5.5.2' MOCKITO_VERSION = '3.1.0' SPRING_BOOT_VERSION = '2.2.4.RELEASE' SWAGGER_VERSION = '2.9.2' } ... dependencies { compileOnly "org.projectlombok:lombok:$LOMBOK_VERSION" implementation "org.springframework.boot:spring-boot-starter:$SPRING_BOOT_VERSION" implementation "io.springfox:springfox-swagger-ui:$SWAGGER_VERSION" implementation "io.springfox:springfox-swagger2:$SWAGGER_VERSION" testImplementation "org.springframework.boot:spring-boot-starter-test:$SPRING_BOOT_VERSION" testImplementation "org.junit.jupiter:junit-jupiter-api:$JUNIT_VERSION" testIimplementation "org.mockito:mockito-junit-jupiter:$MOCKITO_VERSION" runtimeOnly "org.junit.jupiter:junit-jupiter-engine:$JUNIT_VERSION" }
使用
def
将它们声明为dependencies
块本身中的局部变量... dependencies { def LOMBOK_VERSION = '1.18.6' def JUNIT_VERSION = '5.5.2' def MOCKITO_VERSION = '3.1.0' def SPRING_BOOT_VERSION = '2.2.4.RELEASE' def SWAGGER_VERSION = '2.9.2' compileOnly "org.projectlombok:lombok:$LOMBOK_VERSION" implementation "org.springframework.boot:spring-boot-starter:$SPRING_BOOT_VERSION" implementation "io.springfox:springfox-swagger-ui:$SWAGGER_VERSION" implementation "io.springfox:springfox-swagger2:$SWAGGER_VERSION" testImplementation "org.springframework.boot:spring-boot-starter-test:$SPRING_BOOT_VERSION" testImplementation "org.junit.jupiter:junit-jupiter-api:$JUNIT_VERSION" testIimplementation "org.mockito:mockito-junit-jupiter:$MOCKITO_VERSION" runtimeOnly "org.junit.jupiter:junit-jupiter-engine:$JUNIT_VERSION" }
在
gradle.properties
文件中声明它们org.gradle.caching=true org.gradle.jvmargs=-Dfile.encoding=UTF-8 org.gradle.parallel=true # Dependency versions lombokVersion=1.18.12 junitVersion=5.5.2 mockitoVersion=3.1.0 springBootVersion=2.2.4.RELEASE swaggerVersion=2.9.2
我不确定哪一个是首选,哪一个应该避免(如果有的话(?
选择是主观的,强制执行取决于个人编码风格或代码格式规则。
就个人而言,version
数字是"代码"-它们在dependencies
和/或plugins
中是必需的
gradle.properties
不是地方-因为它的目的不是编码本身
选项2,3(ext
,在dependencies
中(在plugins
中不可见
buildscript
块支持全局声明,但与新的plugins
样式一起使用不多
我在依赖项中声明了plugins
和ext
中的硬编码版本号。