我有一個通過 Maven 添加了 Spring Boot 和 JavaFX 的 Java 專案。代碼可以編譯,甚至我也可以在沒有 JavaFX SDK 的情況下在計算機中執行胖 jar。但是當我嘗試在 IntelliJ 中執行它時,它會導致
Error: JavaFX runtime components are missing, and are required to run this application
我在許多問題中都看到過這個輸出,在大多數情況下,jar 根本沒有構建或代碼編譯失敗。
但在這種情況下mvn package,沒有錯誤,我可以執行 JARjava -jar <jar_name>以消除我可能在某處安裝了 javafx sdk 的事實,我在僅安裝了 JRE 的 VM 中嘗試了它。
pom.xml
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11.0.2</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-fxml</artifactId>
<version>11.0.2</version>
</dependency>
至于插件spring-boot-maven-plugin和maven-compiler-plugin.
嘗試的解決方案
--1--
我嘗試了說要添加的解決方案
<plugin>
<groupId>org.openjfx</groupId>
<artifactId>javafx-maven-plugin</artifactId>
<version>0.0.6</version>
<executions>
<execution>
<id>default-cli</id>
<configuration>
<mainClass>com.example.demofx.Starter</mainClass>
</configuration>
</execution>
</executions>
</plugin>
但它所做的是添加運行的能力: mvn clean javafx:run
使用 IntelliJ 執行的需要是除錯代碼,因為使用 souts 進行除錯效率不高。
--2--
嘗試module-info.jar使用以下模塊構建模塊
module com.example.demofx {
requires javafx.controls;
requires javafx.fxml;
// all other required modules including spring
opens com.example.demofx to javafx.fxml;
exports com.example.demofx;
}
這可能有效,但由于一些舊的依賴項不能在模塊化構建中正常作業,這會導致對代碼庫進行大量破壞性更改。
編輯:
- 漏提環境
- JDK - 11.0.8
- IntelliJ IDEA - 2021.2.2
- 添加了第二個解決方案。
uj5u.com熱心網友回復:
這與其說是實際修復,不如說是故障排除和研究指南。在 StackOverflow 背景關系中很難修復環境問題。但是,如果您研究這里的資訊,它可能會幫助您修復您的專案。
推薦的故障排除方法
使用Intellij 新建 JavaFX 專案向導。確保它在您的環境中作業,然后逐漸將當前專案中的組件添加到作業專案中,檢查在每次小添加后一切是否仍然有效。
通過 JavaFX maven 插件執行時的除錯
我認為上述建議是首選方法,但是,您可以交替使用以下方法:
run with: mvn clean javafx:ru??n 用IntelliJ執行的需要是除錯代碼"
看:
- intellij 想法:如何除錯 java:fx maven 專案?
我還認為您可以右鍵單擊 Maven 目標javafx:run并選擇除錯。我不確定,我不使用 JavaFX maven 插件。
為 JavaFX 應用程式創建胖 jar
脂肪罐
這不是推薦的配置,但如果你真的必須這樣做,你可以查看:
- 缺少 Maven Shade JavaFX 運行時組件
該答案并未討論如何將此類配置與 Idea 運行/除錯配置結合使用,因此它可能對您沒有幫助。
如果您繼續使用胖 jar,我不建議使用模塊資訊,因為無論如何您都會在類路徑之外運行代碼。
模塊化與非模塊化 JavaFX 應用程式
如果您不使用胖 jar,那么為 Spring 獲取正確的所有模塊依賴項無論如何都是棘手的,因為 Spring 當前的架構不能很好地直接支持模塊。Spring 6 將被設計為與模塊一起作業,但我認為如果你足夠努力,你應該能夠讓 Spring 5 作業(我過去已經讓它在某些應用程式中作業)。
或者,您可以將 JavaFX 組件作為模塊,然后在類路徑之外運行其余組件。例如,openjfx.io 上的“非模塊化 Maven”方法。請注意,在這種方法中,JDK 和 JavaFX 模塊仍作為模塊加載到模塊路徑之外,只有 Spring 應用程式不提供 module-info.java 檔案并從類路徑中運行。
為 JavaFX 應用程式創建運行時映像
我也建議學習:
- 這些資源用于創建合適的運行時映像。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/340839.html
下一篇:“21天好習慣”第一期——5
