From a253039a6f951561a8f82274da3373358e02c580 Mon Sep 17 00:00:00 2001 From: Christoph Hegemann Date: Thu, 5 Nov 2026 09:30:34 +0100 Subject: [PATCH 1/2] Publish scip-kotlin-analysis with JetBrains-only jars bundled scip-java 0.14.0 depends on scip-kotlin-analysis, which was never published, so org.scip-code:scip-java:0.14.0 does not resolve from Maven Central and the release-cli job failed. The Analysis API *-for-ide artifacts and the IntelliJ coroutines fork only exist on JetBrains' repository, so they are merged into the scip-kotlin-analysis jar and the published POM references only Maven Central artifacts. kotlin-compiler-common-for-ide is dropped: kotlin-compiler 2.4.0 already contains the decompiler classes it was added for, and kotlin-compiler already won every class the two jars share on the classpath. Amp-Thread-ID: https://ampcode.com/threads/T-01a1aac9-e7b5-72af-ad93-8f4a2a058fac Co-authored-by: Amp --- gradle/libs.versions.toml | 1 - scip-kotlin-analysis/build.gradle.kts | 36 +++++++++++++++++++-------- 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 17d7f9540..d55b4a94d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -31,7 +31,6 @@ kotlin-analysis-api-k2 = { module = "org.jetbrains.kotlin:analysis-api-k2-for-id kotlin-analysis-api-platform-interface = { module = "org.jetbrains.kotlin:analysis-api-platform-interface-for-ide", version.ref = "kotlin-analysis-api" } kotlin-analysis-api-standalone = { module = "org.jetbrains.kotlin:analysis-api-standalone-for-ide", version.ref = "kotlin-analysis-api" } kotlin-analysis-compiler = { module = "org.jetbrains.kotlin:kotlin-compiler", version.ref = "kotlin-analysis-api" } -kotlin-analysis-compiler-common = { module = "org.jetbrains.kotlin:kotlin-compiler-common-for-ide", version.ref = "kotlin-analysis-api" } kotlin-analysis-low-level-api-fir = { module = "org.jetbrains.kotlin:low-level-api-fir-for-ide", version.ref = "kotlin-analysis-api" } kotlin-analysis-symbol-light-classes = { module = "org.jetbrains.kotlin:symbol-light-classes-for-ide", version.ref = "kotlin-analysis-api" } kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" } diff --git a/scip-kotlin-analysis/build.gradle.kts b/scip-kotlin-analysis/build.gradle.kts index f500d908c..6b6312a61 100644 --- a/scip-kotlin-analysis/build.gradle.kts +++ b/scip-kotlin-analysis/build.gradle.kts @@ -1,10 +1,26 @@ plugins { id("scip.java-library") id("scip.kotlin-jvm") + id("scip.maven-publish") } description = "Standalone Kotlin SCIP indexer built on the Kotlin Analysis API" +// The Analysis API `*-for-ide` artifacts and the IntelliJ coroutines fork are only +// published to JetBrains' repository, not Maven Central. They are merged into this +// module's jar, so the published POM only references Maven Central artifacts. +val bundled: Configuration by configurations.creating { + isCanBeConsumed = false +} +configurations.compileOnly { extendsFrom(bundled) } +configurations.testImplementation { extendsFrom(bundled) } + +tasks.named("jar") { + from({ bundled.map { zipTree(it) } }) { + exclude("META-INF/MANIFEST.MF") + } +} + // The Analysis API `*-for-ide` artifacts have unusable POM metadata (they drag in // IDE-only dependencies), so every artifact is pinned non-transitively — the same // approach used by Dokka's analysis-kotlin-symbols and KSP2. `kotlin-compiler` @@ -12,21 +28,19 @@ description = "Standalone Kotlin SCIP indexer built on the Kotlin Analysis API" dependencies { implementation(project(":scip-shared")) implementation(libs.scip.kotlin.bindings) + implementation(libs.kotlin.stdlib) implementation(libs.kotlin.analysis.compiler) { isTransitive = false } - implementation(libs.kotlin.analysis.api.api) { isTransitive = false } - implementation(libs.kotlin.analysis.api.standalone) { isTransitive = false } + bundled(libs.kotlin.analysis.api.api) { isTransitive = false } + bundled(libs.kotlin.analysis.api.standalone) { isTransitive = false } + bundled(libs.kotlin.analysis.api.impl.base) { isTransitive = false } + bundled(libs.kotlin.analysis.api.k2) { isTransitive = false } + bundled(libs.kotlin.analysis.low.level.api.fir) { isTransitive = false } + bundled(libs.kotlin.analysis.api.platform.`interface`) { isTransitive = false } + bundled(libs.kotlin.analysis.symbol.light.classes) { isTransitive = false } + bundled(libs.kotlinx.coroutines.core.jvm) { isTransitive = false } - runtimeOnly(libs.kotlin.analysis.api.impl.base) { isTransitive = false } - runtimeOnly(libs.kotlin.analysis.api.k2) { isTransitive = false } - // Provides org.jetbrains.kotlin.analysis.decompiler.* which is no longer - // bundled in kotlin-compiler as of the 2.4 line. - runtimeOnly(libs.kotlin.analysis.compiler.common) { isTransitive = false } - runtimeOnly(libs.kotlin.analysis.low.level.api.fir) { isTransitive = false } - runtimeOnly(libs.kotlin.analysis.api.platform.`interface`) { isTransitive = false } - runtimeOnly(libs.kotlin.analysis.symbol.light.classes) { isTransitive = false } runtimeOnly(libs.caffeine) - runtimeOnly(libs.kotlinx.coroutines.core.jvm) runtimeOnly(libs.kotlinx.collections.immutable.jvm) runtimeOnly(libs.kotlinx.serialization.json.jvm) From 899442cefc6be7286e36512a533b733053e4acce Mon Sep 17 00:00:00 2001 From: Christoph Hegemann Date: Thu, 5 Nov 2026 10:32:31 +0100 Subject: [PATCH 2/2] Build the release launcher with cs bootstrap --assembly The --standalone launcher keeps dependency jars nested inside the launcher jar, so the Kotlin compiler cannot locate extensions/compiler-cli-root.xml on disk and Kotlin indexing fails with "Unable to find extension point configuration". An --assembly launcher merges the dependencies into a single jar, which works. Amp-Thread-ID: https://ampcode.com/threads/T-01a1aac9-e7b5-72af-ad93-8f4a2a058fac Co-authored-by: Amp --- .github/workflows/release-cli.yaml | 2 +- docs/getting-started.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release-cli.yaml b/.github/workflows/release-cli.yaml index 2ff045ed1..2c8b56998 100644 --- a/.github/workflows/release-cli.yaml +++ b/.github/workflows/release-cli.yaml @@ -54,7 +54,7 @@ jobs: done cs bootstrap \ - --standalone \ + --assembly \ -o scip-java \ "$ARTIFACT" \ --main org.scip_code.scip_java.ScipJava diff --git a/docs/getting-started.md b/docs/getting-started.md index 5205703b4..3c5c5cae9 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -90,7 +90,7 @@ binary. # macOS/Linux curl -fLo coursier https://git.io/coursier-cli \ && chmod +x coursier \ - && ./coursier bootstrap --standalone -o scip-java org.scip-code:scip-java:@STABLE_VERSION@ --main org.scip_code.scip_java.ScipJava + && ./coursier bootstrap --assembly -o scip-java org.scip-code:scip-java:@STABLE_VERSION@ --main org.scip_code.scip_java.ScipJava ./scip-java --help ```