如何使用java 10在maven中添加javafx依赖项

gui*_*lum 2 java ubuntu javafx java-10

我切换到ubuntu 18.04.其中java 10默认为jvm

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

 cannot find symbol
[ERROR]   symbol:   class ObservableMap
Run Code Online (Sandbox Code Playgroud)

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

        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <compilerArgs>
                    <arg>--add-modules</arg>
                    <arg>javafx.graphics</arg>
                </compilerArgs>
            </configuration>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

结果:

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] module not found: javafx.graphics
Run Code Online (Sandbox Code Playgroud)

当然,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>
Run Code Online (Sandbox Code Playgroud)

/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 {}

}
Run Code Online (Sandbox Code Playgroud)

错误:

java10fx/src/main/java/MyApp.java:[1,26] package javafx.application does not exist
Run Code Online (Sandbox Code Playgroud)

Nic*_*lai 6

OpenJDK从未包含JavaFX,也不包含Java 11,Oracle JDK也不会,因此JavaFX必须成为常规依赖项.OpenFFX是JavaFX背后的项目,最近发布了一个与Java 10和11一起使用的独立JavaFX SDK的早期访问版本,但它尚未在Maven Central上提供(计划在未来使用).

目前,您必须手动下载SDK并找到将其添加到Maven构建的方法,例如将其部署到Nexus或将其包含在repo的文件夹中.一旦它在Maven Central上可用,您就可以像使用任何其他依赖项一样使用它.

  • @guigolum是的,您可以构建应用程序,只是不能仅依靠Maven Central。如果您没有运行Nexus,则[此问题的答案将为您提供帮助](/sf/ask/346894481/)。 (2认同)