plot-api/build.gradle.kts (180 lines of code) (raw):
/*
* Copyright (c) 2021. JetBrains s.r.o.
* Use of this source code is governed by the MIT license that can be found in the LICENSE file.
*/
plugins {
kotlin("multiplatform")
id("org.jetbrains.dokka")
`maven-publish`
signing
}
val letsPlotVersion = extra["letsPlot.version"] as String
val kotlinxDatetimeVersion = extra["kotlinx.datetime.version"] as String
val kotlinLoggingVersion = extra["kotlinLogging.version"] as String
val kotlinxCoroutinesVersion = extra["kotlinx.coroutines.version"] as String
val assertjVersion = extra["assertj.version"] as String
kotlin {
jvm()
js().browser()
sourceSets {
commonMain {
dependencies {
api("org.jetbrains.lets-plot:commons:$letsPlotVersion")
api("org.jetbrains.lets-plot:datamodel:$letsPlotVersion")
api("org.jetbrains.lets-plot:plot-base:$letsPlotVersion")
api("org.jetbrains.lets-plot:plot-builder:$letsPlotVersion")
api("org.jetbrains.lets-plot:plot-stem:$letsPlotVersion")
// Required for proper building of Kotlin/JS artifacts.
implementation("org.jetbrains.kotlinx:kotlinx-datetime:${kotlinxDatetimeVersion}")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:${kotlinxCoroutinesVersion}")
}
}
commonTest {
dependencies {
implementation(kotlin("test"))
implementation("org.jetbrains.kotlinx:kotlinx-datetime:${kotlinxDatetimeVersion}")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:${kotlinxCoroutinesVersion}")
}
}
named("jvmMain") {
dependencies {
// implementation("io.github.microutils:kotlin-logging:$kotlinLoggingVersion")
api("org.jetbrains.lets-plot:lets-plot-common:$letsPlotVersion")
api("io.github.microutils:kotlin-logging-jvm:$kotlinLoggingVersion")
// Use "-jvm" variant to work around the issue where LPK JS (IR) artifact becomes dependent on
// the "kotlinx-datetime".
// See also:
// https://youtrack.jetbrains.com/issue/KT-52812/JSIR-compiler-error-Could-not-find-orgjetbrainskotlinxkotlinx-datetime-in-USERLibraryApplication-Supportkotlindaemon
// compileOnly("org.jetbrains.kotlinx:kotlinx-datetime-jvm:$kotlinxDatetimeVersion")
compileOnly("org.jetbrains.lets-plot:lets-plot-batik:$letsPlotVersion")
compileOnly("org.jetbrains.lets-plot:lets-plot-jfx:$letsPlotVersion")
compileOnly("org.jetbrains.lets-plot:lets-plot-image-export:$letsPlotVersion")
}
}
named("jsMain") {
dependencies {
implementation("io.github.microutils:kotlin-logging-js:$kotlinLoggingVersion")
}
}
jvmTest {
dependencies {
implementation("org.assertj:assertj-core:$assertjVersion")
}
}
}
}
tasks.withType<org.jetbrains.dokka.gradle.DokkaTask>().configureEach {
dokkaSourceSets.configureEach {
skipDeprecated.set(true)
includes.from("${rootProject.projectDir}/docs/dokka/source/packages.md")
perPackageOption {
matchingRegex.set(""".*\.frontend.*""")
suppress.set(true)
}
perPackageOption {
matchingRegex.set(""".*\.intern.*""")
suppress.set(true)
}
perPackageOption {
matchingRegex.set(""".*\.intern\.layer.*""")
suppress.set(false)
}
}
}
val artifactBaseName = "lets-plot-kotlin"
val artifactGroupId = project.group as String
val artifactVersion = project.version as String
val jarJavaDocs by tasks.creating(Jar::class) {
archiveClassifier.set("javadoc")
group = "lets plot"
from("$rootDir/README.md")
}
afterEvaluate {
publishing {
publications {
// Build artifact "lets-plot-kotlin-kernel" with no dependencies in POM.
create<MavenPublication>("letsPlotKotlinKernel") {
artifactId = "$artifactBaseName-kernel"
val jvmJar: Task by tasks
val jvmSourcesJar: Task by tasks
artifact(jvmJar)
artifact(jvmSourcesJar)
pom {
name.set("Lets-Plot Kotlin API (for Jupyter Kotlin Kernel)")
description.set("Lets-Plot Kotlin API without dependencies.")
}
}
}
publications.forEach {
with(it as MavenPublication) {
groupId = artifactGroupId
version = artifactVersion
if (!artifactId.startsWith(artifactBaseName)) {
// Default multiplatform artifacts: rename.
artifactId = artifactId.replace(project.name, artifactBaseName)
pom {
name.set("Lets-Plot Kotlin API")
description.set("Lets-Plot Kotlin API.")
}
}
// Add "Javadocs" to each publication or Maven won't publish it.
artifact(jarJavaDocs)
pom {
url.set("https://github.com/JetBrains/lets-plot-kotlin")
licenses {
license {
name.set("MIT")
url.set("https://raw.githubusercontent.com/JetBrains/lets-plot-kotlin/master/LICENSE")
}
}
developers {
developer {
id.set("jetbrains")
name.set("JetBrains")
email.set("lets-plot@jetbrains.com")
}
}
scm {
url.set("https://github.com/JetBrains/lets-plot-kotlin")
}
}
// Sign all publications.
if (!(project.version as String).contains("SNAPSHOT")) {
signing.sign(it)
}
}
}
repositories {
mavenLocal {
val localMavenRepository: String by project
url = uri(localMavenRepository)
}
maven {
if (version.toString().endsWith("-SNAPSHOT")) {
url = uri(rootProject.project.extra["mavenSnapshotPublishUrl"].toString())
credentials {
username = rootProject.project.extra["sonatypeUsername"].toString()
password = rootProject.project.extra["sonatypePassword"].toString()
}
} else {
url = uri(rootProject.project.extra["mavenReleasePublishUrl"].toString())
}
}
}
}
}
tasks {
// Store versions in properties to later access at runtime.
val saveVersions by creating {
doLast {
File("${projectDir}/src/jvmMain/resources/letsPlotKotlinAPI/", "version.properties").writeText(
"""
lets_plot.version=$letsPlotVersion
lets_plot_kotlin_api.version=${project.version}
""".trimIndent()
)
}
}
//compileKotlin.dependsOn += saveVersions
val jvmMainClasses by getting {
dependsOn += saveVersions
}
}
//task printIt {
// print("${project.name}: ${uri(project.localMavenRepository)}")
//}
tasks {
// Copy resources from resources/jvm/main to classes/kotlin/jvm/main to fix:
// https://youtrack.jetbrains.com/issue/KTIJ-16582/Consumer-Kotlin-JVM-library-cannot-access-a-Kotlin-Multiplatform-JVM-target-resources-in-multi-module-Gradle-project
val jvmProcessResources by getting
val fixMissingResources by creating(Copy::class) {
dependsOn(jvmProcessResources)
from(layout.buildDirectory.dir("processedResources/jvm/main"))
into(layout.buildDirectory.dir("classes/kotlin/jvm/main"))
}
// Set EXCLUDE strategy for duplicates to avoid conflicts when building DMG deliverable.
// See: https://github.com/JetBrains/lets-plot-kotlin/issues/279
val jvmJar by getting(Jar::class) {
dependsOn(fixMissingResources)
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}
}
tasks.named("jvmTest") {
dependsOn("fixMissingResources")
}