如何使用 kotlin dsl Gradle 将编译器参数传递给 java Compiler

Posted

技术标签:

【中文标题】如何使用 kotlin dsl Gradle 将编译器参数传递给 java Compiler【英文标题】:How to pass compiler arguments to java Compiler with kotlin dsl Gradle 【发布时间】:2021-09-18 05:42:28 【问题描述】:

我想为我的 gradle 构建任务向 java 编译器添加参数 --add-exports java.rmi/sun.rmi.server=ALL-UNNAMED。我正在使用 gradle kotlin dsl。

以下是更新后的 JavaCompiler 任务。

tasks.withType<JavaCompile> 
    val compilerArgs = options.compilerArgs
    compilerArgs.add("--add-exports java.rmi/sun.rmi.server=ALL-UNNAMED ")

当我运行 gradle compileJava 任务时,出现以下错误。

出了什么问题: 任务 ':compileJava' 执行失败。

错误:无效标志:--add-exports java.rmi/sun.rmi.server=ALL-UNNAMED

尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

根据javadoc,options.compilerArgs 返回List&lt;String&gt;。所以你可以这样写:

tasks.withType<JavaCompile> 
    val compilerArgs = options.compilerArgs
    compilerArgs.addAll(listOf("--add-exports", "java.rmi/sun.rmi.server=ALL-UNNAMED"))

还要确保您拥有 Java 9+。

【讨论】:

以上是关于如何使用 kotlin dsl Gradle 将编译器参数传递给 java Compiler的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Gradle Kotlin DSL 对 Spring Boot 应用程序进行 Dockerize

Kotlin DSL 中的 gradle 额外属性是如何设置的?

如何将 Gradle 中的原生 JUnit 5 支持与 Kotlin DSL 结合使用?

如何从非 build-gradle 文件访问 Kotlin DSL 扩展?

使用 Gradle Kotlin DSL 配置 Jooq 时如何修复“未解析的引用:jdbc”

如何使用 kotlin dsl Gradle 将编译器参数传递给 java Compiler