问题描述
我对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中完成同样的操作
-
在
ext
的{{1}}块的buildscript
块中声明它们。
示例build.gradle-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" }
在dependencies
块本身中将它们声明为局部变量def
-
在
... 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
我不确定首选哪个,应该避免(如果有)吗?
解决方法
选择是主观的,执行取决于个人编码样式或代码格式化规则。
个人-version
是“代码”-dependencies
和/或plugins
gradle.properties
不是地方-因为它的目的不是代码本身
选项{2,3(ext
中的dependencies
)在plugins
buildscript
块支持全局声明,但在新的plugins
样式中使用较少
我在依赖项中声明的plugins
和ext
中有硬编码的版本号。