簡體   English   中英

無法初始化主 class com....,原因:java.lang.NoClassDefFoundError

[英]Unable to initialize main class com...., Caused by: java.lang.NoClassDefFoundError

我已經構建了一個 java 應用程序,它使用 Swing 和 Flatlaf 作為主題。

當我通過 IDE(InteliJ)運行應用程序時,它運行沒有任何問題。 在我使用 Maven 中的package命令成功構建它之后,當我嘗試運行它時,我收到了這個錯誤:

(如果我通過maven-jar-plugin:3.1.0插件構建它,我會得到相同的結果)

Error: Unable to initialize main class com.Yad2AutomationWithGUI.bouncer.Main
Caused by: java.lang.NoClassDefFoundError: com/formdev/flatlaf/FlatDarculaLaf

我知道它與安裝在 PC 上的 JRE 和 JDK 有關,因此我已將它們更新到最新版本並更新了它們的 env Path

C:\Users\USER>javac -version
javac 18.0.1.1

C:\Users\USER>java -version
java version "18.0.1.1" 2022-04-22
Java(TM) SE Runtime Environment (build 18.0.1.1+2-6)
Java HotSpot(TM) 64-Bit Server VM (build 18.0.1.1+2-6, mixed mode, sharing)

我以這種方式使用 Maven 導入了Flatlaf存儲庫:

<dependencies>
    <dependency>
        <groupId>com.formdev</groupId>
        <artifactId>flatlaf</artifactId>
        <version>2.2</version>
    </dependency>
        ....
</dependencies>

謝謝。

您能否驗證一下 flatlaf 類是否包含在您使用 Maven 構建的 JAR 文件中?

編輯:Thorbjørn 的評論聽起來更可靠,我建議也查看類路徑。

另一種選擇是構建一個包含所有依賴類的“胖”JAR。 查看 Maven Shade 插件。

此異常通常發生是因為在程序執行期間無法在運行時找到 .class 文件。 有時,它也會發生,因為服務器引擎本身已損壞,在這種情況下必須使用新的服務器實例。

  • 使固定:

在部署目錄中手動替換 .class 文件。 一旦找到 .class 文件,它將成功運行。 完美的解決方法是在 Shell 腳本或 Java 類中為 autoDeployment = "true" 編寫邏輯,其中所有類(src 和 .class、目標文件夾和 webapp 中的其他文件夾)都在其目錄中展開、測試和驗證,並且然后自動運行 web 應用程序以查看 web 應用程序是否正常工作。

For my case, I needed to assemble the jar of dependency with my main jar using maven-assembly-plugin as describe in the answer https://stackoverflow.com/a/1729094/10074233 and then using the new jar with dependencies.

暫無
暫無

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

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