我正在使用当前的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>
您的模块路径上没有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-plugin
addClasspath
选项来构建您的jar。JavaFX组件不是设计为从类路径运行的。