在Jenkins上运行具有JavaFX依赖项的JUnit

q3aa0525  于 2022-12-17  发布在  Jenkins
关注(0)|答案(1)|浏览(152)

我尝试在Jenkins上为我们的JavaFX应用程序设置管道。一切正常,但在启动单元测试时遇到了一个问题。每个测试都以某种方式使用了JavaFX类,失败的根本原因如下:

Caused by: java.lang.IllegalAccessException: class net.bytebuddy.description.annotation.AnnotationDescription$ForLoadedAnnotation cannot access interface com.sun.javafx.beans.IDProperty (in module javafx.base) because module javafx.base does not export com.sun.javafx.beans to unnamed module @7ee955a8

我尝试了以下方法:

  • 设置环境变量JAVA_OPTS
JAVA_OPTS=--module-path /path/to/javafx --add-modules javafx.controls,javafx.base
  • 在gradle中添加编译器选项
tasks.withType(Test).configureEach {
    doFirst {
        options.compilerArgs += [
                '--module-path', '/path/to/javafx',
                '--add-modules', 'javafx.controls,javafx.base',
        ]
        classpath = files()
    }
}

但没有任何变化。我使用的是阿苏尔编译的OpenJDK。我使用的是带有JavaFX(JDKFX)的版本,但我无法运行此测试(没有任何JavaFX引用的测试运行良好)。我还可以编译应用程序。您有任何建议吗?

eiee3dmh

eiee3dmh1#

问题是,正如评论中提到的,它不应该添加到compilerArgs,而应该添加到运行时,此外,我将其放置在错误的build.gradle文件中。解决所有问题的最终配置是将以下内容添加到主build.gradle文件:

allprojects {
  tasks.withType(Test).configureEach {
    jvmArgs += [
       '--add-modules', 'javafx.controls,javafx.base,javafx.graphics',
       '--add-opens', 'javafx.graphics/com.sun.javafx.application=ALL-UNNAMED',
       '--add-opens', 'javafx.base/com.sun.javafx.beans=ALL-UNNAMED',
    ]
  }
}

相关问题