提问者:小点点

运行JavaFXJar使用Maven从NetBeans构建的文件时出错


我正在使用当前的NetBeans,并且刚刚使用Maven编译器创建了一个简单的JavaFX项目。

它在NetBeans中运行、清理、构建等非常好,没有错误。

然而,当我导航到文件夹“… Documents\NetBeansProjects\简单银行应用程序\target”并运行可执行Jar文件时,什么也没发生。所以我试图通过命令行(Java-jarfile.jar)手动运行它,它告诉我原因是因为一个错误:

无主清单属性

经过搜索,我找到了一个假定的解决方案,涉及将这几行添加到POM. xml:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.2</version>
    <configuration>
        <archive>
            <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.mycompany.mavenproject2.App</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

不幸的是,这只会导致一个新的错误:

错误:找不到或加载主类com.mycompany.mavenproject2.App由以下原因引起:java. lang.NoClassDefFoundError:javafx/application/Application

我不知所措,我想知道我是否只是错过了一些明显的东西。一些初步的注意事项:-我确保将此设置为我的主要项目NB-我使用默认配置-我尝试过清理和构建,以及构建,一切运行没有任何错误NB-我没有修改任何设置-明智-我确实将项目从mavenproject ect2重构为简单银行应用程序,但我使用NB的重命名选项这样做,以便它“安全”。(对于artifactID,我必须删除空格)-我已经确保所有的. class文件和.java文件都在项目文件夹中(.java在src中找到,.class在target中找到

以防万一,这是我的整个POM. xml文档:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycompany</groupId>
    <artifactId>SimpleBankingApplication</artifactId>
    <version>1.0-SNAPSHOT</version>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>13</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <archive>
                        <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>com.mycompany.mavenproject2.App</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-maven-plugin</artifactId>
                <version>0.0.4</version>
                <configuration>
                    <mainClass>com.mycompany.mavenproject2.App</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <!-- Default configuration for running -->
                        <!-- Usage: mvn clean javafx:run -->
                        <id>default-cli</id>
                    </execution>
                    <execution>
                        <!-- Configuration for manual attach debugging -->
                        <!-- Usage: mvn clean javafx:run@debug -->
                        <id>debug</id>
                        <configuration>
                            <options>
                                <option>-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:8000</option>
                            </options>
                        </configuration>
                    </execution>
                    <execution>
                        <!-- Configuration for automatic IDE debugging -->
                        <id>ide-debug</id>
                        <configuration>
                            <options>
                                <option>-agentlib:jdwp=transport=dt_socket,server=n,address=${jpda.address}</option>
                            </options>
                        </configuration>
                    </execution>
                    <execution>
                        <!-- Configuration for automatic IDE profiling -->
                        <id>ide-profile</id>
                        <configuration>
                            <options>
                <option>${profiler.jvmargs.arg1}</option>
                <option>${profiler.jvmargs.arg2}</option>
                <option>${profiler.jvmargs.arg3}</option>
                <option>${profiler.jvmargs.arg4}</option>
                <option>${profiler.jvmargs.arg5}</option>
                            </options>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <name>Simple Banking Application</name>
</project>

共1个答案

匿名用户

您的模块路径上没有JavaFX组件。

您可以使用包含JavaFX的JDK(例如AzulJDKFX或Liberica全JDK)。

或者,您可以按照以下说明进行操作。

请参阅将JavaFX应用程序的VM参数设置为jar文件的部分。

java --module-path /path/to/javafx-sdk-14/lib --add-modules javafx.controls,javafx.fxml -jar myJar.jar

您正在使用netBeans maven,因此请参阅官方留档openjfx.ioJavaFX and NetBeans: modular with maven以获取更多信息。它讨论了Java模块系统的VM参数,以支持JavaFX以及使用jlink创建运行时映像。

如果您不知道或不了解Java模块系统的基础知识,那么您应该花一些时间学习并从适当的教程中学习它。这将帮助您更好地理解模块系统所需的命令行参数以及module-info.java替代方案。

请参阅JavaFX标签中的打包说明,其中提供了有关打包替代方案(例如jlink和jpack)的信息。

使用最新的软件(例如JDK/JavaFX 18和maven-pluginjar0.0.8)。

当您有JavaFX组件依赖项时,不要使用maven-jar-pluginaddClasspath选项来构建您的jar。JavaFX组件不是设计为从类路径运行的。