从Gradle Fat Jar加载Kotlin主类失败

从Gradle Fat Jar加载Kotlin主类失败,kotlin,gradle,executable-jar,Kotlin,Gradle,Executable Jar,基于这里的其他答案,我使用这个Gradle构建,用我的命令行工具和一些JDBC驱动程序创建了一个fat/uber/shaded Jar: import org.gradle.jvm.tasks.Jar 依赖关系{ api(项目(“:db2xls”)) api(“ch.qos.logback:logback classic:1.2.3”) api(“com.h2数据库:h2:1.4.200”) api(“org.postgresql:postgresql:42.2.16”) api(“mysql:

基于这里的其他答案,我使用这个Gradle构建,用我的命令行工具和一些JDBC驱动程序创建了一个fat/uber/shaded Jar:

import org.gradle.jvm.tasks.Jar
依赖关系{
api(项目(“:db2xls”))
api(“ch.qos.logback:logback classic:1.2.3”)
api(“com.h2数据库:h2:1.4.200”)
api(“org.postgresql:postgresql:42.2.16”)
api(“mysql:mysql连接器java:8.0.21”)
api(“com.microsoft.sqlserver:mssqljdbc:8.4.1.jre11”)
}
val fatJar=task(“fatJar”,type=Jar::class){
显示{
属性[“实现标题”]=“DB2XLS捆绑包”
属性[“实施版本”]=“0.1-快照”
属性[“主类”]=“de.peterbecker.xls.Db2XlsKt”
}
从(
configurations.compile.get().map{if(it.isDirectory)it else zipTree(it)},
configurations.runtimeClasspath.get().map{if(it.isDirectory)it else zipTree(it)}
)
使用(tasks.jar.get()作为CopySpec)
}
任务{
“构建”{
德彭森(法特贾尔)
}
}
构建生成一个JAR文件,当使用ZIP工具检查时,该文件看起来正常,但无法执行:

$java-jar db2xls-bundle-0.1-SNAPSHOT.jar
错误:无法找到或加载主类de.peterbecker.xls.Db2XlsKt
原因:java.lang.ClassNotFoundException:de.peterbecker.xls.Db2XlsKt
如果改用类路径,情况也是如此:

$java-cp db2xls-bundle-0.1-SNAPSHOT.jar de.peterbecker.xls.Db2XlsKt
错误:无法找到或加载主类de.peterbecker.xls.Db2XlsKt
原因:java.lang.ClassNotFoundException:de.peterbecker.xls.Db2XlsKt
但类文件似乎就在那里:

$jar-t——文件db2xls-bundle-0.1-SNAPSHOT.jar | grep Db2XlsKt
de/peterbecker/xls/Db2XlsKt$logger$1.class
de/peterbecker/xls/Db2XlsKt$processQuery$1.class
de/peterbecker/xls/Db2XlsKt$toLists$$inlined$use$lambda$1.class
de/peterbecker/xls/Db2XlsKt.class
而普通的JAR似乎会按照预期加载类(然后由于缺少depdency而失败):

$java-cp db2xls-0.1-SNAPSHOT.jar de.peterbecker.xls.Db2XlsKt
错误:无法初始化主类de.peterbecker.xls.Db2XlsKt
原因:java.lang.NoClassDefFoundError:kotlin/NoWhenBranchMatchedException
我做错了什么

完整代码可在