如何为整个Gradle多模块项目只定义一次依赖版本?

如何为整个Gradle多模块项目只定义一次依赖版本?,gradle,dependency-management,gradle-plugin,Gradle,Dependency Management,Gradle Plugin,我决定从一个城市搬到另一个城市。由于渐变内置BOM导入支持但是 我遇到了这个问题: 我无法在native Gradle中找到替代方案: dependencyManagement { dependencies { dependency("org.springframework:spring-core:4.0.3.RELEASE") } } //or dependencyManagement { dep

我决定从一个城市搬到另一个城市。由于渐变内置BOM导入支持但是

我遇到了这个问题:

我无法在native Gradle中找到替代方案:

    dependencyManagement {
        dependencies {
            dependency("org.springframework:spring-core:4.0.3.RELEASE")
        }
    }
//or
    dependencyManagement {
         dependencies {
              dependencySet(group:'org.slf4j', version: '1.7.7') {
                   entry 'slf4j-api'
                   entry 'slf4j-simple'
              }
         }
    }
然后我可以使用不带版本的依赖关系

dependencies {
    compile 'org.springframework:spring-core'
}

我如何才能在naive Gradle中获得同样的行为?我的意思是:我想定义一个版本一次,就像我在使用下面的解决方案时所做的那样,这有助于避免版本复制粘贴。然而,它与依赖管理插件不同

对于Gradle Kotlin Dsl:

当您可以放置任何常量时,您可以使用自己的代码创建
buildSrc

算法:

  • 创建文件夹
    buildSrc/src/main/kotlin
  • 创建包含以下内容的文件
    buildSrc/src/main/kotlin/Versions.kt
  • 创建包含以下内容的文件
    buildSrc/build.gradle.kts
  • 在gradle.kts文件中使用以下语法:
  • 对于Gradle Groovy:

  • 创建文件
    gradle.properties
  • 将语法类似于
    okhttp\u version=4.2.0的版本放在那里
  • 在gradle文件中使用以下语法:

  • 您可以在
    gradle.properties
    文件中执行此操作。即:

    # APPLICATION PROPERTIES
    name=projectName
    group=com.domain
    version=1.0.0
    description=A brief description
    
    gradleScripts=https://raw.githubusercontent.com/hexagonkt/hexagon/1.2.0/gradle
    
    # DEPENDENCIES VERSIONS
    kotlinVersion=1.3.61
    kotlinCoroutinesVersion=1.3.2
    
    或者在
    settings.gradle
    中,如果不想创建另一个文件:

    
    rootProject.name = "hexagon-contact-application"
    
    gradle.rootProject {
    
        allprojects {
            version = "1.0.0"
            group = "org.hexagonkt"
            description = "Contact application backend api"
        }
    
        extensions.gradleScripts = "https://raw.githubusercontent.com/hexagonkt/hexagon/1.0.18/gradle"
    
        extensions.kotlinVersion = "1.3.50"
        extensions.kotlinCoroutinesVersion = "1.3.2"
    
        extensions.hexagonVersion = "1.0.21"
    
        extensions.logbackVersion = "1.2.3"
        extensions.bcryptVersion="0.8.0"
        extensions.javaJwtVersion="3.8.2"
    }
    
    如果要避免将版本变量添加到所有相关依赖项,可以在生成文件中创建一个方法:

    plugins {
        id 'org.jetbrains.kotlin.jvm' version '1.3.50'
    }
    
    apply from: "$gradleScripts/kotlin.gradle"
    apply from: "$gradleScripts/service.gradle"
    apply from: "$gradleScripts/junit.gradle"
    
    defaultTasks("test")
    
    mainClassName = 'com.hexagonkt.contact.ApplicationKt'
    applicationDefaultJvmArgs = ["-Xms64M", "-Xmx2G", "-XX:+UseNUMA", "-XX:+UseParallelGC"]
    
    dependencies {
        httpkt(it, "http_server_jetty")
        httpkt(it, "store_mongodb")
        httpkt(it, "hexagon_web")
    
        implementation("at.favre.lib:bcrypt:$bcryptVersion")
        implementation("com.auth0:java-jwt:$javaJwtVersion")
    
        testImplementation("com.hexagonkt:port_http_client:$hexagonVersion")
    }
    
    private void httpkt(final def dependencies, final String artifact) {
        dependencies.implementation("com.hexagonkt:$artifact:$hexagonVersion")
    }
    
    dependencies {
        compile group: 'com.squareup.okhttp3', name: 'okhttp', version: okhttp_version
    }
    
    # APPLICATION PROPERTIES
    name=projectName
    group=com.domain
    version=1.0.0
    description=A brief description
    
    gradleScripts=https://raw.githubusercontent.com/hexagonkt/hexagon/1.2.0/gradle
    
    # DEPENDENCIES VERSIONS
    kotlinVersion=1.3.61
    kotlinCoroutinesVersion=1.3.2
    
    
    rootProject.name = "hexagon-contact-application"
    
    gradle.rootProject {
    
        allprojects {
            version = "1.0.0"
            group = "org.hexagonkt"
            description = "Contact application backend api"
        }
    
        extensions.gradleScripts = "https://raw.githubusercontent.com/hexagonkt/hexagon/1.0.18/gradle"
    
        extensions.kotlinVersion = "1.3.50"
        extensions.kotlinCoroutinesVersion = "1.3.2"
    
        extensions.hexagonVersion = "1.0.21"
    
        extensions.logbackVersion = "1.2.3"
        extensions.bcryptVersion="0.8.0"
        extensions.javaJwtVersion="3.8.2"
    }
    
    plugins {
        id 'org.jetbrains.kotlin.jvm' version '1.3.50'
    }
    
    apply from: "$gradleScripts/kotlin.gradle"
    apply from: "$gradleScripts/service.gradle"
    apply from: "$gradleScripts/junit.gradle"
    
    defaultTasks("test")
    
    mainClassName = 'com.hexagonkt.contact.ApplicationKt'
    applicationDefaultJvmArgs = ["-Xms64M", "-Xmx2G", "-XX:+UseNUMA", "-XX:+UseParallelGC"]
    
    dependencies {
        httpkt(it, "http_server_jetty")
        httpkt(it, "store_mongodb")
        httpkt(it, "hexagon_web")
    
        implementation("at.favre.lib:bcrypt:$bcryptVersion")
        implementation("com.auth0:java-jwt:$javaJwtVersion")
    
        testImplementation("com.hexagonkt:port_http_client:$hexagonVersion")
    }
    
    private void httpkt(final def dependencies, final String artifact) {
        dependencies.implementation("com.hexagonkt:$artifact:$hexagonVersion")
    }