簡體   English   中英

Kotlin Code編譯為Jar以用於Java Project?

[英]Kotlin Code compiled to Jar to be used for Java Project?

我在Kotlin編寫了一個Java庫,我想把它編譯成一個可供Java和Kotlin應用程序使用的jar。

我們的想法是jar應該能夠處理Java項目和Kotlin項目。 做一個簡單的./gradlew clean assemble生成一個jar,當我檢查jar時,我可以看到幾個未包含在jar中的導入,普通的Java應用程序也無法訪問它:

import jet.runtime.typeinfo.JetValueParameter;
import kotlin.jvm.internal.Intrinsics;
import kotlin.jvm.internal.KotlinClass;
import kotlin.jvm.internal.KotlinClass.Kind;
import kotlin.jvm.internal.KotlinSyntheticClass;
import kotlin.jvm.internal.KotlinSyntheticClass.Kind;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

我怎么能在jar中包含上面的依賴項? 現在罐子只有30kb。 我更喜歡不必包括整個Kotlin運行時,但只能在使用過的組件中進行編譯。

Kotlin二進制文件確實使用了運行時中的某些類,但這些類的確切集合未指定,甚至可能在次要版本之間發生更改,因此您不應該依賴於您提供的列表。 您最好的選擇是使用-include-runtime選項包含完整的Kotlin運行-include-runtime ,然后運行ProGuard(如注釋中所述)以排除未使用的類。

您可以使用這個最小的ProGuard配置文件:

-injars input.jar
-outjars output.jar
-libraryjars <java.home>/lib/rt.jar

-keep class org.jetbrains.annotations.** {
    public protected *;
}

-keep class kotlin.jvm.internal.** {
    public protected *;
}

-keepattributes Signature,InnerClasses,EnclosingMethod

-dontoptimize
-dontobfuscate

如果你使用反射( kotlin-reflect.jar ),你也應該把所有東西保存在kotlin.reflect.**kotlin.reflect.**

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM