From a3f82f875dc24f0cbd7f07462ee4e67f0cce9924 Mon Sep 17 00:00:00 2001 From: subochev Date: Tue, 15 Sep 2026 23:13:02 +0300 Subject: [PATCH] =?UTF-8?q?build:=20projectVersion=20=D0=B2=D1=8B=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=B2=D0=BB=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=20beforeEvaluate=20(=D0=BB=D0=BE=D0=B2?= =?UTF-8?q?=D0=B8=D1=82=20KMP)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В предыдущей версии subprojects { version = ... } выставляло version ПОСЛЕ того как KMP-плагин создал publications. Для большинства модулей это работало (Gradle пересчитывал version в публикации lazy), но для :standalone плагин shadow + ленивая KMP-инициализация приводили к тому, что publication 'kotlinMultiplatform' всё-таки создавалась с пустой version → 'InvalidMavenPublicationException: version cannot be empty' ТОЛЬКО в CI (локально работало — потому что Gradle Daemon прогревал метаданные и не доходил до этого пути). Фикс: subprojects.beforeEvaluate { version = rootProject.extra['projectVersion'] } выполняется до применения любых plugins → project.version гарантированно не 'unspecified' к моменту создания публикации. --- build.gradle.kts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index def4bc8..7753edd 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -32,9 +32,18 @@ val binomRepoPassword = (findProperty("binom.repo.password") as String? ?: "").t subprojects { group = rootProject.group - // Передаём вычисленную projectVersion, а не rootProject.version (который - // в момент apply ещё может быть "unspecified" для subproject'ов). - version = rootProject.extra["projectVersion"] as String + + // KMP-плагин читает project.version на ранней стадии evaluation — ДО того + // как сработает внешний subprojects-блок. Если version ещё "unspecified", + // publication 'kotlinMultiplatform' создаётся с пустой version, и тогда + // maven-publish падает с 'InvalidMavenPublicationException: version cannot + // be empty'. Поэтому: + // 1) eagerly переопределяем version в rootProject.extra (см. выше) + // 2) на КАЖДЫЙ subproject вешаем beforeEvaluate, который выставляет + // version до того, как KMP-плагин начнёт создавать publications. + beforeEvaluate { + version = rootProject.extra["projectVersion"] as String + } apply(plugin = "maven-publish")