[英]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.