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



我决定从依赖关系管理插件迁移到Gradle内置的BOM导入支持。由于Gradle内置BOM导入支持具有更好的性能,但

我遇到问题:

我在原生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'
}

我如何才能在天真的Gradle中得到相同的行为?我的意思是:我想定义一个版本一次,就像我在使用依赖管理插件时所做的那样

下面的解决方案有助于避免版本复制粘贴。然而,它与依赖关系管理插件不同。

对于Gradle Kotlin Dsl:

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

算法:

  1. 创建文件夹buildSrc/src/main/kotlin
  2. 创建包含以下内容的文件buildSrc/src/main/kotlin/Versions.kt
object Versions {
const val junitVersion = "5.5.5" // just example
}
  1. 创建包含以下内容的文件buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
}
  1. 在gradle.kts文件中使用以下语法:
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:${Versions.junitVersion}")
}

对于Gradle Groovy:

  1. 创建文件gradle.properties
  2. 将具有类似okhttp_version=4.2.0语法的版本放在那里
  3. 在渐变文件中使用以下语法:
dependencies {
compile group: 'com.squareup.okhttp3', name: 'okhttp', version: okhttp_version
}

您可以在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")
}

相关内容

  • 没有找到相关文章

最新更新