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