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

kx5bkwkv  于 2023-01-13  发布在  Java
关注(0)|答案(5)|浏览(156)

我有一个由Gradle管理的多项目设置,它依赖于新的Java 8 -parameters编译器标志。我需要两种方法来包含编译器标志:

  • 仅测试类(编译主项目时不应附加参数名)。
  • 所有编译的源代码。

我试过这个:

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

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

8fq7wneg

8fq7wneg1#

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

apply plugin: 'java'

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

dz6r00yl2#

对于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"]
}
rsl1atfo

rsl1atfo3#

来自@Crazyjavahacking的答案是正确的
另外,检查一下你没有像我一样,在一个使用其他参数的子项目中重新定义它(在我的例子中是mapstruct):
options.compilerArgs = ['-Amapstruct.defaultComponentModel=spring'] // do not do this
始终附加参数options.compilerArgs << '-Amapstruct.defaultComponentModel=spring'
希望它可以保存一些时间给别人,我个人失去了2个小时,因为我完全忘记了这一行在子项目,并专注于主构建。gradle

wydwbb8l

wydwbb8l4#

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

kotlinOptions {
    jvmTarget = JavaVersion.VERSION_11.toString()

    javaParameters = true
}
hxzsmxv2

hxzsmxv25#

compileJava {
  options.compilerArgs.addAll(['--release', javaVersion])
}

相关问题