"Error: Could not find or load main class" when building a Corda fat-jar client

"Error: Could not find or load main class" when building a Corda fat-jar client

尝试执行我构建的 Corda "fat jar" RPC 客户端,但它总是失败并出现此错误:

Error: Could not find or load main class,

我已确认 MANIFEST.MF 包含正确的 Main-Class 属性,并且此 class 包含在 jar 中。

我的 build.gradle 的相关部分是:

jar {
    from {
        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
    }
}

使用 java -jar myjar.jar 执行 jar 总是会产生此错误:

Error: Could not find or load main class

我发布这个问题仅供参考,因为一些 Corda 开发人员对此有 运行。如上所述创建 "fat jar" 的问题是一些 Corda jar 工件是 签名的 ,因此包含额外的条目,如:

META-INF/CORDACOD.SF
META-INF/CORDACOD.EC

这些条目不适用于 "fat jar",因此如果您将它们包含在 "fat jar" 中,那么当您尝试执行它时,JVM 将拒绝它的 类 作为无效.

在 Corda 中创建 "fat jar" 的最佳方法是使用 Gradle 插件,例如 shadow。然而,如果您必须手工完成这项工作,那么您应该相应地改变您的jar任务:

jar {
    from(configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }) {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.EC"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
        exclude "META-INF/INDEX.LIST"
    }
}