"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"
}
}
尝试执行我构建的 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"
}
}