From eb2162987b9d89977247bde4c90eae11f7a64d4c Mon Sep 17 00:00:00 2001 From: Andrey Mischenko Date: Wed, 17 Apr 2019 17:24:06 +0800 Subject: [PATCH 1/3] WIP move config to buildSrc --- .gitignore | 2 +- build.gradle.kts | 209 +----------------- buildSrc/build.gradle.kts | 18 ++ buildSrc/settings.gradle.kts | 0 buildSrc/src/main/kotlin/Dep.kt | 10 + .../main/kotlin/artifactory-config.gradle.kts | 38 ++++ .../src/main/kotlin/bintray-config.gradle.kts | 97 ++++++++ buildSrc/src/main/kotlin/js-test.gradle.kts | 45 ++++ .../kotlin/multiplatform-config.gradle.kts | 124 +++++++++++ gradle.properties | 1 + gradle/artifactory.gradle | 31 --- gradle/bintray.gradle | 85 ------- gradle/wrapper/gradle-wrapper.properties | 2 +- kmath-commons/build.gradle.kts | 6 +- kmath-core/build.gradle.kts | 6 +- kmath-coroutines/build.gradle.kts | 24 +- kmath-histograms/build.gradle.kts | 15 +- kmath-io/build.gradle | 4 +- kmath-koma/build.gradle.kts | 19 +- kmath-memory/build.gradle.kts | 13 +- kmath-sequential/build.gradle.kts | 24 +- settings.gradle.kts | 3 - 22 files changed, 390 insertions(+), 386 deletions(-) create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/settings.gradle.kts create mode 100644 buildSrc/src/main/kotlin/Dep.kt create mode 100644 buildSrc/src/main/kotlin/artifactory-config.gradle.kts create mode 100644 buildSrc/src/main/kotlin/bintray-config.gradle.kts create mode 100644 buildSrc/src/main/kotlin/js-test.gradle.kts create mode 100644 buildSrc/src/main/kotlin/multiplatform-config.gradle.kts create mode 100644 gradle.properties delete mode 100644 gradle/artifactory.gradle delete mode 100644 gradle/bintray.gradle diff --git a/.gitignore b/.gitignore index a9294eff9..3a6e6e10a 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ build/ out/ .idea/ +*.iml # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) !gradle-wrapper.jar @@ -9,4 +10,3 @@ out/ # Cache of project .gradletasknamecache -gradle.properties \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index b4610930e..5e0a91447 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,45 +1,6 @@ -import com.moowork.gradle.node.NodeExtension -import com.moowork.gradle.node.npm.NpmTask -import com.moowork.gradle.node.task.NodeTask -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile - -buildscript { - val kotlinVersion: String by rootProject.extra("1.3.30") - val ioVersion: String by rootProject.extra("0.1.5") - val coroutinesVersion: String by rootProject.extra("1.2.0") - val atomicfuVersion: String by rootProject.extra("0.12.1") - val dokkaVersion: String by rootProject.extra("0.9.17") - val serializationVersion: String by rootProject.extra("0.10.0") - - repositories { - jcenter() - maven("https://dl.bintray.com/kotlin/kotlin-eap") - } - - dependencies { - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") - classpath("org.jfrog.buildinfo:build-info-extractor-gradle:4+") - classpath("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4") - classpath("org.jetbrains.dokka:dokka-gradle-plugin:$dokkaVersion") - //classpath("org.jetbrains.kotlin:kotlin-frontend-plugin:0.0.45") - //classpath("org.openjfx:javafx-plugin:0.0.7") - } -} - -plugins { - id("com.jfrog.artifactory") version "4.9.1" apply false - id("com.moowork.node") version "1.3.1" apply false -} - val kmathVersion by extra("0.1.2-dev-1") allprojects { - apply(plugin = "maven") - apply(plugin = "maven-publish") - apply(plugin = "com.jfrog.artifactory") - repositories { jcenter() maven("https://kotlin.bintray.com/kotlinx") @@ -49,12 +10,11 @@ allprojects { } subprojects { - if(name.startsWith("kmath")) { - // apply bintray configuration - apply(from = "${rootProject.rootDir}/gradle/bintray.gradle") - - //apply artifactory configuration - apply(from = "${rootProject.rootDir}/gradle/artifactory.gradle") + // Actually, probably we should apply it to plugins explicitly + // We also can merge them to single kmath-publish plugin + if (name.startsWith("kmath")) { + apply(plugin = "bintray-config") + apply(plugin = "artifactory-config") } // dokka { // outputFormat = "html" @@ -65,161 +25,4 @@ subprojects { // from javadoc . destinationDir // classifier = "javadoc" // } - - // Create empty jar for sources classifier to satisfy maven requirements - val stubSources by tasks.registering(Jar::class) { - archiveClassifier.set("sources") - //from(sourceSets.main.get().allSource) - } - - // Create empty jar for javadoc classifier to satisfy maven requirements - val stubJavadoc by tasks.registering(Jar::class) { - archiveClassifier.set("javadoc") - } - - tasks.withType { - kotlinOptions { - jvmTarget = "1.8" - } - } - - - afterEvaluate { - extensions.findByType()?.apply { - jvm { - compilations.all { - kotlinOptions { - jvmTarget = "1.8" - //freeCompilerArgs = listOf("-Xno-call-assertions", "-Xno-param-assertions") - } - } - } - - js { - compilations.all { - tasks.getByName(compileKotlinTaskName) { - kotlinOptions { - metaInfo = true - sourceMap = true - sourceMapEmbedSources = "always" - moduleKind = "commonjs" - } - } - } - - configure(listOf(compilations["main"])) { - tasks.getByName(compileKotlinTaskName) { - kotlinOptions { - main = "call" - } - } - } - - - val runJsTests by ext(false) - - if(runJsTests) { - apply(plugin = "com.moowork.node") - configure { - nodeModulesDir = file("$buildDir/node_modules") - } - - val compileKotlinJs by tasks.getting(Kotlin2JsCompile::class) - val compileTestKotlinJs by tasks.getting(Kotlin2JsCompile::class) - - val populateNodeModules by tasks.registering(Copy::class) { - dependsOn(compileKotlinJs) - from(compileKotlinJs.destinationDir) - - compilations["test"].runtimeDependencyFiles.forEach { - if (it.exists() && !it.isDirectory) { - from(zipTree(it.absolutePath).matching { include("*.js") }) - } - } - - into("$buildDir/node_modules") - } - - val installMocha by tasks.registering(NpmTask::class) { - setWorkingDir(buildDir) - setArgs(listOf("install", "mocha")) - } - - val runMocha by tasks.registering(NodeTask::class) { - dependsOn(compileTestKotlinJs, populateNodeModules, installMocha) - setScript(file("$buildDir/node_modules/mocha/bin/mocha")) - setArgs(listOf(compileTestKotlinJs.outputFile)) - } - - tasks["jsTest"].dependsOn(runMocha) - } - } - - sourceSets { - - val commonMain by getting { - dependencies { - api(kotlin("stdlib")) - } - } - val commonTest by getting { - dependencies { - implementation(kotlin("test-common")) - implementation(kotlin("test-annotations-common")) - } - } - val jvmMain by getting { - dependencies { - api(kotlin("stdlib-jdk8")) - } - } - val jvmTest by getting { - dependencies { - implementation(kotlin("test")) - implementation(kotlin("test-junit")) - } - } - val jsMain by getting { - dependencies { - api(kotlin("stdlib-js")) - } - } - val jsTest by getting { - dependencies { - implementation(kotlin("test-js")) - } - } - } - - targets.all { - sourceSets.all { - languageSettings.progressiveMode = true - languageSettings.enableLanguageFeature("InlineClasses") - languageSettings.useExperimentalAnnotation("ExperimentalContracts") - //languageSettings.enableLanguageFeature("Contracts") - } - } - - configure { - - publications.filterIsInstance().forEach { publication -> - if (publication.name == "kotlinMultiplatform") { - // for our root metadata publication, set artifactId with a package and project name - publication.artifactId = project.name - } else { - // for targets, set artifactId with a package, project name and target name (e.g. iosX64) - publication.artifactId = "${project.name}-${publication.name}" - } - } - - targets.all { - val publication = publications.findByName(name) as MavenPublication - - // Patch publications with fake javadoc - publication.artifact(stubJavadoc.get()) - } - } - } - } - -} \ No newline at end of file +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 000000000..65827214c --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + `kotlin-dsl` +} + +repositories { + gradlePluginPortal() + jcenter() +} + +val kotlinVersion = "1.3.30" + +// Add plugins used in buildSrc as dependencies, also we should specify version only here +dependencies { + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion") + implementation("org.jfrog.buildinfo:build-info-extractor-gradle:4.9.5") + implementation("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4") + implementation("com.moowork.gradle:gradle-node-plugin:1.3.1") +} diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 000000000..e69de29bb diff --git a/buildSrc/src/main/kotlin/Dep.kt b/buildSrc/src/main/kotlin/Dep.kt new file mode 100644 index 000000000..87f963643 --- /dev/null +++ b/buildSrc/src/main/kotlin/Dep.kt @@ -0,0 +1,10 @@ +// Instead of defining runtime properties and use them dynamically +// define version in buildSrc and have autocompletion and compile-time check +// Also dependencies itself can be moved here +object Ver { + val ioVersion = "0.1.5" + val coroutinesVersion = "1.1.1" + val atomicfuVersion = "0.12.4" + // This version is not used and IDEA shows this property as unused + val dokkaVersion = "0.9.17" +} diff --git a/buildSrc/src/main/kotlin/artifactory-config.gradle.kts b/buildSrc/src/main/kotlin/artifactory-config.gradle.kts new file mode 100644 index 000000000..7445c8b49 --- /dev/null +++ b/buildSrc/src/main/kotlin/artifactory-config.gradle.kts @@ -0,0 +1,38 @@ +import org.jfrog.gradle.plugin.artifactory.dsl.PublisherConfig +import org.jfrog.gradle.plugin.artifactory.dsl.ResolverConfig +import groovy.lang.GroovyObject + +plugins { + id("com.jfrog.artifactory") +} + +artifactory { + val artifactoryUser: String? by project + val artifactoryPassword: String? by project + val artifactoryContextUrl = "http://npm.mipt.ru:8081/artifactory" + + setContextUrl(artifactoryContextUrl)//The base Artifactory URL if not overridden by the publisher/resolver + publish(delegateClosureOf { + repository(delegateClosureOf { + setProperty("repoKey", "gradle-dev-local") + setProperty("username", artifactoryUser) + setProperty("password", artifactoryPassword) + }) + + defaults(delegateClosureOf{ + invokeMethod("publications", arrayOf("jvm", "js", "kotlinMultiplatform", "metadata")) + //TODO: This property is not available for ArtifactoryTask + //setProperty("publishBuildInfo", false) + setProperty("publishArtifacts", true) + setProperty("publishPom", true) + setProperty("publishIvy", false) + }) + }) + resolve(delegateClosureOf { + repository(delegateClosureOf { + setProperty("repoKey", "gradle-dev") + setProperty("username", artifactoryUser) + setProperty("password", artifactoryPassword) + }) + }) +} diff --git a/buildSrc/src/main/kotlin/bintray-config.gradle.kts b/buildSrc/src/main/kotlin/bintray-config.gradle.kts new file mode 100644 index 000000000..29a81f617 --- /dev/null +++ b/buildSrc/src/main/kotlin/bintray-config.gradle.kts @@ -0,0 +1,97 @@ +@file:Suppress("UnstableApiUsage") + +import com.jfrog.bintray.gradle.BintrayExtension.PackageConfig +import com.jfrog.bintray.gradle.BintrayExtension.VersionConfig + +// Old bintray.gradle script converted to real Gradle plugin (precompiled script plugin) +// It now has own dependencies and support type safe accessors +// Syntax is pretty close to what we had in Groovy +// (excluding Property.set and bintray dynamic configs) + +plugins { + id("com.jfrog.bintray") + `maven-publish` +} + +val vcs = "https://github.com/mipt-npm/kmath" + +// Configure publishing +publishing { + repositories { + maven("https://bintray.com/mipt-npm/scientifik") + } + + // Process each publication we have in this project + publications.filterIsInstance().forEach { publication -> + + // use type safe pom config GSL insterad of old dynamic + publication.pom { + name.set(project.name) + description.set(project.description) + url.set(vcs) + + licenses { + license { + name.set("The Apache Software License, Version 2.0") + url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") + distribution.set("repo") + } + } + developers { + developer { + id.set("MIPT-NPM") + name.set("MIPT nuclear physics methods laboratory") + organization.set("MIPT") + organizationUrl.set("http://npm.mipt.ru") + } + + } + scm { + url.set(vcs) + } + } + + } +} + +bintray { + // delegates for runtime properties + val bintrayUser: String? by project + val bintrayApiKey: String? by project + user = bintrayUser ?: System.getenv("BINTRAY_USER") + key = bintrayApiKey ?: System.getenv("BINTRAY_API_KEY") + publish = true + override = true // for multi-platform Kotlin/Native publishing + + // We have to use delegateClosureOf because bintray supports only dynamic groovy syntax + // this is a problem of this plugin + pkg(delegateClosureOf { + userOrg = "mipt-npm" + repo = "scientifik" + name = "scientifik.kmath" + issueTrackerUrl = "https://github.com/mipt-npm/kmath/issues" + setLicenses("Apache-2.0") + vcsUrl = vcs + version(delegateClosureOf { + name = project.version.toString() + vcsTag = project.version.toString() + released = java.util.Date().toString() + }) + }) + + tasks { + bintrayUpload { + dependsOn(publishToMavenLocal) + doFirst { + setPublications(project.publishing.publications + .filterIsInstance() + .filter { !it.name.contains("-test") && it.name != "kotlinMultiplatform" } + .map { + println("""Uploading artifact "${it.groupId}:${it.artifactId}:${it.version}" from publication "${it.name}""") + it.name //https://github.com/bintray/gradle-bintray-plugin/issues/256 + }) + } + } + + } +} diff --git a/buildSrc/src/main/kotlin/js-test.gradle.kts b/buildSrc/src/main/kotlin/js-test.gradle.kts new file mode 100644 index 000000000..2b79ec8f5 --- /dev/null +++ b/buildSrc/src/main/kotlin/js-test.gradle.kts @@ -0,0 +1,45 @@ +import com.moowork.gradle.node.npm.NpmTask +import com.moowork.gradle.node.task.NodeTask +import org.gradle.api.tasks.Copy +import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.gradle.kotlin.dsl.* + +plugins { + id("com.moowork.node") + kotlin("multiplatform") +} + +node { + nodeModulesDir = file("$buildDir/node_modules") +} + +val compileKotlinJs by tasks.getting(Kotlin2JsCompile::class) +val compileTestKotlinJs by tasks.getting(Kotlin2JsCompile::class) + +val populateNodeModules by tasks.registering(Copy::class) { + dependsOn(compileKotlinJs) + from(compileKotlinJs.destinationDir) + + kotlin.js().compilations["test"].runtimeDependencyFiles.forEach { + if (it.exists() && !it.isDirectory) { + from(zipTree(it.absolutePath).matching { include("*.js") }) + } + } + + into("$buildDir/node_modules") +} + +val installMocha by tasks.registering(NpmTask::class) { + setWorkingDir(buildDir) + setArgs(listOf("install", "mocha")) +} + +val runMocha by tasks.registering(NodeTask::class) { + dependsOn(compileTestKotlinJs, populateNodeModules, installMocha) + setScript(file("$buildDir/node_modules/mocha/bin/mocha")) + setArgs(listOf(compileTestKotlinJs.outputFile)) +} + +tasks["jsTest"].dependsOn(runMocha) + + diff --git a/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts b/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts new file mode 100644 index 000000000..0008a72eb --- /dev/null +++ b/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts @@ -0,0 +1,124 @@ +import com.moowork.gradle.node.NodeExtension +import com.moowork.gradle.node.npm.NpmTask +import com.moowork.gradle.node.task.NodeTask +import org.gradle.kotlin.dsl.* +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension +import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("multiplatform") + `maven-publish` +} + + +kotlin { + jvm { + compilations.all { + kotlinOptions { + jvmTarget = "1.8" + } + } + } + + js { + compilations.all { + kotlinOptions { + metaInfo = true + sourceMap = true + sourceMapEmbedSources = "always" + moduleKind = "commonjs" + } + } + + compilations.named("main") { + kotlinOptions { + main = "call" + } + } + } + + sourceSets.invoke { + commonMain { + dependencies { + api(kotlin("stdlib")) + } + } + commonTest { + dependencies { + implementation(kotlin("test-common")) + implementation(kotlin("test-annotations-common")) + } + } + "jvmMain" { + dependencies { + api(kotlin("stdlib-jdk8")) + } + } + "jvmTest" { + dependencies { + implementation(kotlin("test")) + implementation(kotlin("test-junit")) + } + } + "jsMain" { + dependencies { + api(kotlin("stdlib-js")) + } + } + "jsTest" { + dependencies { + implementation(kotlin("test-js")) + } + } + } + + targets.all { + sourceSets.all { + languageSettings.progressiveMode = true + languageSettings.enableLanguageFeature("InlineClasses") + languageSettings.useExperimentalAnnotation("ExperimentalContracts") + //languageSettings.enableLanguageFeature("Contracts") + } + } + + // Create empty jar for sources classifier to satisfy maven requirements + tasks.register("stubSources") { + archiveClassifier.set("sources") + //from(sourceSets.main.get().allSource) + } + + // Create empty jar for javadoc classifier to satisfy maven requirements + val stubJavadoc by tasks.registering(Jar::class) { + archiveClassifier.set("javadoc") + } + + + publishing { + + publications.filterIsInstance().forEach { publication -> + if (publication.name == "kotlinMultiplatform") { + // for our root metadata publication, set artifactId with a package and project name + publication.artifactId = project.name + } else { + // for targets, set artifactId with a package, project name and target name (e.g. iosX64) + publication.artifactId = "${project.name}-${publication.name}" + } + } + + targets.all { + val publication = publications.findByName(name) as MavenPublication + + // Patch publications with fake javadoc + publication.artifact(stubJavadoc.get()) + } + } + + // Apply JS test configuration + val runJsTests by ext(false) + + if (runJsTests) { + apply(plugin = "js-test") + } + +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 000000000..1e453aace --- /dev/null +++ b/gradle.properties @@ -0,0 +1 @@ +runJsTests=false diff --git a/gradle/artifactory.gradle b/gradle/artifactory.gradle deleted file mode 100644 index 12e59642b..000000000 --- a/gradle/artifactory.gradle +++ /dev/null @@ -1,31 +0,0 @@ -apply plugin: "com.jfrog.artifactory" - -artifactory { - def artifactory_user = project.hasProperty('artifactoryUser') ? project.property('artifactoryUser') : "" - def artifactory_password = project.hasProperty('artifactoryPassword') ? project.property('artifactoryPassword') : "" - def artifactory_contextUrl = 'http://npm.mipt.ru:8081/artifactory' - - contextUrl = artifactory_contextUrl //The base Artifactory URL if not overridden by the publisher/resolver - publish { - repository { - repoKey = 'gradle-dev-local' - username = artifactory_user - password = artifactory_password - } - - defaults { - publications('jvm', 'js', 'kotlinMultiplatform', 'metadata') - publishBuildInfo = false - publishArtifacts = true - publishPom = true - publishIvy = false - } - } - resolve { - repository { - repoKey = 'gradle-dev' - username = artifactory_user - password = artifactory_password - } - } -} \ No newline at end of file diff --git a/gradle/bintray.gradle b/gradle/bintray.gradle deleted file mode 100644 index 8da83c860..000000000 --- a/gradle/bintray.gradle +++ /dev/null @@ -1,85 +0,0 @@ -apply plugin: 'com.jfrog.bintray' - -def vcs = "https://github.com/mipt-npm/kmath" - -def pomConfig = { - licenses { - license { - name "The Apache Software License, Version 2.0" - url "http://www.apache.org/licenses/LICENSE-2.0.txt" - distribution "repo" - } - } - developers { - developer { - id "MIPT-NPM" - name "MIPT nuclear physics methods laboratory" - organization "MIPT" - organizationUrl "http://npm.mipt.ru" - } - } - scm { - url vcs - } -} - -project.ext.configureMavenCentralMetadata = { pom -> - def root = asNode() - root.appendNode('name', project.name) - root.appendNode('description', project.description) - root.appendNode('url', vcs) - root.children().last() + pomConfig -} - -project.ext.configurePom = pomConfig - - -// Configure publishing -publishing { - repositories { - maven { - url = "https://bintray.com/mipt-npm/scientifik" - } - } - - // Process each publication we have in this project - publications.all { publication -> - // apply changes to pom.xml files, see pom.gradle - pom.withXml(configureMavenCentralMetadata) - - - } -} - -bintray { - user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : System.getenv('BINTRAY_USER') - key = project.hasProperty('bintrayApiKey') ? project.property('bintrayApiKey') : System.getenv('BINTRAY_API_KEY') - publish = true - override = true // for multi-platform Kotlin/Native publishing - - pkg { - userOrg = "mipt-npm" - repo = "scientifik" - name = "scientifik.kmath" - issueTrackerUrl = "https://github.com/mipt-npm/kmath/issues" - licenses = ['Apache-2.0'] - vcsUrl = vcs - version { - name = project.version - vcsTag = project.version - released = new Date() - } - } -} - -bintrayUpload.dependsOn publishToMavenLocal - -// This is for easier debugging of bintray uploading problems -bintrayUpload.doFirst { - publications = project.publishing.publications.findAll { - !it.name.contains('-test') && it.name != 'kotlinMultiplatform' - }.collect { - println("Uploading artifact '$it.groupId:$it.artifactId:$it.version' from publication '$it.name'") - it.name//https://github.com/bintray/gradle-bintray-plugin/issues/256 - } -} \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 75b8c7c8c..5f1b1201a 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/kmath-commons/build.gradle.kts b/kmath-commons/build.gradle.kts index 0ea7b7eff..ad8b3912a 100644 --- a/kmath-commons/build.gradle.kts +++ b/kmath-commons/build.gradle.kts @@ -15,15 +15,15 @@ dependencies { val sourcesJar by tasks.registering(Jar::class) { - classifier = "sources" + archiveClassifier.set("sources") from(sourceSets.main.get().allSource) } publishing { publications { - register("jvm", MavenPublication::class) { + register("jvm") { from(components["java"]) artifact(sourcesJar.get()) } } -} \ No newline at end of file +} diff --git a/kmath-core/build.gradle.kts b/kmath-core/build.gradle.kts index ab6ae7822..93f4a1af6 100644 --- a/kmath-core/build.gradle.kts +++ b/kmath-core/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - kotlin("multiplatform") + id("multiplatform-config") } val ioVersion: String by rootProject.extra @@ -10,7 +10,7 @@ kotlin { js() sourceSets { - val commonMain by getting { + commonMain { dependencies { api(project(":kmath-memory")) } @@ -20,4 +20,4 @@ kotlin { // mingwTest { // } } -} \ No newline at end of file +} diff --git a/kmath-coroutines/build.gradle.kts b/kmath-coroutines/build.gradle.kts index c73d4e4dc..d249e1c48 100644 --- a/kmath-coroutines/build.gradle.kts +++ b/kmath-coroutines/build.gradle.kts @@ -1,43 +1,41 @@ plugins { - kotlin("multiplatform") + id("multiplatform-config") } -val coroutinesVersion: String by rootProject.extra - kotlin { jvm() js() - sourceSets { - val commonMain by getting { + sourceSets.invoke { + commonMain { dependencies { api(project(":kmath-core")) - api("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$coroutinesVersion") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:${Ver.coroutinesVersion}") } } - val commonTest by getting { + commonTest { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) } } - val jvmMain by getting { + "jvmMain" { dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutinesVersion") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Ver.coroutinesVersion}") } } - val jvmTest by getting { + "jvmTest" { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) } } - val jsMain by getting { + "jsMain" { dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:$coroutinesVersion") + api("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:${Ver.coroutinesVersion}") } } - val jsTest by getting { + "jsTest" { dependencies { implementation(kotlin("test-js")) } diff --git a/kmath-histograms/build.gradle.kts b/kmath-histograms/build.gradle.kts index 81b3fb83f..069c11bc9 100644 --- a/kmath-histograms/build.gradle.kts +++ b/kmath-histograms/build.gradle.kts @@ -1,34 +1,33 @@ plugins { - kotlin("multiplatform") + id("multiplatform-config") } kotlin { jvm() js() - sourceSets { - - val commonMain by getting { + sourceSets.invoke { + commonMain { dependencies { api(project(":kmath-core")) } } - val commonTest by getting { + commonTest { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) } } - val jvmTest by getting { + "jvmTest" { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) } } - val jsTest by getting { + "jsTest" { dependencies { implementation(kotlin("test-js")) } } } -} \ No newline at end of file +} diff --git a/kmath-io/build.gradle b/kmath-io/build.gradle index 28fb7eee5..4b1470835 100644 --- a/kmath-io/build.gradle +++ b/kmath-io/build.gradle @@ -16,7 +16,7 @@ kotlin { dependencies { api project(":kmath-core") implementation 'org.jetbrains.kotlin:kotlin-stdlib-common' - api "org.jetbrains.kotlinx:kotlinx-io:$ioVersion" + api "org.jetbrains.kotlinx:kotlinx-io:${Ver.ioVersion}" } } commonTest { @@ -28,7 +28,7 @@ kotlin { jvmMain { dependencies { implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' - api "org.jetbrains.kotlinx:kotlinx-io-jvm:$ioVersion" + api "org.jetbrains.kotlinx:kotlinx-io-jvm:${Ver.ioVersion}" } } jvmTest { diff --git a/kmath-koma/build.gradle.kts b/kmath-koma/build.gradle.kts index b95aaf3c8..5d8e10cb1 100644 --- a/kmath-koma/build.gradle.kts +++ b/kmath-koma/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - kotlin("multiplatform") + id("multiplatform-config") } repositories { @@ -10,48 +10,47 @@ kotlin { jvm { compilations.all { kotlinOptions { - jvmTarget = "1.8" freeCompilerArgs += "-progressive" } } } js() - sourceSets { + sourceSets.invoke { - val commonMain by getting { + commonMain { dependencies { api(project(":kmath-core")) api("com.kyonifer:koma-core-api-common:0.12") } } - val commonTest by getting { + commonTest { dependencies { implementation(kotlin("test-common")) implementation(kotlin("test-annotations-common")) } } - val jvmMain by getting { + "jvmMain" { dependencies { api("com.kyonifer:koma-core-api-jvm:0.12") } } - val jvmTest by getting { + "jvmTest" { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) implementation("com.kyonifer:koma-core-ejml:0.12") } } - val jsMain by getting { + "jsMain" { dependencies { api("com.kyonifer:koma-core-api-js:0.12") } } - val jsTest by getting { + "jsTest" { dependencies { implementation(kotlin("test-js")) } } } -} \ No newline at end of file +} diff --git a/kmath-memory/build.gradle.kts b/kmath-memory/build.gradle.kts index 03a05c9fe..12cce0bbb 100644 --- a/kmath-memory/build.gradle.kts +++ b/kmath-memory/build.gradle.kts @@ -1,16 +1,9 @@ plugins { - kotlin("multiplatform") + id("multiplatform-config") } -val ioVersion: String by rootProject.extra - - +// We actually don't need this, we define jvm and js targets in multiplatform-config kotlin { jvm() js() -// mingwMain { -// } -// mingwTest { -// } - -} \ No newline at end of file +} diff --git a/kmath-sequential/build.gradle.kts b/kmath-sequential/build.gradle.kts index 9ca7a35ad..6309d97d0 100644 --- a/kmath-sequential/build.gradle.kts +++ b/kmath-sequential/build.gradle.kts @@ -1,30 +1,28 @@ plugins { - kotlin("multiplatform") - id("kotlinx-atomicfu") version "0.12.4" + id("multiplatform-config") + id("kotlinx-atomicfu") version Ver.atomicfuVersion } -val atomicfuVersion: String by rootProject.extra - kotlin { - jvm () + jvm() js() - sourceSets { - val commonMain by getting { + sourceSets.invoke { + commonMain { dependencies { api(project(":kmath-core")) api(project(":kmath-coroutines")) - compileOnly("org.jetbrains.kotlinx:atomicfu-common:$atomicfuVersion") + compileOnly("org.jetbrains.kotlinx:atomicfu-common:${Ver.atomicfuVersion}") } } - val jvmMain by getting { + "jvmMain" { dependencies { - compileOnly("org.jetbrains.kotlinx:atomicfu:$atomicfuVersion") + compileOnly("org.jetbrains.kotlinx:atomicfu:${Ver.atomicfuVersion}") } } - val jsMain by getting { + "jsMain" { dependencies { - compileOnly("org.jetbrains.kotlinx:atomicfu-js:$atomicfuVersion") + compileOnly("org.jetbrains.kotlinx:atomicfu-js:${Ver.atomicfuVersion}") } } @@ -33,4 +31,4 @@ kotlin { atomicfu { variant = "VH" -} \ No newline at end of file +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 69b1f90fe..8684de3ee 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,9 +10,6 @@ pluginManagement { "kotlinx-atomicfu" -> { useModule("org.jetbrains.kotlinx:atomicfu-gradle-plugin:${requested.version}") } - "kotlin-multiplatform" ->{ - useModule("org.jetbrains.kotlin:kotlin-gradle-plugin:${requested.version}") - } } } } From f797d7b082ac594874914314f8ba75986d6b3163 Mon Sep 17 00:00:00 2001 From: Andrey Mischenko Date: Tue, 23 Apr 2019 17:47:57 +0800 Subject: [PATCH 2/3] Use type safe accessors for sourceSets that available now with multiplatform-config --- .../src/main/kotlin/multiplatform-config.gradle.kts | 6 ------ kmath-core/build.gradle.kts | 3 --- kmath-coroutines/build.gradle.kts | 13 +++++-------- kmath-histograms/build.gradle.kts | 9 +++------ kmath-koma/build.gradle.kts | 12 +++++------- kmath-memory/build.gradle.kts | 6 ------ kmath-sequential/build.gradle.kts | 9 +++------ 7 files changed, 16 insertions(+), 42 deletions(-) diff --git a/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts b/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts index 0008a72eb..dddb51730 100644 --- a/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts +++ b/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts @@ -1,10 +1,4 @@ -import com.moowork.gradle.node.NodeExtension -import com.moowork.gradle.node.npm.NpmTask -import com.moowork.gradle.node.task.NodeTask import org.gradle.kotlin.dsl.* -import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension -import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { kotlin("multiplatform") diff --git a/kmath-core/build.gradle.kts b/kmath-core/build.gradle.kts index 93f4a1af6..6faba5a1b 100644 --- a/kmath-core/build.gradle.kts +++ b/kmath-core/build.gradle.kts @@ -6,9 +6,6 @@ val ioVersion: String by rootProject.extra kotlin { - jvm() - js() - sourceSets { commonMain { dependencies { diff --git a/kmath-coroutines/build.gradle.kts b/kmath-coroutines/build.gradle.kts index d249e1c48..627b475d5 100644 --- a/kmath-coroutines/build.gradle.kts +++ b/kmath-coroutines/build.gradle.kts @@ -3,10 +3,7 @@ plugins { } kotlin { - jvm() - js() - - sourceSets.invoke { + sourceSets { commonMain { dependencies { api(project(":kmath-core")) @@ -19,23 +16,23 @@ kotlin { implementation(kotlin("test-annotations-common")) } } - "jvmMain" { + jvmMain { dependencies { api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Ver.coroutinesVersion}") } } - "jvmTest" { + jvmTest { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) } } - "jsMain" { + jsMain { dependencies { api("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:${Ver.coroutinesVersion}") } } - "jsTest" { + jsTest { dependencies { implementation(kotlin("test-js")) } diff --git a/kmath-histograms/build.gradle.kts b/kmath-histograms/build.gradle.kts index 069c11bc9..61eb61a43 100644 --- a/kmath-histograms/build.gradle.kts +++ b/kmath-histograms/build.gradle.kts @@ -3,10 +3,7 @@ plugins { } kotlin { - jvm() - js() - - sourceSets.invoke { + sourceSets { commonMain { dependencies { api(project(":kmath-core")) @@ -18,13 +15,13 @@ kotlin { implementation(kotlin("test-annotations-common")) } } - "jvmTest" { + jvmTest { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) } } - "jsTest" { + jsTest { dependencies { implementation(kotlin("test-js")) } diff --git a/kmath-koma/build.gradle.kts b/kmath-koma/build.gradle.kts index 5d8e10cb1..4270ab7d5 100644 --- a/kmath-koma/build.gradle.kts +++ b/kmath-koma/build.gradle.kts @@ -14,10 +14,8 @@ kotlin { } } } - js() - - sourceSets.invoke { + sourceSets { commonMain { dependencies { api(project(":kmath-core")) @@ -30,24 +28,24 @@ kotlin { implementation(kotlin("test-annotations-common")) } } - "jvmMain" { + jvmMain { dependencies { api("com.kyonifer:koma-core-api-jvm:0.12") } } - "jvmTest" { + jvmTest { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) implementation("com.kyonifer:koma-core-ejml:0.12") } } - "jsMain" { + jsMain { dependencies { api("com.kyonifer:koma-core-api-js:0.12") } } - "jsTest" { + jsTest { dependencies { implementation(kotlin("test-js")) } diff --git a/kmath-memory/build.gradle.kts b/kmath-memory/build.gradle.kts index 12cce0bbb..e23030fba 100644 --- a/kmath-memory/build.gradle.kts +++ b/kmath-memory/build.gradle.kts @@ -1,9 +1,3 @@ plugins { id("multiplatform-config") } - -// We actually don't need this, we define jvm and js targets in multiplatform-config -kotlin { - jvm() - js() -} diff --git a/kmath-sequential/build.gradle.kts b/kmath-sequential/build.gradle.kts index 6309d97d0..8d24f8cc9 100644 --- a/kmath-sequential/build.gradle.kts +++ b/kmath-sequential/build.gradle.kts @@ -4,10 +4,7 @@ plugins { } kotlin { - jvm() - js() - - sourceSets.invoke { + sourceSets { commonMain { dependencies { api(project(":kmath-core")) @@ -15,12 +12,12 @@ kotlin { compileOnly("org.jetbrains.kotlinx:atomicfu-common:${Ver.atomicfuVersion}") } } - "jvmMain" { + jvmMain { dependencies { compileOnly("org.jetbrains.kotlinx:atomicfu:${Ver.atomicfuVersion}") } } - "jsMain" { + jsMain { dependencies { compileOnly("org.jetbrains.kotlinx:atomicfu-js:${Ver.atomicfuVersion}") } From bae77b6979a92fbb67e0346a506def5260c8b5e0 Mon Sep 17 00:00:00 2001 From: Andrey Mischenko Date: Tue, 23 Apr 2019 18:07:36 +0800 Subject: [PATCH 3/3] Use type safe plugin accessors, collapse some nested DSLs, removed duplicate declarations --- benchmarks/build.gradle | 2 +- .../kotlin/multiplatform-config.gradle.kts | 2 + kmath-core/build.gradle.kts | 22 +++---- kmath-coroutines/build.gradle.kts | 47 +++++---------- kmath-histograms/build.gradle.kts | 30 ++-------- kmath-koma/build.gradle.kts | 57 ++++++------------- kmath-memory/build.gradle.kts | 2 +- kmath-sequential/build.gradle.kts | 38 ++++++------- 8 files changed, 66 insertions(+), 134 deletions(-) diff --git a/benchmarks/build.gradle b/benchmarks/build.gradle index 989590397..7c948e219 100644 --- a/benchmarks/build.gradle +++ b/benchmarks/build.gradle @@ -21,7 +21,7 @@ dependencies { //jmh project(':kmath-core') } -jmh{ +jmh { warmupIterations = 1 } diff --git a/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts b/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts index dddb51730..1d40a1114 100644 --- a/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts +++ b/buildSrc/src/main/kotlin/multiplatform-config.gradle.kts @@ -11,6 +11,8 @@ kotlin { compilations.all { kotlinOptions { jvmTarget = "1.8" + // This was used in kmath-koma, but probably if we need it better to apply it for all modules + //freeCompilerArgs += "-progressive" } } } diff --git a/kmath-core/build.gradle.kts b/kmath-core/build.gradle.kts index 6faba5a1b..b24d41a87 100644 --- a/kmath-core/build.gradle.kts +++ b/kmath-core/build.gradle.kts @@ -1,20 +1,14 @@ plugins { - id("multiplatform-config") + `multiplatform-config` } -val ioVersion: String by rootProject.extra - - -kotlin { - sourceSets { - commonMain { - dependencies { - api(project(":kmath-memory")) - } +kotlin.sourceSets { + commonMain { + dependencies { + api(project(":kmath-memory")) } -// mingwMain { -// } -// mingwTest { -// } } + //mingwMain {} + //mingwTest {} } + diff --git a/kmath-coroutines/build.gradle.kts b/kmath-coroutines/build.gradle.kts index 627b475d5..e72514803 100644 --- a/kmath-coroutines/build.gradle.kts +++ b/kmath-coroutines/build.gradle.kts @@ -1,41 +1,22 @@ plugins { - id("multiplatform-config") + `multiplatform-config` } -kotlin { - sourceSets { - commonMain { - dependencies { - api(project(":kmath-core")) - api("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:${Ver.coroutinesVersion}") - } +kotlin.sourceSets { + commonMain { + dependencies { + api(project(":kmath-core")) + api("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:${Ver.coroutinesVersion}") } - commonTest { - dependencies { - implementation(kotlin("test-common")) - implementation(kotlin("test-annotations-common")) - } + } + jvmMain { + dependencies { + api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Ver.coroutinesVersion}") } - jvmMain { - dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core:${Ver.coroutinesVersion}") - } - } - jvmTest { - dependencies { - implementation(kotlin("test")) - implementation(kotlin("test-junit")) - } - } - jsMain { - dependencies { - api("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:${Ver.coroutinesVersion}") - } - } - jsTest { - dependencies { - implementation(kotlin("test-js")) - } + } + jsMain { + dependencies { + api("org.jetbrains.kotlinx:kotlinx-coroutines-core-js:${Ver.coroutinesVersion}") } } } diff --git a/kmath-histograms/build.gradle.kts b/kmath-histograms/build.gradle.kts index 61eb61a43..a65115f90 100644 --- a/kmath-histograms/build.gradle.kts +++ b/kmath-histograms/build.gradle.kts @@ -1,30 +1,10 @@ plugins { - id("multiplatform-config") + `multiplatform-config` } -kotlin { - sourceSets { - commonMain { - dependencies { - api(project(":kmath-core")) - } - } - commonTest { - dependencies { - implementation(kotlin("test-common")) - implementation(kotlin("test-annotations-common")) - } - } - jvmTest { - dependencies { - implementation(kotlin("test")) - implementation(kotlin("test-junit")) - } - } - jsTest { - dependencies { - implementation(kotlin("test-js")) - } - } +// Just an example how we can collapse nested DSL for simple declarations +kotlin.sourceSets.commonMain { + dependencies { + api(project(":kmath-core")) } } diff --git a/kmath-koma/build.gradle.kts b/kmath-koma/build.gradle.kts index 4270ab7d5..5942182d5 100644 --- a/kmath-koma/build.gradle.kts +++ b/kmath-koma/build.gradle.kts @@ -1,54 +1,31 @@ plugins { - id("multiplatform-config") + `multiplatform-config` } repositories { maven("http://dl.bintray.com/kyonifer/maven") } -kotlin { - jvm { - compilations.all { - kotlinOptions { - freeCompilerArgs += "-progressive" - } +kotlin.sourceSets { + commonMain { + dependencies { + api(project(":kmath-core")) + api("com.kyonifer:koma-core-api-common:0.12") } } - - sourceSets { - commonMain { - dependencies { - api(project(":kmath-core")) - api("com.kyonifer:koma-core-api-common:0.12") - } + jvmMain { + dependencies { + api("com.kyonifer:koma-core-api-jvm:0.12") } - commonTest { - dependencies { - implementation(kotlin("test-common")) - implementation(kotlin("test-annotations-common")) - } + } + jvmTest { + dependencies { + implementation("com.kyonifer:koma-core-ejml:0.12") } - jvmMain { - dependencies { - api("com.kyonifer:koma-core-api-jvm:0.12") - } - } - jvmTest { - dependencies { - implementation(kotlin("test")) - implementation(kotlin("test-junit")) - implementation("com.kyonifer:koma-core-ejml:0.12") - } - } - jsMain { - dependencies { - api("com.kyonifer:koma-core-api-js:0.12") - } - } - jsTest { - dependencies { - implementation(kotlin("test-js")) - } + } + jsMain { + dependencies { + api("com.kyonifer:koma-core-api-js:0.12") } } } diff --git a/kmath-memory/build.gradle.kts b/kmath-memory/build.gradle.kts index e23030fba..c42d35c3a 100644 --- a/kmath-memory/build.gradle.kts +++ b/kmath-memory/build.gradle.kts @@ -1,3 +1,3 @@ plugins { - id("multiplatform-config") + `multiplatform-config` } diff --git a/kmath-sequential/build.gradle.kts b/kmath-sequential/build.gradle.kts index 8d24f8cc9..26449f6d4 100644 --- a/kmath-sequential/build.gradle.kts +++ b/kmath-sequential/build.gradle.kts @@ -1,29 +1,27 @@ plugins { - id("multiplatform-config") + `multiplatform-config` id("kotlinx-atomicfu") version Ver.atomicfuVersion } -kotlin { - sourceSets { - commonMain { - dependencies { - api(project(":kmath-core")) - api(project(":kmath-coroutines")) - compileOnly("org.jetbrains.kotlinx:atomicfu-common:${Ver.atomicfuVersion}") - } +kotlin.sourceSets { + commonMain { + dependencies { + api(project(":kmath-core")) + api(project(":kmath-coroutines")) + compileOnly("org.jetbrains.kotlinx:atomicfu-common:${Ver.atomicfuVersion}") } - jvmMain { - dependencies { - compileOnly("org.jetbrains.kotlinx:atomicfu:${Ver.atomicfuVersion}") - } - } - jsMain { - dependencies { - compileOnly("org.jetbrains.kotlinx:atomicfu-js:${Ver.atomicfuVersion}") - } - } - } + jvmMain { + dependencies { + compileOnly("org.jetbrains.kotlinx:atomicfu:${Ver.atomicfuVersion}") + } + } + jsMain { + dependencies { + compileOnly("org.jetbrains.kotlinx:atomicfu-js:${Ver.atomicfuVersion}") + } + } + } atomicfu {