【问题标题】:how to add javafx dependencies in maven with java 10如何使用 java 10 在 maven 中添加 javafx 依赖项
【发布时间】:2018-05-24 12:55:30
【问题描述】:

我切换到 ubuntu 18.04。 其中默认的 jvm 是 java 10

现在我使用 javafx 的应用程序无法编译了。

 cannot find symbol
[ERROR]   symbol:   class ObservableMap

我尝试将参数添加到 maven-compiler-plugin 以加载 javafx.graphics 模块。

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArgs>
                    <arg>--add-modules</arg>
                    <arg>javafx.graphics</arg>
                </compilerArgs>
            </configuration>
        </plugin>

结果:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] module not found: javafx.graphics

当然,java --list-modules | grep fx 什么都不返回。

我花了 10 多个小时试图弄清楚这一点。

TL:DR 我应该怎么做才能用 Java 10 编译我的 JavaFX 模块?

最小项目:

/pom.xml

<project>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <name>java10fx</name>

    <artifactId>java10fx</artifactId>
    <version>0.0.1</version>
    <groupId>my.test</groupId>
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <release>10</release>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

/src/main/java/MyApp.java

import javafx.application.Application;
import javafx.stage.Stage;

public class MyApp  extends Application{

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {}

}

错误:

java10fx/src/main/java/MyApp.java:[1,26] package javafx.application does not exist

【问题讨论】:

  • 添加最小示例
  • 有几件事需要明确,您是否正在构建模块化代码?你的 Maven 配置是什么(什么 Java 版本)?另外,添加了 Ubuntu 的标签,因为在 MacOS 上我能够非常轻松地构建类似的应用程序。
  • 只是我指定的两个文件和 mvn copile。我的java版本是openjdk 10.0.1 2018-04-17

标签: java ubuntu javafx java-10


【解决方案1】:

OpenJDK 从未包含 JavaFX,从 Java 11 开始,Oracle JDK 也不会包含,因此 JavaFX 必须成为常规依赖项。 JavaFX 背后的项目 OpenJFX 最近有 released an early access build of a standalone JavaFX SDK,它适用于 Java 10 和 11,但它尚未在 Maven Central 上可用(计划在未来使用)。

现在,您必须手动 download the SDK 并找到一种方法将其添加到您的 Maven 构建中,例如将其部署到您的 Nexus 或将其包含在您的存储库中的文件夹中。一旦它在 Maven Central 上可用,您就可以像使用任何其他依赖项一样使用它。

【讨论】:

【解决方案2】:

好吧,实际上这个问题有点复杂。

使用 ubuntu 安装的 OPENJDK 版本是 java 10 和 java 11 的混合:安装的包实际上是“openjdk-11”,但安装的 VM 将自身称为 openjdk-10。和 openjdk-11 一样,它不提供 javafx 模块。

解决办法是安装oracle jdk 10:

sudo add-apt-repository ppa:linuxuprising/java
sudo apt install oracle-java10-installer

然后我给出的最小程序起作用了。

我还清除了所有内容,例如 sudo apt remove --purge "openjdk-11*"

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-18
    相关资源
    最近更新 更多