我在这个阶段停留了几个小时,无法弄清楚我错过了什么。也许有人看到了明显的错误......
第一步,我使用 gradle 构建一个 jar 文件:
jar {
manifest {
attributes(
'Main-Class': 'ch.hsr.ebos.offliss.server.Main',
"Class-Path": configurations.compile.collect { it.getName() }.join(' ')
)
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
我让 gradle 构建 jar 文件,当您尝试执行它时,会出现以下错误消息:
java -jar build/libs/server.jar
Error: Could not find or load main class ch.hsr.ebos.offliss.server.Main
当您解压 jar 文件的内容时,会出现META-INF/MANIFEST.MF:
Manifest-Version: 1.0
Class-Path:
Main-Class: ch.hsr.ebos.offliss.server.Main
以及 ch/hsr/ebos/offliss/server 目录下的 Main.class 文件。
不确定缺少什么,也不知道下一步。该错误在堆栈溢出上很常见,但其他问题和答案到目前为止对我没有帮助。
整个源代码是开源的,可在此处获取:
最佳答案
最终通过将 gradle 构建配置更改为以下内容解决了该问题:
jar {
manifest {
attributes(
'Main-Class': 'ch.hsr.ebos.offliss.server.Main'
)
}
}
task fatJar(type: Jar) {
manifest.from jar.manifest
classifier = 'all'
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
} {
exclude "META-INF/*.SF"
exclude "META-INF/*.DSA"
exclude "META-INF/*.RSA"
}
with jar
}
关于java - 无法使用 gradle 生成的 jar 文件找到或加载主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55991617/