簡體   English   中英

嘗試運行 .jar 文件時出現“ClassNotFoundException”

[英]"ClassNotFoundException" while trying to run .jar file

我有一個 .jar 是我按照 Oracle 文檔構建的,使用jar cfm hangman.jar Manifest.txt src/classes/app/Main.class manifest.txt 文件包含 Main-Class 作為classes.app.Main ,告訴我的 Main 類在哪里。 執行時,拋出 ClassNotFoundException ,表示找不到classes.app.Main 我需要幫助試圖了解這里出了什么問題。 它是主類還是缺少類路徑?

這是項目樹:

.
├── hangman.jar
├── Manifest.txt
├── README.md
└── src
    ├── app
    │   ├── Main.java
    │   ├── Player.java
    │   ├── Players.java
    │   ├── Play.java
    │   ├── Themes.java
    │   ├── Word.java
    │   └── Words.java
    └── classes
        └── app
            ├── Main.class
            ├── Play.class
            ├── Player.class
            ├── Players.class
            ├── Themes.class
            ├── Word.class
            └── Words.class


您沒有顯示代碼,但很可能您的類的包只是app而不是classes.app ,並且classes只是包含類文件的目錄名稱,實際上並不是包層次結構的一部分。 jar 中的類文件條目的名稱,或相對於類路徑目錄的類文件的名稱,必須正好是等於包層次結構(如果有)加上類名和后綴.class的目錄路徑,其中沒有添加或刪除任何內容。 這意味着您的 jar 應該通過轉到classes目錄然后添加相對於該目錄的文件來創建:

 jar cfm hangman.jar Manifest.txt -C classes app/Main.class 

清單中的Main-class條目應該是app.Main 如果您只需要清單中的主類而不需要其他任何東西(除了版本,IIRC),您可以讓jar為您創建它:

 jar cfe hangman.jar app.Main -C classes app/Main.class

我還注意到您的源代碼樹中還有其他類。 如果從 Main 類直接或間接(即嵌套)調用或引用這些類,則它們也必須在 jar 中。 您可能希望改用app/* ,盡管您可能希望甚至需要更具選擇性。

Meta:我認為標准教程中已經涵蓋了這一點,但是盡管大部分內容都在那里,但它們並沒有在我能找到和參考的任何地方真正整合在一起。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM