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