diff --git a/build.gradle.kts b/build.gradle.kts index 6fc47f9a63d..b4d1bc16cbd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -752,6 +752,34 @@ tasks { ) } + register("publishIdeArtifacts") { + dependsOn( + ":prepare:ide-artifacts:android-extensions-compiler-plugin-for-ide:publish", + ":prepare:ide-artifacts:allopen-compiler-plugin-for-ide:publish", + ":prepare:ide-artifacts:allopen-compiler-plugin-tests-for-ide:publish", + ":prepare:ide-artifacts:incremental-compilation-impl-tests-for-ide:publish", + ":prepare:ide-artifacts:kotlin-build-common-tests-for-ide:publish", + ":prepare:ide-artifacts:kotlin-compiler-for-ide:publish", + ":prepare:ide-artifacts:kotlin-dist-for-ide:publish", + ":prepare:ide-artifacts:kotlin-gradle-statistics-for-ide:publish", + ":prepare:ide-artifacts:kotlinx-serialization-compiler-plugin-for-ide:publish", + ":prepare:ide-artifacts:noarg-compiler-plugin-for-ide:publish", + ":prepare:ide-artifacts:sam-with-receiver-compiler-plugin-for-ide:publish", + ":prepare:ide-artifacts:tests-common-tests-for-ide:publish", + ":prepare:ide-artifacts:compiler-components-for-jps:publish", + ":kotlin-script-runtime:publish", + ":kotlin-script-util:publish", + ":kotlin-scripting-common:publish", + ":kotlin-scripting-jvm:publish", + ":kotlin-scripting-compiler:publish", + ":kotlin-scripting-compiler-impl:publish", + ":kotlin-android-extensions-runtime:publish", + ":kotlin-stdlib:publish", + ":kotlin-stdlib-jdk7:publish", + ":kotlin-stdlib-jdk8:publish", + ":kotlin-reflect:publish" + ) + } register("test") { doLast { diff --git a/buildSrc/src/main/kotlin/artifacts.kt b/buildSrc/src/main/kotlin/artifacts.kt index c57403bf016..2b340ac25ad 100644 --- a/buildSrc/src/main/kotlin/artifacts.kt +++ b/buildSrc/src/main/kotlin/artifacts.kt @@ -9,10 +9,12 @@ import org.gradle.api.artifacts.ConfigurationContainer import org.gradle.api.artifacts.component.ProjectComponentIdentifier import org.gradle.api.file.DuplicatesStrategy import org.gradle.api.plugins.BasePluginConvention +import org.gradle.api.plugins.JavaPlugin import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.Upload import org.gradle.api.tasks.javadoc.Javadoc import org.gradle.jvm.tasks.Jar +import org.gradle.api.artifacts.dsl.DependencyHandler import org.gradle.kotlin.dsl.* @@ -155,6 +157,74 @@ fun Project.publish(body: Upload.() -> Unit = {}): Upload { } } +fun Project.publishProjectJars(projects: List, libraryDependencies: List = emptyList()) { + apply() + + val fatJarContents by configurations.creating + + dependencies { + for (projectName in projects) { + fatJarContents(project(projectName)) { isTransitive = false } + } + + for (libraryDependency in libraryDependencies) { + fatJarContents(libraryDependency) + } + } + + publish() + + val jar: Jar by tasks + + jar.apply { + dependsOn(fatJarContents) + + from { + fatJarContents.map(::zipTree) + } + } + + sourcesJar { + from { + projects.map { + project(it).mainSourceSet.allSource + } + } + } + + javadocJar() +} + +fun Project.publishTestJar(projectName: String) { + apply() + + val fatJarContents by configurations.creating + + dependencies { + fatJarContents(project(projectName, configuration = "tests-jar")) { isTransitive = false } + } + + publish() + + val jar: Jar by tasks + + jar.apply { + dependsOn(fatJarContents) + + from { + fatJarContents.map(::zipTree) + } + } + + sourcesJar { + from { + project(projectName).testSourceSet.allSource + } + } + + javadocJar() +} + fun ConfigurationContainer.getOrCreate(name: String): Configuration = findByName(name) ?: create(name) fun Jar.setupPublicJar(baseName: String, classifier: String = "") { diff --git a/prepare/ide-artifacts/allopen-compiler-plugin-for-ide/build.gradle.kts b/prepare/ide-artifacts/allopen-compiler-plugin-for-ide/build.gradle.kts new file mode 100644 index 00000000000..23180379109 --- /dev/null +++ b/prepare/ide-artifacts/allopen-compiler-plugin-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishProjectJars(listOf(":kotlin-allopen-compiler-plugin")) \ No newline at end of file diff --git a/prepare/ide-artifacts/allopen-compiler-plugin-tests-for-ide/build.gradle.kts b/prepare/ide-artifacts/allopen-compiler-plugin-tests-for-ide/build.gradle.kts new file mode 100644 index 00000000000..d64a5e6cea9 --- /dev/null +++ b/prepare/ide-artifacts/allopen-compiler-plugin-tests-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishTestJar(":compiler:incremental-compilation-impl") \ No newline at end of file diff --git a/prepare/ide-artifacts/android-extensions-compiler-plugin-for-ide/build.gradle.kts b/prepare/ide-artifacts/android-extensions-compiler-plugin-for-ide/build.gradle.kts new file mode 100644 index 00000000000..6c009085720 --- /dev/null +++ b/prepare/ide-artifacts/android-extensions-compiler-plugin-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishProjectJars(listOf(":plugins:android-extensions-compiler")) \ No newline at end of file diff --git a/prepare/ide-artifacts/compiler-components-for-jps/build.gradle.kts b/prepare/ide-artifacts/compiler-components-for-jps/build.gradle.kts new file mode 100644 index 00000000000..b7d931ef9a1 --- /dev/null +++ b/prepare/ide-artifacts/compiler-components-for-jps/build.gradle.kts @@ -0,0 +1,6 @@ +@Suppress("UNCHECKED_CAST") +val compilerComponentProjects = project(":kotlin-jps-plugin").extra["compilerComponents"] as List + +val otherProjects = listOf(":kotlin-daemon-client") + +publishProjectJars(compilerComponentProjects + otherProjects) \ No newline at end of file diff --git a/prepare/ide-artifacts/incremental-compilation-impl-tests-for-ide/build.gradle.kts b/prepare/ide-artifacts/incremental-compilation-impl-tests-for-ide/build.gradle.kts new file mode 100644 index 00000000000..d64a5e6cea9 --- /dev/null +++ b/prepare/ide-artifacts/incremental-compilation-impl-tests-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishTestJar(":compiler:incremental-compilation-impl") \ No newline at end of file diff --git a/prepare/ide-artifacts/kotlin-build-common-tests-for-ide/build.gradle.kts b/prepare/ide-artifacts/kotlin-build-common-tests-for-ide/build.gradle.kts new file mode 100644 index 00000000000..6451f546258 --- /dev/null +++ b/prepare/ide-artifacts/kotlin-build-common-tests-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishTestJar(":kotlin-build-common") \ No newline at end of file diff --git a/prepare/ide-artifacts/kotlin-compiler-for-ide/build.gradle.kts b/prepare/ide-artifacts/kotlin-compiler-for-ide/build.gradle.kts new file mode 100644 index 00000000000..bd27c1d06d4 --- /dev/null +++ b/prepare/ide-artifacts/kotlin-compiler-for-ide/build.gradle.kts @@ -0,0 +1,27 @@ +val compilerModules: Array by rootProject.extra + +val excludedCompilerModules = listOf( + ":compiler:cli-js-klib", + ":compiler:javac-wrapper", + ":compiler:backend.js", + ":compiler:backend.wasm", + ":js:js.dce", + ":compiler:ir.serialization.js", + ":compiler:incremental-compilation-impl", + ":compiler:fir:raw-fir:light-tree2fir" +) + +val projects = compilerModules.asList() - excludedCompilerModules + listOf( + ":kotlin-compiler-runner", + ":kotlin-preloader", + ":daemon-common", + ":daemon-common-new", + ":kotlin-daemon", + ":kotlin-daemon-client", + ":kotlin-daemon-client-new" +) + +publishProjectJars( + projects = projects, + libraryDependencies = listOf(protobufFull()) +) \ No newline at end of file diff --git a/prepare/ide-artifacts/kotlin-dist-for-ide/build.gradle.kts b/prepare/ide-artifacts/kotlin-dist-for-ide/build.gradle.kts new file mode 100644 index 00000000000..240cb98e31f --- /dev/null +++ b/prepare/ide-artifacts/kotlin-dist-for-ide/build.gradle.kts @@ -0,0 +1,18 @@ +plugins { + java +} + +publish() + +val jar: Jar by tasks + +jar.apply { + val distKotlincTask = project(":kotlin-compiler").tasks.getByName("distKotlinc") + + dependsOn(distKotlincTask) + from(distKotlincTask) + +} + +sourcesJar() +javadocJar() \ No newline at end of file diff --git a/prepare/ide-artifacts/kotlin-gradle-statistics-for-ide/build.gradle.kts b/prepare/ide-artifacts/kotlin-gradle-statistics-for-ide/build.gradle.kts new file mode 100644 index 00000000000..7c6fb1c99fe --- /dev/null +++ b/prepare/ide-artifacts/kotlin-gradle-statistics-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishProjectJars(listOf(":kotlin-gradle-statistics")) \ No newline at end of file diff --git a/prepare/ide-artifacts/kotlinx-serialization-compiler-plugin-for-ide/build.gradle.kts b/prepare/ide-artifacts/kotlinx-serialization-compiler-plugin-for-ide/build.gradle.kts new file mode 100644 index 00000000000..b03f44031d0 --- /dev/null +++ b/prepare/ide-artifacts/kotlinx-serialization-compiler-plugin-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishProjectJars(listOf(":kotlinx-serialization-compiler-plugin")) \ No newline at end of file diff --git a/prepare/ide-artifacts/noarg-compiler-plugin-for-ide/build.gradle.kts b/prepare/ide-artifacts/noarg-compiler-plugin-for-ide/build.gradle.kts new file mode 100644 index 00000000000..de5d0135c65 --- /dev/null +++ b/prepare/ide-artifacts/noarg-compiler-plugin-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishProjectJars(listOf(":kotlin-noarg-compiler-plugin")) \ No newline at end of file diff --git a/prepare/ide-artifacts/sam-with-receiver-compiler-plugin-for-ide/build.gradle.kts b/prepare/ide-artifacts/sam-with-receiver-compiler-plugin-for-ide/build.gradle.kts new file mode 100644 index 00000000000..da1075f9838 --- /dev/null +++ b/prepare/ide-artifacts/sam-with-receiver-compiler-plugin-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishProjectJars(listOf(":kotlin-sam-with-receiver-compiler-plugin")) \ No newline at end of file diff --git a/prepare/ide-artifacts/tests-common-tests-for-ide/build.gradle.kts b/prepare/ide-artifacts/tests-common-tests-for-ide/build.gradle.kts new file mode 100644 index 00000000000..6c9602f0180 --- /dev/null +++ b/prepare/ide-artifacts/tests-common-tests-for-ide/build.gradle.kts @@ -0,0 +1 @@ +publishTestJar(":compiler:tests-common") \ No newline at end of file diff --git a/prepare/jps-plugin/build.gradle.kts b/prepare/jps-plugin/build.gradle.kts index 9e7339f2a21..cbaf10b8c1c 100644 --- a/prepare/jps-plugin/build.gradle.kts +++ b/prepare/jps-plugin/build.gradle.kts @@ -4,29 +4,32 @@ plugins { java } -val projectsToShadow = listOf( - ":core:type-system", - ":kotlin-build-common", - ":kotlin-util-io", - ":kotlin-util-klib", - ":kotlin-util-klib-metadata", - ":compiler:cli-common", - ":kotlin-compiler-runner", - ":daemon-common", - ":daemon-common-new", - ":core:descriptors", - ":core:descriptors.jvm", - ":idea:idea-jps-common", - ":jps-plugin", - ":kotlin-preloader", - ":compiler:util", - ":compiler:config", - ":compiler:config.jvm", - ":js:js.config", - ":core:util.runtime", - ":compiler:compiler.version" +val compilerComponents by extra( + listOf( + ":core:type-system", + ":kotlin-build-common", + ":kotlin-util-io", + ":kotlin-util-klib", + ":kotlin-util-klib-metadata", + ":compiler:cli-common", + ":kotlin-compiler-runner", + ":daemon-common", + ":daemon-common-new", + ":core:descriptors", + ":core:descriptors.jvm", + ":idea:idea-jps-common", + ":kotlin-preloader", + ":compiler:util", + ":compiler:config", + ":compiler:config.jvm", + ":js:js.config", + ":core:util.runtime", + ":compiler:compiler.version" + ) ) +val projectsToShadow = compilerComponents + listOf(":jps-plugin") + dependencies { projectsToShadow.forEach { embedded(project(it)) { isTransitive = false } diff --git a/settings.gradle b/settings.gradle index 37e4d085ed1..619db126a73 100644 --- a/settings.gradle +++ b/settings.gradle @@ -306,6 +306,20 @@ include ":kotlin-build-common", ":kotlin-serialization-unshaded", ":kotlin-serialization:plugin-marker" +include ":prepare:ide-artifacts:android-extensions-compiler-plugin-for-ide", + ":prepare:ide-artifacts:allopen-compiler-plugin-for-ide", + ":prepare:ide-artifacts:allopen-compiler-plugin-tests-for-ide", + ":prepare:ide-artifacts:incremental-compilation-impl-tests-for-ide", + ":prepare:ide-artifacts:kotlin-build-common-tests-for-ide", + ":prepare:ide-artifacts:kotlin-compiler-for-ide", + ":prepare:ide-artifacts:kotlin-dist-for-ide", + ":prepare:ide-artifacts:kotlin-gradle-statistics-for-ide", + ":prepare:ide-artifacts:kotlinx-serialization-compiler-plugin-for-ide", + ":prepare:ide-artifacts:noarg-compiler-plugin-for-ide", + ":prepare:ide-artifacts:sam-with-receiver-compiler-plugin-for-ide", + ":prepare:ide-artifacts:tests-common-tests-for-ide", + ":prepare:ide-artifacts:compiler-components-for-jps" + if (buildProperties.includeCidrPlugins) { logger.info("Including CIDR modules in settings.gradle") include ":kotlin-ultimate:ide:cidr-gradle-tooling", @@ -404,6 +418,19 @@ project(':kotlinx-metadata').projectDir = "$rootDir/libraries/kotlinx-metadata" project(':kotlinx-metadata-jvm').projectDir = "$rootDir/libraries/kotlinx-metadata/jvm" as File project(':kotlinx-metadata-klib').projectDir = "$rootDir/libraries/kotlinx-metadata/klib" as File project(':kotlin-compiler').projectDir = "$rootDir/prepare/compiler" as File +project(':prepare:ide-artifacts:android-extensions-compiler-plugin-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/android-extensions-compiler-plugin-for-ide" as File +project(':prepare:ide-artifacts:allopen-compiler-plugin-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/allopen-compiler-plugin-for-ide" as File +project(':prepare:ide-artifacts:allopen-compiler-plugin-tests-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/allopen-compiler-plugin-tests-for-ide" as File +project(':prepare:ide-artifacts:incremental-compilation-impl-tests-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/incremental-compilation-impl-tests-for-ide" as File +project(':prepare:ide-artifacts:kotlin-build-common-tests-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/kotlin-build-common-tests-for-ide" as File +project(':prepare:ide-artifacts:kotlin-compiler-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/kotlin-compiler-for-ide" as File +project(':prepare:ide-artifacts:kotlin-dist-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/kotlin-dist-for-ide" as File +project(':prepare:ide-artifacts:kotlin-gradle-statistics-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/kotlin-gradle-statistics-for-ide" as File +project(':prepare:ide-artifacts:kotlinx-serialization-compiler-plugin-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/kotlinx-serialization-compiler-plugin-for-ide" as File +project(':prepare:ide-artifacts:noarg-compiler-plugin-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/noarg-compiler-plugin-for-ide" as File +project(':prepare:ide-artifacts:sam-with-receiver-compiler-plugin-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/sam-with-receiver-compiler-plugin-for-ide" as File +project(':prepare:ide-artifacts:tests-common-tests-for-ide').projectDir = "$rootDir/prepare/ide-artifacts/tests-common-tests-for-ide" as File +project(':prepare:ide-artifacts:compiler-components-for-jps').projectDir = "$rootDir/prepare/ide-artifacts/compiler-components-for-jps" as File project(':kotlin-compiler-embeddable').projectDir = "$rootDir/prepare/compiler-embeddable" as File project(':kotlin-compiler-client-embeddable').projectDir = "$rootDir/prepare/compiler-client-embeddable" as File project(':kotlin-preloader').projectDir = "$rootDir/compiler/preloader" as File