尝试执行我构建的Corda“胖子” RPC客户端,但是它始终会因以下错误而失败:
Error: Could not find or load main class,
我已经确认MANIFEST.MF
包含正确的Main-Class
属性,并且该类包含在jar中。
我的build.gradle
的相关部分是:
jar {
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
使用java -jar myjar.jar
执行罐子总是产生此错误:
Error: Could not find or load main class
我发布此问题仅供参考,因为某些Corda开发人员已遇到此问题。如上所述创建“胖罐”的问题是某些Corda罐工件是signed,因此包含诸如:
的额外条目。META-INF/CORDACOD.SF
META-INF/CORDACOD.EC
这些条目不适用于“胖子罐”,因此,如果将它们包含在“胖子罐”中,那么当您尝试执行它时,JVM将拒绝其类为无效类。
在Corda中创建“胖罐”的最佳方法是使用shadow
之类的Gradle插件。但是,如果您必须手工完成此工作,则应相应地更改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"
}
}