我在使用 jlink gradle 插件制作模块化图像时遇到问题。我的项目使用运行 jdk15 的 Xstream 和 JavaFX。由于制作包含 javaFX 依赖项的 .jar 文件被证明是有问题的,因此我尝试按照此处的建议使用 jlink(1)。当我尝试运行“jlink”任务时,出现了与此类似的问题(2)。即使我已将 xpp3_min-1.1.4c.jar中的/METFA-INF/services/org.xmlpull.v1.XmlPullParserFactory 更改为:
org.xmlpull.mxp1.MXParser
org.xmlpull.mxp1_serializer.MXSerializer
运行“jlink”任务时出现新问题:
\build\jlinkbase\tmpjars\shady.entertainment.merged.module\module-info.java:41: error: package org.xmlpull.mxp1_serializer does not exist
org.xmlpull.mxp1_serializer.MXSerializer;
最后一行在 module-info.java 中创建错误:
...
requires java.xml;
requires java.desktop;
requires jdk.unsupported;
provides org.xmlpull.v1.XmlPullParserFactory with org.xmlpull.mxp1.MXParser,
org.xmlpull.mxp1_serializer.MXSerializer;
}
我的gradle.build看起来像这样:
plugins {
id 'java'
id 'application'
id 'org.javamodularity.moduleplugin' version '1.5.0'
id 'org.openjfx.javafxplugin' version '0.0.9'
id 'org.beryx.jlink' version '2.12.0'
}
group 'shady.entertainment'
version '1'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
// jsoup HTML parser library @ https://jsoup.org/
implementation 'org.jsoup:jsoup:1.13.1'
implementation 'com.thoughtworks.xstream:xstream:1.4.15'
implementation 'org.jetbrains:annotations:20.1.0'
testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}
test {
useJUnitPlatform()
}
jar {
manifest {
attributes 'Main-Class': 'com.fiszki.plastyka.MainClassWrapper'
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
jlink {
options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
launcher {
name = 'FiszkiPlastyka'
}
}
javafx {
version = "15.0.1"
modules = [ 'javafx.controls','javafx.fxml']
}
mainClassName = 'com.fiszki.plastyka.MainClassWrapper'
在这一点上,我觉得我已经在互联网上搜索了大部分可能是什么原因以及可能的解决方案。这是 XStream、xmlpull 或任何其他依赖项的问题吗?可以做些什么来解决这个问题?