我有一个带有 Kotlin 的多模块化 Gradle 项目。其中一个模块具有主要方法和对其他模块的依赖关系。我需要从这个模块创建一个可执行的 jar。所以我试图通过创建这样的 Jar 任务来做到这一点
jar {
manifest {
attributes(
'Main-Class': 'my_package.RunnerKt'
)
}
from {
configurations.compileClasspath.filter{ it.exists() }.collect { it.isDirectory() ? it : zipTree(it) }
}
}
我还尝试了Shadow Gradle Plugin。在这两种情况下,胖 jar 都是按预期创建的,它似乎包含了我所有的类和依赖项。但是当我运行 jar 时java -jar
出现以下错误:
java.lang.NoClassDefFoundError: Could not initialize class my_kotlin_object_class
where my_kotlin_object_class
is just a kotlin object
with some variables。
在堆栈跟踪中,没有其他可能导致此异常的异常,因此似乎只是这个类本身存在问题。当我查看 jar 时,我可以在那里看到这个文件。
我不明白这是 kotlin 对象本身和可执行 jar 的问题,还是我做错了什么?