JavaFX,JLink/JPackage 模块问题 - 添加库 "Error occurred during initialization of boot layer java.lang.module.FindException"

JavaFX, JLink/JPackage Module issue - adding Libraries "Error occurred during initialization of boot layer java.lang.module.FindException"

IDE:IntelliJ。 第一次尝试将 JavaFX 与一些附加库和可安装包一起使用 - (c/o JLink/JPackage) 已按照 OpenJFX 的说明进行 IDE 的模块化项目,并且可以毫无问题地使其工作。 https://openjfx.io/openjfx-docs/

正在添加库,但我刚收到此错误: "引导层初始化出错 java.lang.module.FindException: 未找到模块 eu.hansolo.medusa,ModuleName 需要它

已阅读许多关于此错误的类似线程,但在这里没有特别高兴。

已尝试在 运行 配置上添加到 VM,即:
--模块路径 ${PATH_TO_FX}:mods/production --添加模块 javafx.controls,javafx.fxml,eu.hansolo.medusa -
仍然收到 "引导层初始化期间发生错误 java.lang.module.FindException: 未找到模块 eu.hansolo.medusa"

但是..如果我删除"module-info.java"文件..我可以运行在IntelliJ中应用没问题..但是..我然后无法使用 JLink 制作自定义 运行time 图像。

我将不胜感激任何阅读方面的建议或指示,并提前致谢。

所以问题似乎是您没有将 Medusa 添加到您的模块路径。我完成这个的方法是使用 maven。

我将依赖项添加到我的 pom 文件并创建了一个模块-info.java,一切似乎都正常。

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <properties>
        <maven.compiler.source>11</maven.compiler.source>
        <maven.compiler.target>11</maven.compiler.target>
    </properties>
    <groupId>org.example</groupId>
    <artifactId>MavenFxied</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-controls</artifactId>
            <version>14.0.1</version>
        </dependency>
        <dependency>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-graphics</artifactId>
            <version>14.0.1</version>
        </dependency>
        <dependency>
            <groupId>eu.hansolo</groupId>
            <artifactId>Medusa</artifactId>
            <version>11.5</version>
        </dependency>
    </dependencies>

</project>

模块-info.java

module mavenfxied {
    requires javafx.controls;
    requires eu.hansolo.medusa;
    exports example;
}

我做了一个例子class来测试一下。

Main.java

package example;

import eu.hansolo.medusa.Gauge;
import eu.hansolo.medusa.GaugeBuilder;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class Main extends Application {

    public void start(Stage stage) throws Exception {
        StackPane pane = new StackPane();
        Gauge g = GaugeBuilder.create()
                .skinType(Gauge.SkinType.SPACE_X)
                .animated(true)
                .decimals(0)
                .title("SpaceX")
                .unit("km/h")
                .maxValue(30000)
                .threshold(25000)
                .build();
        pane.getChildren().add(g);
        Scene scene = new Scene(pane);
        stage.setScene(scene);
        stage.show();
    }
}

如果您不使用 maven,那么将 jar 文件添加到模块路径上的某个位置的评论中提出的解决方案可能是唯一的方法。