如何通过 Gradle 将 -parameters javac 标志传递给 Java 编译器?

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

我有一个 Gradle 管理的多项目设置,它依赖于新的 Java 8

-parameters
编译器标志。我需要两种包含编译器标志的方法:

  • 仅测试类(主项目应在不附加参数名称的情况下进行编译)。
  • 致所有已编译的来源。

我试过这个:

  tasks.withType(JavaCompile) {
    options.compilerArgs << '-parameters'
    options.fork = true
    options.forkOptions.executable = 'javac'
  }

...但它似乎无法正常工作。

gradle javac
6个回答
48
投票

您应该使用配置Java编译插件的标准方法:

apply plugin: 'java'

compileJava {
    options.compilerArgs << '-parameters'
}

12
投票

对于 Android 项目,可以添加例如以下在 gradle android 范围内。

// Used to get more info from dagger regarding binding compile errors
// see https://github.com/google/dagger/wiki/Dagger-2.17-@Binds-bugs
tasks.withType(JavaCompile) {
    options.compilerArgs += ["-Adagger.floatingBindsMethods=enabled"]
}

2
投票

我必须在 kotlin 项目中添加对参数的支持。 方法是设置 javaParameters kotlin 选项

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_11.toString()

    javaParameters = true
}

1
投票

@Crazyjavahacking 的回答是正确的

另外,请检查您是否像我一样在使用其他参数的子项目中重新定义了它(在我的例子中是mapstruct):

options.compilerArgs = ['-Amapstruct.defaultComponentModel=spring'] // do not do this

始终附加参数

options.compilerArgs << '-Amapstruct.defaultComponentModel=spring'

希望它可以为其他人节省一些时间,我个人损失了 2 个小时,因为我完全忘记了子项目中的这一行并且专注于主 build.gradle


0
投票

当在 Java 项目中使用 Kotlin 配置文件时,带有

build.gradle.kts
文件,上述建议不起作用。这做到了:

tasks.withType<JavaCompile> {
  // Support Beam's @JavaBeanSchema with @SchemaCreate all-args constructors
  options.compilerArgs.add("-parameters")
}

-3
投票
compileJava {
  options.compilerArgs.addAll(['--release', javaVersion])
}
© www.soinside.com 2019 - 2024. All rights reserved.