我正在使用 gradle 并创建了一个 jpackage 任务。但可执行文件无法正确运行,我想看看控制台中发生了什么。为此,我的研究得出的结论是我应该在 jpackage 配置中使用
--win-console
。但结果是:
这是我的build.gradle:
buildscript {
ext.gradle_version = "7.1.1"
}
plugins {
id "java"
id "application"
id "org.javamodularity.moduleplugin" version "1.8.12"
id "org.openjfx.javafxplugin" version "0.0.13"
id "org.beryx.jlink" version "2.25.0"
}
group "com.webkriativa.mypackage"
version "0.5"
var simpleitkVersion = "2.3.1"
var simpleitkLibPath = "libs/SimpleITK-" + simpleitkVersion
var simpleitkJarPath = simpleitkLibPath + "/simpleitk-" + simpleitkVersion + ".jar"
var lwjglNativesPath = "libs/lwjgl";
var dcm4chePath = "libs/dcm4che-5.31.2";
var openCVNativesWindowsPath = "libs/dcm4che-5.31.2/lib/windows-x86-64"
project.ext.lwjglVersion = "3.3.3"
project.ext.lwjglNatives = "natives-windows"
repositories {
mavenCentral()
maven {
url = uri("https://maven.scijava.org/content/repositories/public/")
}
}
tasks.withType(JavaCompile).configureEach {
options.encoding = "UTF-8"
}
application {
mainModule = "com.webkriativa.mypackage"
mainClass = "com.webkriativa.mypackage.MRETest"
}
javafx {
version = "17.0.6"
modules = ["javafx.controls", "javafx.fxml", "javafx.graphics"]
}
dependencies {
//a lot of things here
}
jar {
manifest {
attributes "Main-Class" : "com.webkriativa.mypackage.MRETest"
}
duplicatesStrategy = "exclude"
}
tasks.jpackageImage.doLast {
copy {
from("src/main/resources")
into("$buildDir/jpackage/$project.name/src/main/resources")
}
copy {
from simpleitkLibPath
into("$buildDir/jpackage/$project.name/runtime/bin")
include '**/*.dll'
}
copy {
from lwjglNativesPath
into("$buildDir/jpackage/$project.name/runtime/bin")
}
copy {
from dcm4chePath
into("$buildDir/jpackage/$project.name/runtime/bin")
}
copy{
from 'src'
into("$buildDir/jpackage/$project.name")
include 'run-noah.bat'
}
}
jlink{
jpackage {
if (org.gradle.internal.os.OperatingSystem.current().windows) {
installerOptions += ['--win-per-user-install', '--win-menu', '--win-shortcut', '--win-menu-group', '--win-dir-chooser', '--win-console']
}
}
}
run {
jvmArgs = ['-Djava.library.path="' + lwjglNativesPath + ';' + openCVNativesWindowsPath + ';' + simpleitkLibPath + '"', '--add-opens', 'java.desktop/javax.imageio.stream=dcm4che.imageio.opencv',
'--add-opens', 'java.base/java.io=dcm4che.imageio.opencv', '-Dorg.lwjgl.util.Debug=true', '-Dorg.lwjgl.util.DebugLoader=true']
}
我知道问题与 LWJGL(opengl 包装器)有关,因为在我添加此库之前它一直在工作。所以这不是 javafx/simpleitk/dcm4che 问题。
一般来说,要使用
jpackage
你需要知道:
msi
或 exe
只能在 Windows 上打包。deb
或 rpm
只能在 Linux 上打包。dmg
或pkg
只能在macos上打包。您可以执行
jpackage --help
来查看jpackage在您当前平台上可以使用的参数。
Windows下只能打包msi或exe,Linux下无法打包msi或exe。
如果你在Linux上执行jpackage --help,你将找不到
--win-console
选项。
您在 Windows 计算机上执行
jpackage --help
也是如此,您将看不到 --linux-package-name
选项。