java - 无法使用 gradle 生成的 jar 文件找到或加载主类
问题描述
我在这个阶段停留了几个小时,无法弄清楚我错过了什么。也许有人看到了明显的错误......
在第一步中,我使用 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
}
推荐阅读
- laravel - laravel 中的 save() 方法仅将最后一条记录保存在 json 中
- ruby - 成功点击后更改页面:stale element reference: element is not attach to the page document
- bash - 为什么我不能在本地运行一个简单的程序?
- python - 如何在类内的函数内使用另一个文件中的方法
- r - 在 R 中,我如何可视化两列中的频率计数与跨时间的另一基线列的比较?
- rust - 你怎么能在你没有定义的东西上使用序列化和反序列化宏?
- bash - 检查多字命令输出是否以bash中的某个字符串开头
- java - BlobInput 的 Azure 函数绑定问题,没有任何错误
- android - 使用 FIrebase Cloud Functions for Android App 生成 Razorpay OrderId
- pine-script - How to avoid having a stop loss triggered and simultaneous entry of the counter position on bar completion in a Pine script v4 strategy?