«Ошибка: не удалось найти или загрузить основной класс» при создании клиента Corda fat-jar - PullRequest
0 голосов
/ 24 октября 2019

Попытка выполнить клиент Corda RPC "fat jar", который я создал, но он всегда терпит неудачу с этой ошибкой:

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) }
    }
}

Выполнение jar с использованием java -jar myjar.jar всегда приводит к этой ошибке:

Error: Could not find or load main class

1 Ответ

1 голос
/ 24 октября 2019

Я разместил этот вопрос только для справки, потому что некоторые разработчики Corda столкнулись с этим. Проблема с созданием «толстой банки», как описано выше, заключается в том, что некоторые артефакты Jard Corda имеют подпись и поэтому содержат дополнительные записи, такие как:

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

Эти записи не применяются к«толстый кувшин», и поэтому, если вы включите их в «толстый кувшин», JVM будет отклонять его классы как недействительные при попытке его выполнить.

Лучший способ создать «толстый кувшин» вCorda использует плагин 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"
    }
}
...