未解决的参考:Gradle Kotlin DSL 的 sourceSets
Unresolved reference: sourceSets for Gradle Kotlin DSL
尝试将我现有的 build.gradle
迁移到 Kotlin,我在我的项目中遇到以下错误:
Script compilation error:
Line 86: from(sourceSets["main"].allSource)
^ Unresolved reference: sourceSets
1 error
当我尝试定义 sourcesJar
任务时,错误来自我的 subprojects
块:
subprojects {
val sourcesJar by tasks.registering(Jar::class) {
classifier = "sources"
from(sourceSets["main"].allSource) // error here
}
configure<PublishingExtension> {
publications {
register("mavenJava", MavenPublication::class) {
from(components["java"])
artifact(sourcesJar.get())
}
}
}
val implementation by configurations
val compileOnly by configurations
val annotationProcessor by configurations
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-reflect")
compileOnly("org.springframework.boot:spring-boot-autoconfigure")
// ...
}
}
我正在使用以下内容:
- Gradle 4.10.2
- 科特林 1.2.70
subprojects
块之前 build.gradle.kts
的开始部分:
import com.diffplug.gradle.spotless.KotlinExtension
import com.diffplug.gradle.spotless.SpotlessExtension
import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val kotlinVersion: String by extra
val springBootVersion: String by extra
buildscript {
val kotlinVersion: String by extra { "1.2.70" }
val springBootVersion: String by extra { "2.0.6.RELEASE" }
repositories {
maven {
val nexusPublicRepoURL: String by project
url = uri(nexusPublicRepoURL)
}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
classpath("com.diffplug.spotless:spotless-plugin-gradle:3.9.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion")
classpath("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.70")
}
}
allprojects {
val projectGroup: String by project
group = projectGroup
apply(plugin = "kotlin")
apply(plugin = "java-library")
apply(plugin = "maven-publish")
apply(plugin = "kotlin-spring")
apply(plugin = "com.diffplug.gradle.spotless")
apply(plugin = "io.spring.dependency-management")
configure<DependencyManagementExtension> {
imports {
mavenBom("org.springframework.boot:spring-boot-dependencies:$springBootVersion")
mavenBom("org.springframework.cloud:spring-cloud-dependencies:Finchley.SR1")
}
}
repositories {
maven {
val nexusPublicRepoURL: String by project
url = uri(nexusPublicRepoURL)
}
}
tasks.existing(KotlinCompile::class) {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
configure<SpotlessExtension> {
kotlin {
ktlint()
}
}
configure<PublishingExtension> {
repositories {
maven {
val nexusReleaseRepoURL: String by project
val nexusSnapshotRepoURL: String by project
val nexusUsername: String by project
val nexusPassword: String by project
val version = if ((project.version as String).contains("SNAPSHOT")) nexusReleaseRepoURL else nexusSnapshotRepoURL
url = uri(version)
credentials {
username = nexusUsername
password = nexusPassword
}
}
}
}
}
由于在同一个构建脚本中强制应用插件,Gradle无法知道插件已应用,因此无法生成允许访问源集的扩展函数。
因此您需要以编程方式获取源集:
project.the<SourceSetContainer>()["main"]
不要使用
the<SourceSetContainer>()["main"]
否则 the()
函数将在当前配置的任务而不是项目上解析。
尝试将我现有的 build.gradle
迁移到 Kotlin,我在我的项目中遇到以下错误:
Script compilation error:
Line 86: from(sourceSets["main"].allSource)
^ Unresolved reference: sourceSets
1 error
当我尝试定义 sourcesJar
任务时,错误来自我的 subprojects
块:
subprojects {
val sourcesJar by tasks.registering(Jar::class) {
classifier = "sources"
from(sourceSets["main"].allSource) // error here
}
configure<PublishingExtension> {
publications {
register("mavenJava", MavenPublication::class) {
from(components["java"])
artifact(sourcesJar.get())
}
}
}
val implementation by configurations
val compileOnly by configurations
val annotationProcessor by configurations
dependencies {
implementation("org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion")
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
implementation("org.jetbrains.kotlin:kotlin-reflect")
compileOnly("org.springframework.boot:spring-boot-autoconfigure")
// ...
}
}
我正在使用以下内容:
- Gradle 4.10.2
- 科特林 1.2.70
subprojects
块之前 build.gradle.kts
的开始部分:
import com.diffplug.gradle.spotless.KotlinExtension
import com.diffplug.gradle.spotless.SpotlessExtension
import io.spring.gradle.dependencymanagement.dsl.DependencyManagementExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
val kotlinVersion: String by extra
val springBootVersion: String by extra
buildscript {
val kotlinVersion: String by extra { "1.2.70" }
val springBootVersion: String by extra { "2.0.6.RELEASE" }
repositories {
maven {
val nexusPublicRepoURL: String by project
url = uri(nexusPublicRepoURL)
}
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:$springBootVersion")
classpath("com.diffplug.spotless:spotless-plugin-gradle:3.9.0")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
classpath("org.jetbrains.kotlin:kotlin-allopen:$kotlinVersion")
classpath("org.jetbrains.kotlin:kotlin-compiler-embeddable:1.2.70")
}
}
allprojects {
val projectGroup: String by project
group = projectGroup
apply(plugin = "kotlin")
apply(plugin = "java-library")
apply(plugin = "maven-publish")
apply(plugin = "kotlin-spring")
apply(plugin = "com.diffplug.gradle.spotless")
apply(plugin = "io.spring.dependency-management")
configure<DependencyManagementExtension> {
imports {
mavenBom("org.springframework.boot:spring-boot-dependencies:$springBootVersion")
mavenBom("org.springframework.cloud:spring-cloud-dependencies:Finchley.SR1")
}
}
repositories {
maven {
val nexusPublicRepoURL: String by project
url = uri(nexusPublicRepoURL)
}
}
tasks.existing(KotlinCompile::class) {
kotlinOptions {
freeCompilerArgs = listOf("-Xjsr305=strict")
jvmTarget = "1.8"
}
}
configure<SpotlessExtension> {
kotlin {
ktlint()
}
}
configure<PublishingExtension> {
repositories {
maven {
val nexusReleaseRepoURL: String by project
val nexusSnapshotRepoURL: String by project
val nexusUsername: String by project
val nexusPassword: String by project
val version = if ((project.version as String).contains("SNAPSHOT")) nexusReleaseRepoURL else nexusSnapshotRepoURL
url = uri(version)
credentials {
username = nexusUsername
password = nexusPassword
}
}
}
}
}
由于在同一个构建脚本中强制应用插件,Gradle无法知道插件已应用,因此无法生成允许访问源集的扩展函数。
因此您需要以编程方式获取源集:
project.the<SourceSetContainer>()["main"]
不要使用
the<SourceSetContainer>()["main"]
否则 the()
函数将在当前配置的任务而不是项目上解析。