我已经使用Gradle创建了JavaFX应用程序,并希望将其及其所有依赖项以及JRE导出到exe,这是最好的方法?
我尝试使用Gradle-launch4j提供的快速入门,但是该exe无法启动,它确实在IDE中启动,并且当我从命令行运行时
我收到错误消息JavaFX modules are needed to run the application
这是我的build.gradle脚本
plugins {
id 'java'
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.5'
id 'edu.sc.seis.launch4j' version '2.4.6'
}
group 'Starter Apps'
version '1.0-SNAPSHOT'
sourceCompatibility = 11
mainClassName = "$moduleName/controllers.Main"
repositories {
mavenCentral()
jcenter()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
compile (group: 'com.jfoenix', name: 'jfoenix', version: '9.0.8'){
exclude group: 'org.openjfx'
}
compile ('de.jensd:fontawesomefx-controls:11.0'){
exclude group: 'org.openjfx'
}
compile ('de.jensd:fontawesomefx:8.9'){
exclude group: 'org.openjfx'
}
compile ('de.jensd:fontawesomefx-icons525:4.6.3'){
exclude group: 'org.openjfx'
}
compile (group: 'com.sun.mail', name: 'javax.mail', version: '1.6.2'){
exclude group: 'org.openjfx'
}
}
//create a single Jar with all dependencies
task fatJar(type: Jar) {
manifest {
attributes 'Implementation-Title': 'Gradle Jar File Example',
'Implementation-Version': version,
'Main-Class': "controllers.Main"
}
baseName = project.name + '-all'
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } }
with jar
}
javafx {
modules = [ 'javafx.controls', 'javafx.fxml' ]
version = '11.0.+'
}
launch4j {
headerType='console'
outfile = "Burj2.exe"
icon = "${projectDir}/src/main/resources/images/icon.ico"
jar = '../libs/Master_Mode_System_Config-all-1.0-SNAPSHOT.jar'
}
这是我的module-info.java
module Master_Mode_System_Config {
requires javafx.controls;
requires javafx.fxml;
requires java.mail;
requires com.jfoenix;
opens controllers to javafx.fxml;
exports controllers;
}
App在IDE上运行良好,对于为什么会出现问题我感到非常困惑。 任何帮助将不胜感激。
答案 0 :(得分:0)
通过以下更改更新build.gradle。由于它是JavaFx应用程序,因此不能是控制台类型。它应该是 gui 类型,我已经在下面进行了更新。您必须提供主类名(具有主方法的类名)和完整的软件包名称。运行后,您将可以看到exe文件,然后可以启动它。
launch4j {
headerType="gui"
mainClassName = <provide your main class name>
outfile = "Burj2.exe"
icon = "${projectDir}/src/main/resources/images/icon.ico"
jar = '../libs/Master_Mode_System_Config-all-1.0-SNAPSHOT.jar'
}
答案 1 :(得分:0)
我的解决方法错误:缺少JavaFX运行时组件,并且是运行此应用程序所必需的:
创建一个新类(例如Application
),该类不会使用main方法扩展App.main
。
从Main.main
调用Main.main
(应用程序扩展应用程序)方法。
现在运行调用public class App extends Application {
[...]
public static void main(String [] args) {
launch(args);
}
[...]
}
public class Main {
public static void main(String [] args) {
App.main(args);
}
}
的应用程序。
{{1}}