我们的旧代码库时常使用已弃用和未经检查的 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*?
据我所知,这是不可能的。您肯定需要使用 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-scriptinit.gradle在USER_HOME/.gradle/目录中调用.gradle目录USER_HOME/.gradle/init.d/结尾.gradle目录GRADLE_HOME/init.d/结尾当然,这些更改需要应用于任何用户/任何机器。
| 归档时间: |
|
| 查看次数: |
3057 次 |
| 最近记录: |