Spec-Zone.ru › Kotlin 1.6

Публикация многоплатформенной библиотеки

Вы можете опубликовать многоплатформенную библиотеку в репозиторий Maven с помощью плагина Gradle. Укажите группу, версию и репозитории, в которые должна быть опубликована библиотека. Плагин автоматически создаёт публикации.

plugins {
    //...
    id("maven-publish")
}

group = "com.example"
version = "1.0"

publishing {
    repositories {
        maven {
            //...
        }
    }
}

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

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

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

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

Эта kotlinMultiplatform публикация включает артефакты метаданных и ссылается на другие публикации в качестве своих вариантов.

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

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

Избегайте дублирования публикаций

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

Вы можете определить платформу в скрипте, ввести флаг, такой как isMainHost, и установить его в значение true для основной целевой платформы. В качестве альтернативы, вы можете передать флаг из внешнего источника, например, из конфигурации CI.

Этот упрощённый пример гарантирует, что публикации будут загружены только в том случае, если isMainHost=true передаётся. Это означает, что публикация, которая может быть опубликована с нескольких платформ, будет опубликована только один раз – с основного хоста.

kotlin {
    jvm()
    js()
    mingwX64()
    linuxX64()
    val publicationsFromMainHost = 
        listOf(jvm(), js()).map { it.name } + "kotlinMultiplatform"
    publishing {
        publications {
            matching { it.name in publicationsFromMainHost }.all {
                val targetPublication = this@all
                tasks.withType<AbstractPublishToMaven>()
                        .matching { it.publication == targetPublication }
                        .configureEach { onlyIf { findProperty("isMainHost") == "true" } }
            }
        }
    }
}
kotlin {
    jvm()
    js()
    mingwX64()
    linuxX64()
    def publicationsFromMainHost = 
        [jvm(), js()].collect { it.name } + "kotlinMultiplatform"
    publishing {
        publications {
            matching { it.name in publicationsFromMainHost }.all { targetPublication ->
                tasks.withType(AbstractPublishToMaven)
                        .matching { it.publication == targetPublication }
                        .configureEach { onlyIf { findProperty("isMainHost") == "true" } }
            }
        }
    }
}

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

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

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

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

kotlin {
    android {
        publishLibraryVariants("release", "debug")
    }
}

Данный пример работает для библиотек Android без продуктовых флейворов. Для библиотек с продуктовыми флейворами имена вариантов также включают флейворы, например fooBarDebug или fooBazRelease.

Настройка публикации по умолчанию следующая:

  • Если опубликованные варианты имеют одинаковый тип сборки (например, все они являются release или debug ), они будут совместимы с любым типом сборки потребителя.

  • Если опубликованные варианты имеют разные типы сборки, то только варианты релизов будут совместимы с типами сборки потребителя, которые не входят среди опубликованных вариантов. Все остальные варианты (например, debug) будут соответствовать только тому же типу сборки на стороне потребителя, если только проект потребителя не укажет соответствующие резервные варианты.

Если вы хотите сделать каждый опубликованный вариант Android совместимым только с тем же типом сборки, который используется потребителем библиотеки, установите эту свойство Gradle: kotlin.android.buildTypeAttribute.keep=true.

Вы также можете публиковать варианты, сгруппированные по продуктовому флейвору, так что выходные данные разных типов сборки размещаются в одном модуле, при этом тип сборки становится классификатором артефактов (вариант релиза по-прежнему публикуется без классификатора). Этот режим по умолчанию отключен и может быть включен следующим образом:

kotlin {
    android {
        publishLibraryVariantsGroupedByFlavor = true
    }
}

Не рекомендуется публиковать варианты, сгруппированные по продуктовому флейвору, в случае, если они имеют разные зависимости, так как они будут объединены в один список зависимостей.

Последнее изменение: 07 апреля 2022
Создать многоплатформенную библиотеку Создание и публикация многоплатформенной библиотеки — учебник

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

Spec-Zone.ru

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