如何从命令行* 将 -Xlint:unchecked 添加到 Gradle?

Pet*_*rch 7 gradle

我们的旧代码库时常使用已弃用和未经检查的 API,我们在输出中得到这些:

Note: C:\path\to\MyClass.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
Run Code Online (Sandbox Code Playgroud)

-Xlint:unchecked好的,那么如何从命令行重新编译 with而不进行更改build.gradle?许多其他答案显示了如何通过将其添加到build.gradle(或类似于build.gradle.kts)来修复它:

gradle.projectsEvaluated {
   tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
}
Run Code Online (Sandbox Code Playgroud)

但这需要编辑文件(创建 git diff),并且只是一个痛苦...是否有某种方法,环境变量,命令行选项或其他东西来添加编译器参数而不触及文件build.gradle*

Luk*_*fer 5

据我所知,这是不可能的。您肯定需要使用 Gradle API配置相应CompileOptions的任务。JavaExec事实上,最简单的方法就是使用文件build.gradle。如果您只想将更改保持在build.gradle最低限度,请考虑使用项目属性:

if (hasProperty('compilerArgs')) {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            compilerArgs.split().each { arg ->
                options.compilerArgs << arg
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这样,您从现在起就不需要更改build.gradle编译器参数,因为您可以简单地使用gradle <tasks> -PcompilerArgs="<arg1> <arg2>". 项目属性也可以使用环境变量来定义。

另一种完全不涉及的替代方法build.gradle是使用初始化脚本。主目录中的这些脚本适用于使用您的帐户执行的任何 Gradle 构建,因此如果您有其他不应受到影响的项目,您可以添加一些限制。适用于您的用例的简单初始化脚本可能是:

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以将此与我的第一个代码片段中的方法结合起来,以仅应用基于命令行参数的更改。

您需要将其放入文件中

  • 在命令行上使用-I或指定--init-script
  • init.gradleUSER_HOME/.gradle/目录中调用
  • .gradle目录USER_HOME/.gradle/init.d/结尾
  • .gradle目录GRADLE_HOME/init.d/结尾

当然,这些更改需要应用于任何用户/任何机器。