s1m*_*nw1 19 gradle kotlin build.gradle gradle-kotlin-dsl
为了描述Gradle构建脚本,我们可以使用Kotlin via build.gradle.kts文件.全局定义要使用的 Kotlin版本是常见的问题,无论是dependencies在构建plugin部分还是在构建部分中(对于给定的案例,使用不同的版本是相当罕见的).
请考虑以下代码(Gradle 4.3.1):
plugins {
var pluginVersion = "1.2.30"
kotlin("jvm").version(kotlinVersion)
// more
}
var dependencyVersion = "1.2.30"
dependencies {
compile(kotlin("stdlib", kotlinVersion))
compile(kotlin("reflect", kotlinVersion))
testCompile(kotlin("test", kotlinVersion))
// more
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,kotlin version(在这种情况下为1.2.30)定义了两次:dependencyVersion并且pluginVersion,通常没有区别.由于DSL限制,不可能pluginVersion从plugins块外部访问或dependencyVersion从plugins块内访问.
如何将版本字符串"1.2.30"提取到一个地方?
ssc*_*ass 16
我刚刚偶然发现的是在我的build.gradle.kts.
我不得不:
buildSrcwithsrc/main/kotlin和 a的模块build.gradle.kts。include("buildSrc")在settings.gradle.kts该buildSrc/build.gradle.kts是很小的:
plugins {
`kotlin-dsl`
}
repositories {
jcenter()
}
Run Code Online (Sandbox Code Playgroud)
在buildSrc/src/main/kotlin我添加了一个Config.kt
const val GROUP_ID = "my-company"
const val VERSION = "0.1.0-SNAPSHOT"
const val POM_NAME = "my-library-name"
const val POM_DESCRIPTION = "A library doing stuff."
const val POM_URL = "https://github.com/${GROUP_ID}/${POM_NAME}/"
const val POM_SCM_URL = POM_URL
const val POM_SCM_CONNECTION = "scm:git:git://github.com/${GROUP_ID}/${POM_NAME}.git"
const val POM_SCM_DEV_CONNECTION = "scm:git:ssh://git@github.com/${GROUP_ID}/${POM_NAME}.git"
const val POM_LICENCE_NAME = "The Apache Software License, Version 2.0"
const val POM_LICENCE_URL = "http://www.apache.org/licenses/LICENSE-2.0.txt"
const val POM_LICENCE_DIST = "repo"
const val POM_DEVELOPER_ID = "me"
const val POM_DEVELOPER_NAME = "meeee"
const val POM_DEVELOPER_EMAIL = "me@foo.com"
Run Code Online (Sandbox Code Playgroud)
而一个 Dependencies.kt
@file:Suppress("MemberVisibilityCanBePrivate")
object Jvm {
const val version = "1.8"
}
object Kotlin {
const val version = "1.3.50"
const val stdlibJdk8 = "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$version"
const val jvmId = "jvm"
const val kaptId = "kapt"
}
object MavenPublish {
const val id = "maven-publish"
}
object Arrow {
const val version = "0.10.1"
const val core = "io.arrow-kt:arrow-core:$version"
const val syntax = "io.arrow-kt:arrow-syntax:$version"
const val optics = "io.arrow-kt:arrow-optics:$version"
const val fx = "io.arrow-kt:arrow-fx:$version"
const val meta = "io.arrow-kt:arrow-meta:$version"
}
object Versions {
const val version = "0.27.0"
const val versions = "com.github.ben-manes:gradle-versions-plugin:$version"
const val id = "com.github.ben-manes.versions"
}
Run Code Online (Sandbox Code Playgroud)
所以,我可以在我的根使用它build.gradle.kts像
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin(Kotlin.jvmId) version Kotlin.version
kotlin(Kotlin.kaptId) version Kotlin.version
id(Versions.id) version Versions.version
id(MavenPublish.id)
}
group = GROUP_ID
version = VERSION
repositories {
mavenCentral()
jcenter()
}
dependencies {
implementation(Kotlin.stdlibJdk8)
implementation(Arrow.core)
implementation(Arrow.syntax)
kapt(Arrow.meta)
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = Jvm.version
}
publishing {
publications {
create<MavenPublication>("mavenJava") {
@Suppress("UnstableApiUsage")
pom {
name.set(POM_NAME)
description.set(POM_DESCRIPTION)
url.set(POM_URL)
licenses {
license {
name.set(POM_LICENCE_NAME)
url.set(POM_LICENCE_URL)
distribution.set(POM_LICENCE_DIST)
}
}
developers {
developer {
id.set(POM_DEVELOPER_ID)
name.set(POM_DEVELOPER_NAME)
email.set(POM_DEVELOPER_EMAIL)
}
}
scm {
connection.set(POM_SCM_CONNECTION)
developerConnection.set(POM_SCM_DEV_CONNECTION)
url.set(POM_SCM_URL)
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我对此很满意,但是当它自动增加时,version我可能会回退到gradle.properties.
编辑:
不再需要(并允许)添加buildSrc到settings.gradle.kts,而是如果存在,它将自动被拾取。
小智 12
在Gradle的更高版本中,您不再需要指定kotlin(stdlib|reflect|test)依赖项的版本,Kotlin插件将自动为您配置它们.
至于将依赖项提取到单个位置,有两种主要模式:
buildSrc/src/main/kotlin/并在构建脚本中使用该对象,代码来自buildSrc整个脚本,包括plugins块使用系统属性,您可以gradle.properties通过为其名称添加前缀来定义系统属性,您可以通过以下systemProp.方式访问系统属性System.getProperties():
// build.gradle.kts
plugins {
val kotlinVersion by System.getProperties()
println("Kotlin version is $kotlinVersion")
}
// gradle.properties
systemProp.kotlinVersion=1.2.20
Run Code Online (Sandbox Code Playgroud)您可以从插件类中提取版本:
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
plugins {
kotlin("jvm") version "1.2.0"
}
val kotlinVersion = plugins.getPlugin(KotlinPluginWrapper::class.java).kotlinPluginVersion
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2334 次 |
| 最近记录: |