【问题标题】:How to pass -parameters javac flag to Java compiler via Gradle?如何通过 Gradle 将 -parameters javac 标志传递给 Java 编译器?
【发布时间】:2016-05-26 14:34:53
【问题描述】:

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

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

我试过了:

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

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

【问题讨论】:

    标签: gradle javac


    【解决方案1】:

    你应该使用标准的方式来配置Java编译插件:

    apply plugin: 'java'
    
    compileJava {
        options.compilerArgs << '-parameters'
    }
    

    【讨论】:

    • 代码 sn-p 工作(当然),但提供的评论有点......所以,“标准”实际上与 Gradle 家伙推荐的完全相反。请求者使用更接近于使用配置避免,并为所有sourceSets 等配置任务(compileJava 仅影响main sourceSet)。 “接受”的答案与此无关,下面的答案要好得多。 @JustACluelessNewbie 重新考虑。 ) Gradle 专家会做出一些赞成/反对票。很抱歉批评评论。 )
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      @Crazyjavahacking 的回答是正确的

      另外,请检查您是否没有像我一样在使用其他 args(在我的情况下为 mapstruct)的子项目中重新定义它:

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

      始终附加参数options.compilerArgs &lt;&lt; '-Amapstruct.defaultComponentModel=spring'

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

      【讨论】:

        【解决方案4】:
        compileJava {
          options.compilerArgs.addAll(['--release', javaVersion])
        }
        

        【讨论】:

          猜你喜欢
          • 2014-03-30
          • 2011-05-07
          • 1970-01-01
          • 1970-01-01
          • 2018-02-15
          • 2012-10-12
          • 1970-01-01
          • 1970-01-01
          • 2019-04-14
          相关资源
          最近更新 更多