Spec-Zone.ru › Kotlin 2

Настройка публикации мультиплатформенной библиотеки

Вы можете настроить публикацию мультиплатформенной библиотеки в разных местах:

  • В локальный репозиторий Maven

  • В репозиторий Maven Central. Узнайте, как настроить учетные данные учетной записи, изменить метаданные библиотеки и настроить плагин публикации, в нашем руководстве.

  • В репозиторий GitHub. Подробнее см. в документации GitHub о пакетах GitHub.

Публикация в локальный репозиторий Maven

Вы можете опубликовать мультиплатформенную библиотеку в локальный репозиторий Maven с помощью плагина Gradle maven-publish:

  1. В файле shared/build.gradle.kts добавьте плагин Gradle maven-publish.

  2. Укажите группу и версию библиотеки, а также репозитории, в которые она должна быть опубликована:

    plugins {
        // ...
        id("maven-publish")
    }
    
    group = "com.example"
    version = "1.0"
    
    publishing {
        repositories {
            maven {
                //...
            }
        }
    }
    

При использовании с maven-publish плагин Kotlin автоматически создает публикации для каждой цели, которую можно собрать на текущем хосте, за исключением целевой платформы Android, для которой требуется дополнительный шаг настройки публикации.

Структура публикаций

Публикации библиотеки Kotlin Multiplatform включают несколько публикаций Maven, каждая из которых соответствует определенной цели. Кроме того, публикуется сводная публикация корневого уровня, kotlinMultiplatform, представляющая библиотеку целиком.

При добавлении в качестве зависимости в общий набор исходного кода корневая публикация автоматически разрешается в соответствующие артефакты для конкретной платформы.

Публикации для конкретных целей и корневая публикация

Плагин Kotlin Multiplatform для Gradle настраивает отдельные публикации для каждой цели. Рассмотрим следующую конфигурацию проекта:

// projectName = "lib"
group = "test"
version = "1.0"

kotlin {
    jvm()
    iosArm64()
}

В результате создаются следующие публикации Maven:

Публикации для конкретных целей

  • Для цели jvm: test:lib-jvm:1.0

  • Для цели iosArm64: test:lib-iosarm64:1.0

Каждая публикация для конкретной цели является независимой. Например, запуск publishJvmPublicationTo<MavenRepositoryName> публикует только модуль JVM, оставляя остальные модули неопубликованными.

Корневая публикация

Корневая публикация kotlinMultiplatform: test:lib:1.0.

Корневая публикация служит точкой входа, ссылающейся на все публикации для конкретных целей. Она содержит артефакты метаданных и обеспечивает корректное разрешение зависимостей, включая ссылки на другие публикации: ожидаемые URL-адреса и координаты отдельных артефактов для каждой платформы.

  • Некоторые репозитории, например Maven Central, требуют, чтобы корневой модуль содержал артефакт JAR без классификатора, например kotlinMultiplatform-1.0.jar. Плагин Kotlin Multiplatform автоматически создает необходимый артефакт со встроенными артефактами метаданных. Это значит, что вам не нужно добавлять пустой артефакт в корневой модуль библиотеки, чтобы выполнить требования репозитория.

    Подробнее о создании артефактов JAR с помощью систем сборки Gradle и Maven.

  • Публикации kotlinMultiplatform также могут потребоваться артефакты исходного кода и документации, если этого требует репозиторий. В таком случае используйте artifact() в области видимости публикации.

Публикация библиотеки целиком

Чтобы опубликовать все необходимые артефакты за один шаг, используйте сводную задачу publishAllPublicationsTo<MavenRepositoryName>. Например:

./gradlew publishAllPublicationsToGithubPackagesRepository

При публикации в Maven Local можно использовать специальную задачу:

./gradlew publishToMavenLocal

Эти задачи обеспечивают совместную публикацию всех публикаций для конкретных целей и корневой публикации, делая библиотеку полностью доступной для разрешения зависимостей.

Также можно использовать отдельные задачи публикации. Сначала запустите задачу корневой публикации:

./gradlew publishKotlinMultiplatformPublicationToMavenLocal

Эта задача публикует файл *.module со сведениями о публикациях для конкретных целей, но сами цели остаются неопубликованными. Чтобы завершить процесс, опубликуйте каждую публикацию для конкретной цели отдельно:

./gradlew publish<TargetName>PublicationToMavenLocal

Это гарантирует, что все артефакты будут доступны и на них будут указаны корректные ссылки.

Требования к хосту

Kotlin/Native поддерживает кросс-компиляцию, позволяя любому хосту создавать необходимые артефакты .klib. Однако следует учитывать некоторые ограничения.

Компиляция для целей Apple

Для проектов с целями Apple можно использовать любой хост для создания артефактов. Однако вам все равно понадобится компьютер Mac, если:

  • В вашей библиотеке или зависимых модулях есть зависимости cinterop.

  • В проекте настроена интеграция с CocoaPods.

  • Вам нужно собрать или протестировать финальные бинарные файлы для целей Apple.

Дублирование публикаций

Чтобы избежать дублирования публикаций в репозитории, публикуйте все артефакты с одного хоста. Например, Maven Central прямо запрещает дублирование публикаций и прерывает процесс, если они обнаружены.

Публикация библиотеки Android

Для публикации библиотеки Android необходимо выполнить дополнительную настройку. По умолчанию артефакты библиотеки Android не публикуются.

В этом разделе предполагается, что вы используете Android Gradle Library Plugin. Руководство по настройке плагина или переходу с устаревшего плагина com.android.library см. на странице Настройка Android Gradle Library Plugin в документации Android.

Чтобы публиковать артефакты, добавьте блок androidLibrary {} в файл shared/build.gradle.kts и настройте публикацию с помощью DSL KMP. Например:

kotlin {
    androidLibrary {
        namespace = "org.example.library"
        compileSdk = libs.versions.android.compileSdk.get().toInt()
        minSdk = libs.versions.android.minSdk.get().toInt()

        // Enables Java compilation support.
        // This improves build times when Java compilation is not needed
        withJava()

        compilations.configureEach {
            compilerOptions.configure {
                jvmTarget.set(
                    JvmTarget.JVM_11
                )
            }
        }
    }
}

Обратите внимание, что плагин Android Gradle Library не поддерживает продуктовые варианты и варианты сборки, что упрощает конфигурацию. Поэтому необходимо явно включить создание тестовых наборов исходного кода и конфигураций. Например:

kotlin {
    androidLibrary {
        // ...

        // Opt in to enable and configure host-side (unit) tests
        withHostTestBuilder {}.configure {}

        // Opt in to enable device tests, specifying the source set name
        withDeviceTestBuilder {
            sourceSetTreeName = "test"
        }

        // ...
    }
}

Ранее для запуска тестов, например с помощью действия GitHub, требовалось отдельно указывать варианты debug и release:

- target: testDebugUnitTest
  os: ubuntu-latest
- target: testReleaseUnitTest
  os: ubuntu-latest

С плагином Android Gradle Library нужно указать только общую цель с именем набора исходного кода:

- target: testAndroidHostTest
  os: ubuntu-latest

Отключение публикации исходного кода

По умолчанию плагин Kotlin Multiplatform для Gradle публикует исходный код для всех указанных целей. Однако вы можете настроить публикацию исходного кода и отключить ее с помощью API withSourcesJar() в файле shared/build.gradle.kts:

  • Чтобы отключить публикацию исходного кода для всех целей:

    kotlin {
        withSourcesJar(publish = false)
    
        jvm()
        linuxX64()
    }
    
  • Чтобы отключить публикацию исходного кода только для указанной цели:

    kotlin {
         // Disable sources publication only for JVM:
        jvm {
            withSourcesJar(publish = false)
        }
        linuxX64()
    }
    
  • Чтобы отключить публикацию исходного кода для всех целей, кроме указанной:

    kotlin {
        // Disable sources publication for all targets except for JVM:
        withSourcesJar(publish = false)
    
        jvm {
            withSourcesJar(publish = true)
        }
        linuxX64()
    }
    

Продвижение библиотеки

Ваша библиотека может быть представлена в каталоге мультиплатформенных библиотек JetBrains. Он помогает находить библиотеки Kotlin Multiplatform с учетом поддерживаемых ими целевых платформ.

Библиотеки, соответствующие критериям, добавляются автоматически. Подробнее о том, как обеспечить появление вашей библиотеки в каталоге, см. в разделе FAQ.

Что дальше

  • Узнайте, как опубликовать библиотеку Kotlin Multiplatform в репозитории Maven Central

  • Ознакомьтесь с рекомендациями для авторов библиотек: лучшие практики и советы по разработке библиотек для Kotlin Multiplatform

13 мая 2026 г.
Публикация приложенияПубликация библиотеки в Maven Central — руководство

© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/multiplatform/multiplatform-publish-lib-setup.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API