要啟用 Kotlin OSGi 支持,你需要引入 kotlin-osgi-bundle
而不是常規(guī)的 Kotlin 庫。
建議刪除 kotlin-runtime
、 kotlin-stdlib
和 kotlin-reflect
依賴,因?yàn)?kotlin-osgi-bundle
已經(jīng)包含了所有這些。當(dāng)引入外部 Kotlin 庫時(shí)你也應(yīng)該注意。
大多數(shù)常規(guī) Kotlin 依賴不是 OSGi-就緒的,所以你不應(yīng)該使用它們,且應(yīng)該從你的項(xiàng)目中刪除它們。
將 Kotlin OSGi 包引入到 Maven 項(xiàng)目中:
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-osgi-bundle</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>
從外部庫中排除標(biāo)準(zhǔn)庫(注意“星排除”只在 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>
將 kotlin-osgi-bundle
引入到 gradle 項(xiàng)目中:
compile "org.jetbrains.kotlin:kotlin-osgi-bundle:$kotlinVersion"
要排除作為傳遞依賴的默認(rèn) Kotlin 庫,你可以使用以下方法
dependencies {
compile (
[group: 'some.group.id', name: 'some.library', version: 'someversion'],
……) {
exclude group: 'org.jetbrains.kotlin'
}
盡管它是提供 OSGi 支持的最好的方式,遺憾的是現(xiàn)在做不到,是因?yàn)椴荒茌p易消除的所謂的
“包拆分”問題并且這么大的變化
不可能現(xiàn)在規(guī)劃。有 Require-Bundle
功能,但它也不是最好的選擇,不推薦使用。
所以決定為 OSGi 做一個(gè)單獨(dú)的構(gòu)件。