Kotlin與OSGi

要啓用 Kotlin OSGi 支持,你需要引入 kotlin-osgi-bundle 而不是常規的 Kotlin 庫。
建議刪除 kotlin-runtimekotlin-stdlibkotlin-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 做一個單獨的構件。