[英].jar file error "could not find or load main class" with IntelliJ
这是我的 MainBot.java 代码:
public class MainBot {
public static void main(String[] args) {
new MainBot("my_private_token");
}
public MainBot(String token) {
// do stuff
}
}
我遇到以下问题:当我尝试执行IntelliJ生成的.jar文件时,出现以下错误:
could not find or load main class: MainBot
但是当我使用 WinRAR 查看 .jar 文件时,我看到了这个:
MainBot.class文件在那里: META-INF/ 文件夹中的清单文件如下所示:
Manifest-Version: 1.0
Main-Class: MainBot
META-INF 文件夹如下所示:
我做错了什么? 导出时,我 select 在INTELLIJ中正确的主文件,将 META-INF 目录添加到 resources/ 然后我构建我的工件。 为什么找不到 MainBot 文件,当它在那里时? 我还尝试使用 MAINFEST.MF 文件并尝试将 Main-Class 更改为 .,/MainBot 或其他内容。 但这些都不起作用。
编辑:这是项目结构下的工件 | 神器
我尝试按照本教程使用使用 gradle 的示例应用程序重现错误,但我不能。 示例应用程序有一个名为io.github.devatherock.example
的模块,其中包含module-info.java
文件和一个名为io.github.devatherock.example
的包,其中包含主类MainBot.java
。 我在 gradle 中将主类列为io.github.devatherock.example.MainBot
,它生成一个带有以下清单的 jar 文件:
Manifest-Version: 1.0
Main-Class: io.github.devatherock.example.MainBot
jar 执行时没有任何错误。 在 IDE 中,源代码的结构如下所示:
生成的 Jar 中的META-INF
文件夹有这两个文件 -
SIGNINGGC.RSA
SIGNINGGC.SF
我假设您没有在 Jar 上签名。 然后,当您创建 Fat Jar 时,这些文件必须来自您的依赖项之一。 如果您的任何依赖项具有 Signed Jar,则可能导致could not find or load main class:
异常。
您可以通过使用此命令(从此处引用)删除这些文件并尝试运行代码来快速确定这是否是问题 -
zip -d yourjar.jar 'META-INF/*.SF' 'META-INF/*.RSA' 'META-INF/*.DSA'
IntelliJ 在生成 Jar 时显示 2 个选项。 第一个将生成一个 Fat Jar。 另一个选项将保持其他库 jars 完整并使用清单文件与它们链接。
假设您只需要运行代码,请使用Create Jar from Modules
对话框中的第二个选项。
在 Windows 生成 jar 文件后,在生成的文件夹中运行命令
7z d yourjar.jar META-INF/*.SF META-INF/*.RSA META-INF/*.DSA -r
您必须安装 7zip 并添加环境路径
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.