OpenJFX:捆绑版本与依赖项冲突

时间:2019-12-24 18:43:47

标签: java maven javafx openjfx

我有一个使用Liberica JDK 13的项目,该项目包含现成的OpenJFX,不需要外部依赖项。对我来说,最重要的功能是Liberica也提供x86构建。

但是,我必须使用Java 11编译项目子模块之一,因为它包含一些我想在Scene Builder中使用的自定义FX组件,不幸的是,Scene Builder仅支持Java 11以及以下的编译类。

这里是module-info

module foo {

    requires java.logging;
    requires java.desktop;

    requires static javafx.controls;
    requires static javafx.fxml;

    exports foo;
}

以及编译器设置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <release>11</release>
    </configuration>
</plugin>

我不了解的第一个问题是,如果我使用Java 11编译级别,那么Maven会抱怨找不到Javafx模块:

[ERROR] module not found: javafx.controls
[ERROR] module not found: javafx.fxml

那么,为什么它不抱怨任何其他必需的模块,而只抱怨javafx.*?那怎么可能JDK模块或...之间没有这种区别。

作为一种解决方法,我尝试将OpenJFX包含为Maven依赖项:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-controls</artifactId>
    <version>11</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>javafx-fxml</artifactId>
    <version>11</version>
    <scope>provided</scope>
</dependency>

没有编译错误,但是现在Intellij抱怨:

Package `foo` reads package `javafx.scene.chart` from both `javafx.controls` and `javafx.controls`

因为它同时从JDK和Maven依赖项中读取javafx.controls

有什么办法可以避免这种情况?我知道,最简单的解决方案可能是将问题模块作为一个单独的项目维护,但这正是我要避免的事情。

0 个答案:

没有答案
相关问题