Kotlin и OSGi
Для включения поддержки Kotlin OSGi необходимо включить kotlin-osgi-bundle вместо обычных библиотек Kotlin. Рекомендуется удалить зависимости kotlin-runtime, kotlin-stdlib и kotlin-reflect, так как kotlin-osgi-bundle уже содержит их все. Также следует обратить внимание на случай, когда включены внешние библиотеки Kotlin. Большинство обычных зависимостей Kotlin не поддерживают OSGi, поэтому их не следует использовать и необходимо удалить из вашего проекта.
Maven
Для включения пакета Kotlin OSGi в проект Maven:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-osgi-bundle</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
Чтобы исключить стандартную библиотеку из внешних библиотек (обратите внимание, что «исключение звёздочкой» работает только в Maven 3):
<dependency>
<groupId>some.group.id</groupId>
<artifactId>some.library</artifactId>
<version>some.library.version</version>
<exclusions>
<exclusion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
Gradle
Для включения kotlin-osgi-bundle в проект Gradle:
compile "org.jetbrains.kotlin:kotlin-osgi-bundle:$kotlinVersion"
Чтобы исключить стандартные библиотеки Kotlin, которые входят как транзитивные зависимости, можно использовать следующий подход:
dependencies {
compile (
[group: 'some.group.id', name: 'some.library', version: 'someversion'],
.....) {
exclude group: 'org.jetbrains.kotlin'
}
Вопросы и ответы
Почему не добавить необходимые параметры манифеста ко всем библиотекам Kotlin
Несмотря на то, что это предпочтительный способ предоставления поддержки OSGi, к сожалению, это не удалось сделать из-за так называемой проблемы «разделения пакетов» (посмотреть проблему), которую нельзя было легко устранить, и такие изменения пока не запланированы. Существует Require-Bundle функция, но это тоже не лучший вариант и не рекомендуется. Поэтому было решено создать отдельный артефакт для OSGi.
© 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/docs/reference/kotlin-osgi.html