如何在Gradle的命令行中添加-Xlint:unchecked参数?

7

我们的旧代码库有时会使用已弃用和未经检查的API,导致输出中出现以下信息:

Note: C:\path\to\MyClass.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.

好的,那么我该如何在不更改build.gradle的情况下,通过命令行重新编译并添加-Xlint:unchecked呢?许多其他答案会告诉你如何通过将此项添加到build.gradle(或类似于build.gradle.kts的文件)来解决问题:

gradle.projectsEvaluated {
   tasks.withType(JavaCompile) {
        options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
    }
}

但这需要编辑文件(创建git差异),非常麻烦。是否有一些方法、环境变量、命令行选项或其他方式可以在不触及build.gradle*文件的情况下添加编译器参数?

1个回答

5
据我所知,这是不可能的。您一定需要使用Gradle API配置JavaExec任务的相应CompileOptions。最简单的方法实际上是在build.gradle文件中完成。如果您只想将build.gradle文件的更改保持最小,请考虑使用项目属性。
if (hasProperty('compilerArgs')) {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            compilerArgs.split().each { arg ->
                options.compilerArgs << arg
            }
        }
    }
}

现在你无需再更改build.gradle即可修改编译器参数,只需使用gradle <tasks> -PcompilerArgs="<arg1> <arg2>"来传递参数。项目属性也可以通过环境变量定义。

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

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

您可以将此方法与我的第一段代码片段相结合,仅根据命令行参数应用更改。

您需要将此放入文件中

  • 使用-I--init-script在命令行上指定的文件
  • 名为init.gradle且位于USER_HOME/.gradle/目录中
  • .gradle结尾且位于USER_HOME/.gradle/init.d/目录中的文件
  • .gradle结尾且位于GRADLE_HOME/init.d/目录中的文件

当然,这些更改需要适用于任何用户/任何计算机。


1
运行得非常好。-I /somewhere/outside/project/compilerArgs.gradle 正是我正在寻找的。 - Peter V. Mørch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接