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'
}
FAQ
爲什麼不只是添加必需的清單選項到所有 Kotlin 庫
儘管它是提供 OSGi 支持的最好的方式,遺憾的是現在做不到,是因爲不能輕易消除的所謂的
「包拆分」問題並且這麼大的變化
不可能現在規劃。有 Require-Bundle
功能,但它也不是最好的選擇,不推薦使用。
所以決定爲 OSGi 做一個單獨的構件。