通过Maven的OpenJDK 11 + OpenJFX 11无法在Eclipse 2018-09 + Java 11修补程序中运行

时间:2018-10-16 15:25:42

标签: java eclipse maven javafx

我目前正在将我的一些项目从Oracle JDK8 + JavaFX8转换为OpenJDK11 + OpenJFX11。 目前,我正试图了解如何通过maven将OpenJFX11用作库。 我以前使用过maven,喜欢简单的依赖管理。

我以这种方式理解它,当我只是将openjfx添加为pom依赖项时,maven会完全处理它,而我不需要配置任何与Java模块相关的东西。

这是我pom的相关部分:

<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>

  [...]

  <dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.11.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.11.1</version>
    </dependency>

    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-base</artifactId>
      <version>11</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-controls</artifactId>
      <version>11</version>
    </dependency>
    <dependency>
      <groupId>org.openjfx</groupId>
      <artifactId>javafx-graphics</artifactId>
      <version>11</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>11</source>
                <target>11</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>[My Mainclass]</mainClass>
            </configuration>
        </plugin>
    </plugins>
  </build>
</project>

如您所见,我最初希望将Log4J2和BAsic JavaFX模块作为我项目的依赖项。 因为我已经无法通过maven启动OpenJFX11应用程序,所以我偶然发现了这个线程: Different behaviour between Maven & Eclipse to launch a JavaFX 11 app 因此,我将Entry主类和JavaFX扩展Application类彼此分离,只有一个调用另一个来启动应用程序。

当我通过maven从命令提示符启动该项目时

mvn compile exec:java

它运行正常,并弹出JavaFX应用程序。

我现在不能做的是在eclipse中创建一个启动配置,该配置将在Eclipse中启动我的应用程序,因此我可以使用eclipse调试器作为示例。 我试图用完全相同的参数创建一个Maven启动配置: enter image description here

但是当我启动此配置时,它失败并显示以下堆栈跟踪:

[WARNING] 
java.lang.NoSuchMethodError: <init>
    at com.sun.glass.ui.win.WinApplication.staticScreen_getScreens (Native Method)
    at com.sun.glass.ui.Screen.initScreens (Screen.java:412)
    at com.sun.glass.ui.Application.lambda$run$1 (Application.java:152)
    at com.sun.glass.ui.win.WinApplication._runLoop (Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3 (WinApplication.java:174)
    at java.lang.Thread.run (Thread.java:834)
[WARNING] 
java.lang.NoSuchMethodError: <init>
    at com.sun.glass.ui.win.WinApplication.staticScreen_getScreens (Native Method)
    at com.sun.glass.ui.Screen.initScreens (Screen.java:412)
    at com.sun.glass.ui.Application.lambda$run$1 (Application.java:152)
    at com.sun.glass.ui.win.WinApplication._runLoop (Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3 (WinApplication.java:174)
    at java.lang.Thread.run (Thread.java:834)
[WARNING] 
java.lang.NullPointerException
    at com.sun.prism.d3d.D3DPipeline.getAdapterOrdinal (D3DPipeline.java:205)
    at com.sun.javafx.tk.quantum.QuantumToolkit.assignScreensAdapters (QuantumToolkit.java:695)
    at com.sun.javafx.tk.quantum.QuantumToolkit.runToolkit (QuantumToolkit.java:313)
    at com.sun.javafx.tk.quantum.QuantumToolkit.lambda$startup$10 (QuantumToolkit.java:258)
    at com.sun.glass.ui.Application.lambda$run$1 (Application.java:153)
    at com.sun.glass.ui.win.WinApplication._runLoop (Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$runLoop$3 (WinApplication.java:174)
    at java.lang.Thread.run (Thread.java:834)

在我看来,这是因为缺少本机库或方法,并且在我的项目中没有直接的内容。但是通常javafx依赖项应该自动添加系统本机(在我看来,win是在maven依赖项下出现)。

我发现的只是这个线程,但是我不能真正为我的问题创建解决方案: NoSuchMethodError: <init> in com.sun.glass.ui.win.WinApplication.staticScreen_getScreens

预先感谢

1 个答案:

答案 0 :(得分:1)

好的,我从系统中卸载了所有Java实例和Eclipse。重新安装了eclipse,它现在看起来像是一种魅力。可能是环境问题导致eclipse与磨损的本机库一起启动。