簡體   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