Skip to content

KotlinとOSGi

KotlinプロジェクトでKotlinのOSGiサポートを有効にするには、通常のKotlinライブラリの代わりにkotlin-osgi-bundleを含めてください。 kotlin-osgi-bundlekotlin-runtimekotlin-stdlibkotlin-reflectのすべてを含んでいるため、これらの依存関係を削除することをお勧めします。 また、外部のKotlinライブラリを含める場合も注意が必要です。ほとんどの通常のKotlin依存関係はOSGi対応ではないため、それらを使用せず、プロジェクトから削除する必要があります。

Maven

Kotlin OSGiバンドルをMavenプロジェクトに含めるには:

xml
<dependencies>
    <dependency>
        <groupId>org.jetbrains.kotlin</groupId>
        <artifactId>kotlin-osgi-bundle</artifactId>
        <version>${kotlin.version}</version>
    </dependency>
</dependencies>

外部ライブラリから標準ライブラリを除外するには(「スター除外」はMaven 3でのみ機能することに注意してください):

xml
<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
dependencies {
    implementation(kotlin("osgi-bundle"))
}
groovy
dependencies {
    implementation "org.jetbrains.kotlin:kotlin-osgi-bundle:2.2.10"
}

推移的依存関係として含まれるデフォルトのKotlinライブラリを除外するには、次のアプローチを使用できます:

kotlin
dependencies {
    implementation("some.group.id:some.library:someversion") {
        exclude(group = "org.jetbrains.kotlin")
    }
}
groovy
dependencies {
    implementation('some.group.id:some.library:someversion') {
        exclude group: 'org.jetbrains.kotlin'
    }
}

FAQ

なぜ必要なマニフェストオプションをすべてのKotlinライブラリに追加しないのですか

OSGiサポートを提供する上で最も望ましい方法ではありますが、残念ながら、いわゆる「パッケージ分割 (package split) の問題」は容易には解消できず、現時点ではそのような大きな変更は計画されていないため、今は実現できません。Require-Bundle機能もありますが、これも最善の選択肢ではなく、使用は推奨されません。そのため、OSGi用に別のアーティファクトを作成することが決定されました。