gradle - 如何添加-Xlint :unchecked to Gradle *from command line*?

标签 gradle

我们的旧代码库不时使用已弃用和未经检查的 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)并且只是一个痛苦......文件?

最佳答案

据我所知,这是不可能的。您肯定需要配置相应的 CompileOptionsJavaExec使用 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.gradleUSER_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/

相关文章:

android - Error :Could not find com. android.tools.build :gradle:3. 3.升级splunk:mint-android-sdk的gradle版本后出现问题

android - 使用 AOSP 树构建 Android 6 消息应用程序

android - 如何将项目与 Gradle 文件同步?

java - 根据参数修改gradle BuildType

android - 是否可以应用多个插件,如 "android-library"和 "android-reporting"

maven - 如何设置 Gradle 项目的 Maven Artifact ID?

gradle - 如何在 Gradle Kotlin DSL 中有效地填充额外的属性?

android - 应用插件失败 'dagger.hilt.android.plugin'

android-studio - 传递依赖关系在 Android Studio 中中断 "Go to declaration"

gradle - gradle bootRun 执行失败