我决定从依赖关系管理插件迁移到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
。
算法:
- 创建文件夹
buildSrc/src/main/kotlin
- 创建包含以下内容的文件
buildSrc/src/main/kotlin/Versions.kt
:
object Versions {
const val junitVersion = "5.5.5" // just example
}
- 创建包含以下内容的文件
buildSrc/build.gradle.kts
:
plugins {
`kotlin-dsl`
}
- 在gradle.kts文件中使用以下语法:
dependencies {
testImplementation("org.junit.jupiter:junit-jupiter:${Versions.junitVersion}")
}
对于Gradle Groovy:
- 创建文件
gradle.properties
- 将具有类似
okhttp_version=4.2.0
语法的版本放在那里 - 在渐变文件中使用以下语法:
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")
}