我有一个Java项目,通过maven添加了SpringBoot和JavaFX。代码可以编译,甚至我也可以在计算机中不使用JavaFXSDK的情况下执行fat jar。但当我尝试在IntelliJ中执行它时,结果是
错误:缺少JavaFX运行时组件,需要运行此应用程序
我在许多问题中看到过这种输出,在大多数情况下,jar根本没有构建,或者代码编译失败。
但是在这个场景中,mvn包
没有错误,我可以用java-JAR执行JAR
波姆。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>
至于插件
springbootmaven插件
和maven编译器插件
。
尝试的解决方案
--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>
但它所做的是增加了运行的能力:
mvncleanjavafx:run
使用IntelliJ执行的需要是调试代码,因为使用Souts调试效率不高。
--2--
正在尝试使用
模块信息构建模块。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
这更多的是故障排除和研究指南,而不是实际的修复。在StackOverflow上下文中很难提供环境问题的修复。然而,如果你研究这里的信息,它可能会帮助你修复你的项目。
推荐的故障排除方法
使用Intellij new JavaFX项目向导。确保它在您的环境中工作,然后逐渐将当前项目中的组件添加到工作项目中,检查每次小添加后一切是否仍然工作。
通过JavaFX maven插件执行时调试
我认为上述建议是首选方法,但是,您可以交替使用以下方法:
使用:mvn clean javafx:run使用IntelliJ执行的需要是调试代码”
见:
我还认为您可以右键单击javafx:run
的maven目标并选择Debug。我不确定,我没有使用JavaFXMaven插件。
为JavaFX应用程序创建胖jar
那个胖罐子
这不是一个推荐的配置,但如果你真的必须这样做,你可以审查:
这个答案并没有讨论让这样的配置与Idea运行/调试配置一起工作,所以它可能对您没有帮助。
如果您继续使用胖jar,我不建议您使用模块信息,因为您将在类路径之外运行代码。
模块化与非模块化JavaFX应用程序
如果您不使用胖罐子,无论如何,要为Spring纠正所有模块依赖关系都是很棘手的,因为Spring目前的架构并没有很好地直接支持模块。Spring 6将被设计成与模块一起工作,尽管我认为如果你足够努力,你应该能够让Spring 5工作(我过去已经让它在一些应用程序中工作过)。
或者,您可以将JavaFX组件作为模块,并在类路径之外运行其余组件。例如,openjfx的“带Maven的非模块化”方法。木卫一。请注意,作为应用程序的一个模块,jdfx中的模块并不是只提供javainfo,而是只提供模块的路径。java文件,并从类路径中运行。
为JavaFX应用程序创建运行时映像
我还建议学习:
我第一次尝试使用JavaFX。我在IntelliJ中创建了一个*.fxml文件的项目。然后,我在IntelliJ中打开了内置的fxml gui编辑器。我得到一个警告,我需要为JavaFX添加一个SDK。我转到了项目结构设置、模块、依赖项,并添加了“IntelliJ dir\jre64\lib\ext\jfxrt.jar”。警告消失了。模块作用域设置为编译。如果我试图通过单击IntelliJ中类声明
我在open sdk 11.0.12中使用IntelliJ。我有一个基于maven的项目。我从空项目开始,并添加了一些依赖项。我正在创建JavaFX应用程序。 我的pom。xml文件如下所示: 4.0.0 当我用maven运行它时,效果很好。我已经设定了目标:清理javafx:run。我想在intellij中本地运行此项目,但错误显示: 我试图创建模块文件,但它显示了javafx。应用缺少应用程序
我有一个maven项目,我想导出到runnable中。jar文件。 在VSCode中,项目可以正常工作。导出的项目包括。jar文件和包含所有javaFX文件的libs文件夹: 运行以下命令时出现问题: 我不明白为什么会出现这个错误,因为所有JavaFX文件都位于libs文件夹中并且可见。 我目前使用SDKman的Java Temurin 18.0.1。 <代码>Pom。xml文件: 我尝试下载Ja
pom文件供参考
我有一个基于Maven Spring的应用程序。这是一个使用java的Javaweb应用程序。 这是pom。我正在使用的xml: 当我进行清理、生成资源和安装时,会出现此错误,并且不会开始工作 我正在使用IntelliJ,但在使用Eclipse时出现了相同的错误。应用程序正在脱机工作。 对这个解决方案有什么想法吗?
我也看了几个Youtube视频,但似乎没有一个能解决这个问题。 为什么-属性没有正确地嵌入到jar的清单中,如何修复它?