pom文件供参考
<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>Application</groupId>
<artifactId>Main</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>SpaceRunner</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>10</release>
</configuration>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.6.0</version>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>Application.Main</mainClass>
</configuration>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<mainClass>
Application.Main
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>Application.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
这个答案解释了为什么fat/uber jar在JavaFX11上失败。简而言之:
这个错误来自java.base模块中的sun.launcher.launcherHelper。之所以如此,是因为主app扩展应用,有一个主方法。如果是这种情况,则LauncherHelper将检查javafx.graphics
模块是否作为命名模块出现。如果该模块不存在,则中止发射。
并且已经为Gradle提出了一个解决方案。
您的application
包中将有新类(名称不正确):
// NewMain.java
public class NewMain {
public static void main(String[] args) {
Main.main(args);
}
}
和现有的main
类,原样:
//Main.java
public class Main extends Application {
@Override
public void start(Stage stage) {
...
}
public static void main(String[] args) {
launch(args);
}
}
现在您需要修改pom并为不同的插件设置主类:
<mainClass>application.NewMain</mainClass>
因此您正在使用:
现在,如果您生成fat jar,您将捆绑所有这些依赖项(以及项目中的其他常规第三方依赖项),并且您将能够以以下方式运行项目:
java -jar myFatJar-1.0-SNAPSHOT.jar
有一种解决方案可以生成一个您可以分发的跨平台jar:包括其他平台的其余本机库。
这很容易完成,因为您只需要包含三个平台的图形模块依赖项:
<dependencies>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>11</version>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics </artifactId>
<version>11</version>
<classifier>win</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics </artifactId>
<version>11</version>
<classifier>linux</classifier>
</dependency>
<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-graphics </artifactId>
<version>11</version>
<classifier>mac</classifier>
</dependency>
</dependencies>
大小
我有一个maven项目,我想导出到runnable中。jar文件。 在VSCode中,项目可以正常工作。导出的项目包括。jar文件和包含所有javaFX文件的libs文件夹: 运行以下命令时出现问题: 我不明白为什么会出现这个错误,因为所有JavaFX文件都位于libs文件夹中并且可见。 我目前使用SDKman的Java Temurin 18.0.1。 <代码>Pom。xml文件: 我尝试下载Ja
我第一次尝试使用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。应用缺少应用程序
我使用javafx和java-9在eclipse中处理java项目,但我遇到了一个错误: 错误:缺少JavaFX运行时组件,运行此应用程序需要这些组件 我已安装: java-9-openjdk。x86\u 64 java-9-openjdk-devel-9.0.4.11-4。fc27。x86\u 64 openjfx-8.0.152-12。b04。fc27。x86\u 64 openjfx-dev
使用“mvn包”创建jar后,我使用以下命令从jar创建安装程序: 当尝试双击项目可执行文件(.exe由jpackage创建)时,它不会打开。从cmd运行时,我收到以下错误消息: C: \程序文件\项目\u可执行文件\u名称 奇怪的是,如果我双击jar(jpack用来创建程序映像的那个),它会启动我的应用程序。java-jar也是如此。当使用intellij和mvn javafx的“运行”按钮时,
我用编写了以下测试(使用框架时): 然而,当我运行它时,字段似乎丢失了。我得到以下错误: 我想知道为什么,因为我在一节中声明了它。你能帮我吗?