【问题标题】:How can I add --add-exports to a gradle application?如何将 --add-exports 添加到 gradle 应用程序?
【发布时间】:2021-08-06 21:25:58
【问题描述】:

我正在开发一个使用 java 模块系统的 Java 11 应用程序。我需要使用反射来访问 JavaFX 库的内部函数。包含该函数的 java 模块没有导出它,所以当我运行 gradle build 任务时出现以下错误:

import com.sun.javafx.tk.TKStage;
                     ^
  (package com.sun.javafx.tk is declared in module javafx.graphics, which does not export it to module com.sampleapp)

我相信这意味着我需要做--add-exports javafx.graphics/com.sun.javafx.tk=com.sampleapp,但是,我不确定如何在 gradle 中做到这一点。我尝试将其添加到applicationDefaultJvmArgs,但没有成功。

application {
    ...

    applicationDefaultJvmArgs = listOf(
        "--add-exports javafx.graphics/com.sun.javafx.tk=com.sampleapp"
    )
}

我也尝试将其添加到gradle.properties.kts,但没有成功。

org.gradle.jvmargs = listOf(
    "--add-exports javafx.graphics/com.sun.javafx.tk=com.sampleapp"
)

【问题讨论】:

  • 您的第二种方法不起作用,因为它为 Gradle 守护程序设置 JVM 参数,而不是您的应用程序。您的第一种方法将起作用,但对于 run 任务(并且可能会影响由 distribution 插件创建的脚本)。正如您所发现的,您看到的错误是编译错误,因此您需要配置编译任务(例如compileJava)。

标签: gradle javafx gradle-kotlin-dsl java-module


【解决方案1】:

我能够通过添加以下内容来解决问题:

tasks.withType<JavaCompile> {
    options.compilerArgs.addAll(arrayOf(
        "--add-exports", "javafx.graphics/com.sun.javafx.tk=com.sampleapp"
    ))
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 2015-06-19
    • 1970-01-01
    • 2023-02-17
    • 1970-01-01
    • 2016-01-09
    • 2016-05-24
    • 2018-10-23
    相关资源
    最近更新 更多