有没有一种标准的方法可以将依赖版本声明为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. 将它们声明为build.gradlebuildscript块中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"
    }
    
  2. 将它们声明为根级中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"
    }
    
  3. 使用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" 
    }
    
  4. 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样式一起使用不多

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

最新更新