Trying to migrate my existing build.gradle
to Kotlin and I am getting the following error in my project:
Script compilation error:
Line 86: from(sourceSets["main"].allSource)
^ Unresolved reference: sourceSets
1 error
The error is coming from my subprojects
block when I try to define the sourcesJar
task:
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")
// ...
}
}
I'm using the following:
Beginning part of the build.gradle.kts
before subprojects
block:
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
}
}
}
}
}
Since the plugin is applied imperatively in the same build script, Gradle can't know the plugin is applied and thus can't generate the extension functions allowing to access the source sets.
So you need to get the source set programmatically:
project.the<SourceSetContainer>()["main"]
Don't use
the<SourceSetContainer>()["main"]
otherwise the the()
function will be resolved on the current task being configured instead of the project.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With