我正在尝试简化我的一些 Gradle 构建。典型的 build.gradle.kts
看起来像
plugins {
base
idea
java
id("biz.aQute.bnd.builder")
kotlin("jvm")
id("org.jetbrains.dokka")
}
dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation("org.osgi:osgi.annotation:7.0.0")
implementation("org.osgi:osgi.cmpn:7.0.0")
implementation("org.osgi:osgi.core:7.0.0")
testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.1.0")
testImplementation("org.junit.jupiter:junit-jupiter-api:5.4.2")
testRuntimeOnly("org.junit.jupiter:junit-jupiter-engine:5.4.2")
}
tasks.compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
useIR = true
}
}
tasks.compileTestKotlin {
kotlinOptions {
jvmTarget = "1.8"
useIR = true
}
}
version = "0.0.0"
java {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
tasks.jar {
archiveBaseName.set("project.name.api")
}
tasks.named<Test>("test") {
useJUnitPlatform()
}
我正在尝试减少重复,特别是使用 tasks.compileKotlin
和 tasks.compileTestKotlin
block 。
我读到应该使用 buildSrc
文件夹来定义这样的简化。文件夹结构为
buildSrc/
src/
main/
kotlin/
Example.kt
build.gradle.kts
示例.kt
import org.gradle.kotlin.dsl.KotlinBuildScript
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.kotlin
//import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
fun KotlinBuildScript.configureModule() {
tasks.named<KotlinCompile>("compileKotlin") {
kotlinOptions {
jvmTarget = "1.8"
useIR = true
}
}
}
buildSrc/build.gradle.kts
plugins {
`kotlin-dsl`
}
repositories {
mavenCentral()
}
但这种设置只会在构建过程中导致 Unresolved reference: kotlin
错误。
我不知道需要在哪里更改才能成功引用 KotlinCompile 类。我尝试指定 kotlin 插件、idea 插件,并尝试在 buildSrc/build.gradle.kts
中添加对 kotlin 的依赖项,但我无法在 github 或 google 上找到任何关于如何操作的示例进行设置。
我也想对大多数构建脚本执行相同的操作,而不仅仅是 KotlinCompile 任务,因此,如果我能提供有关我应该搜索什么或如何搜索这些其他任务类型的任何指导,我们将不胜感激。
最佳答案
看起来您正在 KotlinBuildScript
上创建扩展函数,这可能是也可能不是问题。无论如何,不需要扩展功能,直接使用 DSL 即可。
Gradle 调用共享构建逻辑约定插件:https://docs.gradle.org/current/samples/sample_convention_plugins.html#compiling_convention_plugins
因此您的 Example.kt
将变为 kotlin-conventions.gradle.kts
:
// kotlin-conventions.gradle.kts
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin
}
tasks {
compileKotlin {
kotlinOptions {
jvmTarget = "1.8"
useIR = true
}
}
}
然后在主 Gradle 构建文件中,应用约定插件:
// build.gradle.kts
plugins {
`kotlin-conventions`
}
关于kotlin - 如何使用 Gradle Kotlin buildSrc 插件自定义 KotlinCompile 任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66450310/