Skip to content

Instantly share code, notes, and snippets.

@hastebrot
Last active July 2, 2022 13:43
Show Gist options
  • Save hastebrot/e6d34c220659ff2f6d96ab54131732bc to your computer and use it in GitHub Desktop.
Save hastebrot/e6d34c220659ff2f6d96ab54131732bc to your computer and use it in GitHub Desktop.
import org.gradle.api.file.SourceDirectorySet
import org.gradle.api.internal.HasConvention
import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.SourceSetContainer
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
//—————————————————————————————————————————————————————————————————————————————————————————————————
// BUILD SCRIPT.
//—————————————————————————————————————————————————————————————————————————————————————————————————
buildscript {
repositories {
gradleScriptKotlin()
}
dependencies {
classpath(kotlinModule("gradle-plugin", "1.1.0"))
}
}
//—————————————————————————————————————————————————————————————————————————————————————————————————
// GRADLE PLUGINS.
//—————————————————————————————————————————————————————————————————————————————————————————————————
plugins {
java
application
}
apply {
plugin("java")
plugin("kotlin")
}
//—————————————————————————————————————————————————————————————————————————————————————————————————
// MAVEN DEPENDENCIES.
//—————————————————————————————————————————————————————————————————————————————————————————————————
repositories {
gradleScriptKotlin()
}
dependencies {
compile(kotlinModule("stdlib", "1.1.0"))
}
//—————————————————————————————————————————————————————————————————————————————————————————————————
// SOURCE SETS.
//—————————————————————————————————————————————————————————————————————————————————————————————————
val sourceSets = java.sourceSets
fun sourceSets(block: SourceSetContainer.() -> Unit) = sourceSets.apply(block)
val SourceSetContainer.main: SourceSet get() = getByName("main")
val SourceSetContainer.test: SourceSet get() = getByName("test")
fun SourceSetContainer.main(block: SourceSet.() -> Unit) = main.apply(block)
fun SourceSetContainer.test(block: SourceSet.() -> Unit) = test.apply(block)
val SourceSet.kotlin: SourceDirectorySet
get() = (this as HasConvention).convention.getPlugin<KotlinSourceSet>().kotlin
var SourceDirectorySet.sourceDirs: Iterable<File>
get() = srcDirs
set(value) { setSrcDirs(value) }
sourceSets {
main {
java.sourceDirs = files("src")
kotlin.sourceDirs = files("src")
resources.sourceDirs = files("src/res")
}
test {
java.sourceDirs = files("test")
kotlin.sourceDirs = files("test")
resources.sourceDirs = files("test/res")
}
}
//—————————————————————————————————————————————————————————————————————————————————————————————————
// CONFIGURATION.
//—————————————————————————————————————————————————————————————————————————————————————————————————
application {
mainClassName = "MainKt"
}
val compileKotlin: KotlinCompile by tasks
compileKotlin.kotlinOptions.jvmTarget = "1.8"
@elect86
Copy link

elect86 commented Aug 27, 2021

HasConvention is deprecated, use this:

val SourceSet.kotlin: SourceDirectorySet
    get() = project.extensions.getByType<KotlinJvmProjectExtension>().sourceSets.getByName(name).kotlin

kudos to Martin Bonnin

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment