6.7.6 Kotlin 与 OSGi
原文链接: https://kotlinlang.org/docs/kotlin-osgi.html
6.7.6 Kotlin 与 OSGi
要在你的 Kotlin 项目中启用 Kotlin 的 OSGi 支持,请引入 kotlin-osgi-bundle 而不是常规的 Kotlin 库。建议移除 kotlin-runtime、kotlin-stdlib 和 kotlin-reflect 依赖,因为 kotlin-osgi-bundle 已经包含了它们。在包含外部 Kotlin 库时你也应当注意。大多数常规 Kotlin 依赖并非 OSGi 就绪,因此不应使用它们,并应把它们从项目中移除。
Maven
要把 Kotlin OSGi bundle 引入 Maven 项目:
1
2
3
4
5
6
7
| <dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-osgi-bundle</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
|
要把标准库从外部库中排除(注意"星号排除"只在 Maven 3 中有效):
1
2
3
4
5
6
7
8
9
10
11
12
| <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 项目:
Kotlin
1
2
3
| dependencies {
implementation(kotlin("osgi-bundle"))
}
|
Groovy
1
2
3
| dependencies {
implementation "org.jetbrains.kotlin:kotlin-osgi-bundle:2.4.20"
}
|
要排除作为传递依赖引入的默认 Kotlin 库,可以使用以下方式:
Kotlin
1
2
3
4
5
| dependencies {
implementation("some.group.id:some.library:someversion") {
exclude(group = "org.jetbrains.kotlin")
}
}
|
Groovy
1
2
3
4
5
| dependencies {
implementation('some.group.id:some.library:someversion') {
exclude group: 'org.jetbrains.kotlin'
}
}
|
常见问题
为什么不直接给所有 Kotlin 库添加所需的 manifest 选项
尽管这是提供 OSGi 支持最可取的方式,但遗憾的是目前无法这样做,原因是所谓的“包拆分"问题难以简单消除,而如此大的改动目前也不在计划之列。虽然有 Require-Bundle 特性,但它也不是最佳选择,并且不建议使用。因此决定为 OSGi 单独制作一个构件。