107 lines
3.5 KiB
Kotlin
Raw Normal View History

2019-07-21 17:40:08 +03:00
package scientifik
import Scientifik
2019-07-21 17:40:08 +03:00
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.plugins.JavaBasePlugin
import org.gradle.api.plugins.JavaPluginExtension
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
2020-07-06 09:52:54 +03:00
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.bundling.Jar
2020-04-07 12:49:40 +03:00
import org.gradle.api.tasks.testing.Test
import org.gradle.kotlin.dsl.*
import org.jetbrains.dokka.gradle.DokkaTask
2019-07-21 18:17:40 +03:00
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
2019-07-21 17:40:08 +03:00
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
open class ScientifikJVMPlugin : Plugin<Project> {
2020-07-05 14:39:35 +03:00
override fun apply(project: Project): Unit = project.run {
plugins.apply("org.jetbrains.kotlin.jvm")
2019-07-21 17:40:08 +03:00
2020-07-05 14:39:35 +03:00
repositories.applyRepos()
2019-07-21 17:40:08 +03:00
2020-07-05 14:39:35 +03:00
extensions.findByType<JavaPluginExtension>()?.apply {
targetCompatibility = Scientifik.JVM_TARGET
}
2020-07-05 14:39:35 +03:00
tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = Scientifik.JVM_TARGET.toString()
2019-07-21 17:40:08 +03:00
}
2020-07-05 14:39:35 +03:00
}
2019-07-21 17:40:08 +03:00
2020-07-05 14:39:35 +03:00
configure<KotlinJvmProjectExtension> {
2019-11-01 22:06:41 +03:00
2020-07-05 14:39:35 +03:00
val sourceSet = sourceSets["main"].apply {
languageSettings.applySettings()
dependencies {
api(kotlin("stdlib-jdk8"))
2019-07-21 17:40:08 +03:00
}
2020-07-05 14:39:35 +03:00
}
2020-07-05 14:39:35 +03:00
sourceSets["test"].apply {
languageSettings.applySettings()
dependencies {
implementation(kotlin("test"))
2020-04-07 12:49:40 +03:00
// implementation(kotlin("test-junit"))
2020-07-05 14:39:35 +03:00
implementation(kotlin("test-junit5"))
implementation("org.junit.jupiter:junit-jupiter:5.6.1")
2019-11-01 22:06:41 +03:00
}
2020-07-05 14:39:35 +03:00
}
2019-11-01 22:06:41 +03:00
2020-07-05 14:39:35 +03:00
val sourcesJar by tasks.registering(Jar::class) {
archiveClassifier.set("sources")
from(sourceSet.kotlin.srcDirs.first())
}
2020-07-05 14:39:35 +03:00
pluginManager.withPlugin("maven-publish") {
2020-07-05 14:39:35 +03:00
configure<PublishingExtension> {
publications {
register("jvm", MavenPublication::class) {
from(components["java"])
artifact(sourcesJar.get())
}
}
2020-07-05 14:39:35 +03:00
}
2020-07-05 14:39:35 +03:00
pluginManager.withPlugin("org.jetbrains.dokka") {
logger.info("Adding dokka functionality to project ${project.name}")
2019-11-17 21:41:23 +03:00
2020-07-05 14:39:35 +03:00
val dokka by tasks.getting(DokkaTask::class) {
outputFormat = "html"
outputDirectory = "$buildDir/javadoc"
}
2020-07-05 14:39:35 +03:00
val kdocJar by tasks.registering(Jar::class) {
group = JavaBasePlugin.DOCUMENTATION_GROUP
dependsOn(dokka)
archiveClassifier.set("javadoc")
from("$buildDir/javadoc")
}
2020-07-05 14:39:35 +03:00
configure<PublishingExtension> {
publications {
getByName("jvm") {
this as MavenPublication
artifact(kdocJar.get())
}
}
}
}
2019-07-21 17:40:08 +03:00
}
}
2020-07-06 09:52:54 +03:00
tasks.apply {
withType<Test>() {
useJUnitPlatform()
}
val processResources by getting(Copy::class)
processResources.copyJVMResources(configurations["runtimeClasspath"])
2020-07-05 14:39:35 +03:00
}
2019-07-21 17:40:08 +03:00
}
2020-07-05 14:39:35 +03:00
}