繁体   English   中英

.jar 文件错误“找不到或加载主类”与 IntelliJ

[英].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 文件,我看到了这个:

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 时,这些文件必须来自您的依赖项之一。 如果您的任何依赖项具有 S​​igned 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM