是否有一种标准方法将依赖项版本声明为Gradle中的变量,然后可以在依赖项块中进行引用?

问题描述

我对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中完成同样的操作

  1. ext的{​​{1}}块的buildscript块中声明它们。

    示例build.gradle-

    build.gradle
  2. 在根级别将其声明为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
  3. 使用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
  4. ... 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样式中使用较少

我在依赖项中声明的pluginsext中有硬编码的版本号。