Публикация многоплатформенных библиотек
Вы можете опубликовать многоплатформенную библиотеку в репозиторий Maven с помощью maven-publish плагина Gradle. Укажите группу, версию и репозитории, в которые должна быть опубликована библиотека. Плагин автоматически создаёт публикации.
plugins {
//...
id("maven-publish")
}
group = "com.example"
version = "1.0"
publishing {
repositories {
maven {
//...
}
}
}
Завершите учебник по созданию и публикации многоплатформенной библиотеки, чтобы получить практический опыт.
Структура публикаций
При использовании maven-publish, плагин Kotlin автоматически создаёт публикации для каждой целевой платформы, которая может быть построена на текущем хосте, за исключением целевой платформы Android, для которой требуется дополнительный шаг для настройки публикации.
Публикации многоплатформенной библиотеки включают дополнительную публикацию корневую kotlinMultiplatform , которая представляет всю библиотеку и автоматически разрешается до соответствующих артефактов для конкретной платформы при добавлении в качестве зависимости к общему набору исходного кода. Узнайте больше о добавлении зависимостей.
Эта kotlinMultiplatform публикация включает метаданные артефактов и ссылается на другие публикации в качестве своих вариантов.
Для 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
}
}
© 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