将IntelliJ中的JavaFX11实现从“更改为”;使用IDE中的jvm选项构建和运行”;至;“创建运行时映像”; 编辑#3(解决方案)
我没有使用任何建议的答案来解决这个问题。最后,我有一些文件夹和文件可以压缩并发送,它们不需要java安装,可以通过双击.bat文件来运行。以下程序对我有效:将IntelliJ中的JavaFX11实现从“更改为”;使用IDE中的jvm选项构建和运行”;至;“创建运行时映像”; 编辑#3(解决方案),java,maven,gradle,intellij-idea,javafx,Java,Maven,Gradle,Intellij Idea,Javafx,我没有使用任何建议的答案来解决这个问题。最后,我有一些文件夹和文件可以压缩并发送,它们不需要java安装,可以通过双击.bat文件来运行。以下程序对我有效: 从头开始创建一个新的gradle项目 将所有模块/代码添加到src/main/java文件夹中 创建一个调用main方法的AppLauncher.java 将其中一个java文件夹中的所有fxml/css移到resources文件夹中 确保对fxml-/css文件的调用没有被错误重构,并使用以下代码: //主启动方法 父根=fxmloa
- 从头开始创建一个新的gradle项目
- 将所有模块/代码添加到src/main/java文件夹中
- 创建一个调用main方法的AppLauncher.java
- 将其中一个java文件夹中的所有fxml/css移到resources文件夹中
- 确保对fxml-/css文件的调用没有被错误重构,并使用以下代码:
//主启动方法
父根=fxmloader.load(新文件(“fxml/main.fxml”).toURI().toul());
//其他FXML加载操作
FXMLLoader=null;
尝试{loader=newFXMLloader(新文件(“fxml/GRAPHISO_-proof.fxml”).toURI().tour());}
...
对于样式表:
scene.getStylesheets().add(“file:///”+新文件(“css/text field red border.css”).getAbsolutePath().replace(“\\”,“/”);
- 使用以下结构在src/main/java文件夹内创建
:module info.java
模块XYZ{
需要javafx.controls;
需要javafx.graphics;
需要java.desktop;
需要javafx.fxml;
需要javafx.base;
将main.controller打开到javafx.fxml;
//打开所有控制器模块(我的所有模块都有一个控制器子模块,例如main/controller、dlog/controller、graphiso/controller等)到javafx.fxml
//...
主要出口产品;
}
- 确保将gradle/wrapper/gradle-wrapper.properties设置为不太旧的gradle版本(
)distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-bin.zip
- 将其用作您的build.gradle:
- 安装openjdk-14.0.1二进制文件并相应地设置%JAVA_HOME%,同时安装openjfx-14.0.1(程序需要一些DLL,如上所述)
原始问题 我试图通过使用IntelliJ中的“运行配置”功能,从JavaFX11中实现的项目创建运行时映像。在我看来,这里的一个大问题是,我对maven/gradle的了解几乎不存在,这些构建工具对于这一步至关重要 在
C:\Program Files\Java
的内部,我安装了:
和javafx-sdk-11.0.2
jdk-13.0.2
——模块路径“C:\Program Files\Java\javafx-sdk-11.0.2\lib”——添加模块javafx.controls、javafx.fxml
,并将主类设置为“Main.Main”
我的项目结构如下所示:
突出显示的Main.java是一个常用的主文件(扩展应用程序,在Main中调用launch(args))。它可以加载位于其他包中的其他窗口。它不是一个不扩展应用程序并调用实际主文件的启动程序文件(如gradle building的一些解决方案所建议的)
最初,我尝试获取一个.jar文件,该文件可以在Windows和Linux上运行,无需任何其他参数。经过一番阅读后,我认为这不是一个干净的解决方案,许多资料表明,在现代解决方案中,.jar文件将与包含所有必要参数的.bat/.sh文件一起放在一起
我的问题是:如何最好地继续,我需要哪些配置/附加文件来将这个“在IDE中单击以运行”项目转换为可以通过电子邮件或类似方式共享的“独立应用程序”
我试图通过IntelliJ(以下)创建一个新的gradle项目,并将粘贴的源文件复制到src/main/java中。然后,我尝试了提供的build.gradle文件,之后没有工作,我做了一些由各种博客/论坛/等建议的更改。没有一个允许我通过IntelliJ或从命令行运行项目
大多数方法都允许我构建项目,但当尝试使用“gradlew run”或调用“java-jar file.jar”运行时,由于类异常或说我仍然缺少javafx模块,我收到了错误消息。我还尝试了一种方法,将我当前的项目转换为gradle项目,但这甚至不允许我在以后构建项目
编辑#1(JPackageScriptFX) 我已经查看了JPackageScriptFX链接。现在我得到了一个在我的机器上运行的安装程序(使用
mvn clean install
),但是当运行生成的可执行文件时,我收到一条错误消息,上面说“未能启动JVM”
到目前为止,我所做的是:
- 安装jdk-14.0.1并设置JAVA_HOME,安装wix311
- 创建了一个新的IntelliJ maven项目,名为“单身汉maven”
- 删除了初始src文件夹
- 在生成的src/main/java文件夹中添加了新模块“ZKP_Inspector”和我的旧模块
- 添加并编辑了src/main/logo/windows/duke.ico、两个pom.xml文件和build_app.bat
- 实现了调用Main.java的AppLauncher.java
- 新的项目结构:
- pom.xml(项目级,学士学位):
- pom.xml(模块级,ZKP_Inspector):
- build_app.bat:
编辑#2 我尝试从build_app.bat文件中的jpackage参数中删除
--runtime image target/java runtime^
,以便让jpackage决定要包含的内容。这增加了成本
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'org.openjfx:javafx-plugin:0.0.8'
classpath 'com.github.jengelman.gradle.plugins:shadow:5.2.0'
}
}
plugins {
id 'java'
id 'org.beryx.jlink' version '2.19.0'
}
apply plugin: 'org.openjfx.javafxplugin'
apply plugin: 'com.github.johnrengelman.shadow'
group 'org.example.abc'
version '1.0'
sourceCompatibility = 1.14
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
javafx {
sdk = 'C:\\Program Files\\Java\\javafx-sdk-14.0.1'
modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.base' ]
}
jlink {
mainClassName = 'main.AppLauncher'
launcher {
name = 'Whatever you want as name'
}
}
tasks.jlink.doLast {
copy {
from('src/main/resources')
into("$buildDir/image/bin")
}
copy {
from 'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\glass.dll',
'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\javafx_font.dll',
'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\prism_d3d.dll',
'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\prism_sw.dll'
into("$buildDir/image/bin")
}
}
java --module-path "C:\Program Files\Java\javafx-sdk-11.0.2\lib" --add-modules javafx.controls,javafx.fxml -jar your-jar.jar
/rundir
--classes [compilation output]
--source [source code]
--images [runtime image output]
package io.github.alexiyorlov.calculator;
import javafx.application.Application;
import javafx.stage.Stage;
import java.nio.file.Path;
public class Program extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
System.out.println("I'm a simple application");
primaryStage.show();
}
}
module io.github.alexiyorlov{
requires javafx.controls;
requires javafx.graphics;
exports io.github.alexiyorlov.calculator;
}
jlink
--launcher launch=io.github.alexiyorlov/io.github.alexiyorlov.calculator.Program
--module-path 'C:\Users\Alexiy\.m2\repository\org\openjfx\javafx-controls\11.0.2\javafx-controls-11.0.2-win.jar;C:\Users\Alexiy\.m2\repository\org\junit\jupiter\junit-jupiter-engine\5.7.0-M1\junit-jupiter-engine-5.7.0-M1.jar;C:\Users\Alexiy\.m2\repository\org\openjfx\javafx-base\11.0.2\javafx-base-11.0.2.jar;C:\Users\Alexiy\.m2\repository\org\openjfx\javafx-base\11.0.2\javafx-base-11.0.2-win.jar;C:\Users\Alexiy\.m2\repository\org\openjfx\javafx-graphics\11.0.2\javafx-graphics-11.0.2.jar;C:\Users\Alexiy\.m2\repository\dev\buildtool\json-tools\0.1.0\json-tools-0.1.0.jar;C:\Users\Alexiy\IdeaProjects\AnotherBuildTool\rundir\org\openjfx\javafx\11.0.2\javafx-11.0.2/.jar;C:\Users\Alexiy\.m2\repository\org\openjfx\javafx-controls\11.0.2\javafx-controls-11.0.2.jar;C:\Users\Alexiy\.m2\repository\org\openjfx\javafx-graphics\11.0.2\javafx-graphics-11.0.2-win.jar;C:\Users\Alexiy\IdeaProjects\AnotherBuildTool\rundir/classes'
--add-modules io.github.alexiyorlov
--compress=2
--output .\images\0.0.1
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath 'org.openjfx:javafx-plugin:0.0.8'
classpath 'com.github.jengelman.gradle.plugins:shadow:5.2.0'
}
}
plugins {
id 'java'
id 'org.beryx.jlink' version '2.19.0'
}
apply plugin: 'org.openjfx.javafxplugin'
apply plugin: 'com.github.johnrengelman.shadow'
group 'org.example.abc'
version '1.0'
sourceCompatibility = 1.14
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
javafx {
sdk = 'C:\\Program Files\\Java\\javafx-sdk-14.0.1'
modules = [ 'javafx.controls', 'javafx.fxml', 'javafx.base' ]
}
jlink {
mainClassName = 'main.AppLauncher'
launcher {
name = 'Whatever you want as name'
}
}
tasks.jlink.doLast {
copy {
from('src/main/resources')
into("$buildDir/image/bin")
}
copy {
from 'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\glass.dll',
'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\javafx_font.dll',
'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\prism_d3d.dll',
'C:\\Program Files\\Java\\javafx-sdk-14.0.1\\bin\\prism_sw.dll'
into("$buildDir/image/bin")
}
}