我们的旧代码库不时使用已弃用和未经检查的 API,我们在输出中得到这些:
Note: C:\path\to\MyClass.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
好的,那么我该如何使用 -Xlint:unchecked
重新编译呢?从命令行,不改变 build.gradle
?许多其他answers显示如何通过将此添加到 build.gradle
来修复它(或类似于 build.gradle.kts
):
gradle.projectsEvaluated {
tasks.withType(JavaCompile) {
options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
}
但这需要编辑文件(创建 git diffs)并且只是一个痛苦......文件?
最佳答案
据我所知,这是不可能的。您肯定需要配置相应的 CompileOptions
的 JavaExec
使用 Gradle API 的任务。最简单的方法实际上是 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
的替代方案根本就是使用initialization scripts .您的主目录中的这些脚本适用于使用您的帐户执行的任何 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/
目录
当然,这些更改需要应用于任何用户/任何机器。
关于gradle - 如何添加-Xlint :unchecked to Gradle *from command line*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63703836/