[英].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.