当前位置: 首页 > 知识库问答 >
问题:

IntelliJ中的JavaFXMaven项目。只有IntelliJ中缺少JavaFX运行时组件。JAR通过mvn包执行时没有问题

高弘光
2023-03-14

我有一个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

共有1个答案

祁宝
2023-03-14

这更多的是故障排除和研究指南,而不是实际的修复。在StackOverflow上下文中很难提供环境问题的修复。然而,如果你研究这里的信息,它可能会帮助你修复你的项目。

推荐的故障排除方法

使用Intellij new JavaFX项目向导。确保它在您的环境中工作,然后逐渐将当前项目中的组件添加到工作项目中,检查每次小添加后一切是否仍然工作。

通过JavaFX maven插件执行时调试

我认为上述建议是首选方法,但是,您可以交替使用以下方法:

使用:mvn clean javafx:run使用IntelliJ执行的需要是调试代码”

见:

  • intellij想法:如何调试java: fx maven项目?

我还认为您可以右键单击javafx:run的maven目标并选择Debug。我不确定,我没有使用JavaFXMaven插件。

为JavaFX应用程序创建胖jar

那个胖罐子

这不是一个推荐的配置,但如果你真的必须这样做,你可以审查:

  • 缺少Maven Shade JavaFX运行时组件

这个答案并没有讨论让这样的配置与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

  • 我有一个基于Maven Spring的应用程序。这是一个使用java的Javaweb应用程序。 这是pom。我正在使用的xml: 当我进行清理、生成资源和安装时,会出现此错误,并且不会开始工作 我正在使用IntelliJ,但在使用Eclipse时出现了相同的错误。应用程序正在脱机工作。 对这个解决方案有什么想法吗?

  • 我也看了几个Youtube视频,但似乎没有一个能解决这个问题。 为什么-属性没有正确地嵌入到jar的清单中,如何修复它?