使用模块化 Java (JavaFX) 项目的 Gradle 版本运行 Eclipse JUnit 测试,还可以使用 Jlink 生成可执行映像

问题描述 投票:0回答:1

我一直在努力寻找一种干净的方法来处理 gradle 构建的模块化 Java FX 项目(使用 JDK11),它可以生成漂亮的可部署 jlink 映像,同时仍然能够在 Eclipse IDE 中执行 Junit 测试。我有:

  • 我的包中的 src/main/java 文件夹中的 JavaFX 应用程序以及必要的 info-module.java 文件。
  • JUnit 在 src/test/java 文件夹中的相应包中进行测试,该包显然不包含 info-module.java,因为 Eclipse 不允许每个项目 >1 个模块。
  • 一个 gradle.build 文件包含:
plugins {
    id 'java-library'
    id 'application'
    id 'eclipse'
    id 'org.openjfx.javafxplugin' version '0.0.12'
    id 'org.beryx.jlink' version '2.12.0'
}

dependences {
    testImplementation 'junit:junit:4.13'
}

javafx {
    version = "16"
    modules = [ 'javafx.controls', 'javafx.fxml' ]
}

mainClassName = "{my-package}.App"

eclipse {
    classpath {
        file {
            whenMerged {
                entries.findAll { it.properties.kind.equals('lib') }.each { it.entryAttributes['module'] = 'true' }
            }
        }
    }
}

jlink {
    options = ['--strip-debug', '--compress', '2', '--no-header-files', '--no-man-pages']
    launcher {
        name = 'mini'
    }
}

通过此配置,我可以轻松地从 Eclipse 中运行我的 JavaFX 应用程序(使用 gradle -> 应用程序 -> 运行任务),并且可以构建一个可爱的可部署 jlink 映像(使用 jlink 任务)。然而,我无法在我的 IDE 中运行 JUnit 测试,我经常喜欢这样做来测试一些代码和代码想法——也许部分原因是我有点业余,尽管我有相当多的业余爱好。经验。

在互联网上搜索解决方案后,我最终尝试了各种方法,例如将“requires junit”添加到 info-module.java 文件中,摆弄构建路径配置以将 JUnit4 库添加到模块路径中(这显然会消失)每次我刷新gradle),并尝试JUnit5。我没有发现任何令人满意的事情。当然 Gradle (或者可能是 Eclipse 插件)应该有一个简洁的解决方案吗?这里有一个一刀切的解决方案吗?

java eclipse gradle javafx junit
1个回答
0
投票

经过一番折腾,我的解决方案是:

  1. 允许 JUnit 测试工作:

    a.注释掉 module-info.java 文件中的所有内容 – 这会暂时生成一个非模块化项目。

    b.在 build.gradle 中注释掉 eclipse {…} 插件命令 – 这会暂时破坏 eclipse 模块化行为和 jlink 任务。

    c.刷新 Gradle。

  2. 然后,您可以运行 JUnit 测试,并继续处理您的项目,只要您不需要模块化或 jlink 任务。

  3. 恢复镜像构建的模块化和 jlink 任务:

    a.取消注释(恢复) module-info.java 文件的内容。

    b.取消注释(恢复)build.gradle 中的 eclipse {} 插件命令。

    c.刷新 Gradle。

这并不算太痛苦,只要在执行 JUnit 测试时能够在没有模块化的情况下工作即可。不过,请告诉我是否有办法避免所有这些麻烦——也许有 Gradle(或 Eclipse 插件)解决方案?

© www.soinside.com 2019 - 2024. All rights reserved.