如何将-Xlint:uncheck添加到基于Android Gradle的项目中?


138

我试图将以下内容添加到根build.gradle文件中:

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

但是我得到这个:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':Libraries:ActionBarSherlock:compileRelease'.
> invalid flag: -Xlint:unchecked -Xlint:deprecation

我究竟做错了什么?


仅使用一个参数(例如options.compilerArgs <<“ -Xlint:deprecation”)就可以了吗?
shakalaca 2013年

1
是的,它有效。我已更改为"-Xlint:unchecked" << "-Xlint:deprecation"它,并且对这两者都有效:)如果您想以此创建答案,我会很乐意将其标记为已接受。
rfgamaral 2013年

@RicardoAmaral也许您应该自己正式回答并提及此shakalaca的评论。
Dandre Allison

Answers:


232

这对我有用:(在您项目的build.gradle中)

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

1
您将如何仅对主模块执行此操作(不包括依赖项)?
aleb 2014年

4
@aleb,我假设您的意思是仅将设置应用到当前的build.gradle而不是应用到所有build.gradle的(即allprojects)。在这种情况下,请不要将其包装在allprojects闭合中。
TheChrisPratt 2014年

这应该在Lint跑步上有所作为吗?由于某种原因,无论-Xlint:unchecked设置如何,我的Lint都显示完全相同的警告消息。
IgorGanapolsky '16

我认为最好将其添加到“ build-extras.gradle”而不是“ build.gradle”。
Maxim

2
谢谢,这对我有用,尽管我不确定这个答案来自哪里。在我看来,在您添加这些选项之前,默认情况下,lint会引发错误且没有有关该问题的信息,这对我来说似乎很可笑。
JHS

55

免责声明:即使此答案有10多个投票,它也无法解决Android项目中的问题。但是,Google在非Android项目的上下文中发现了这个问题。因此,我为那些人保留了这个答案。

根据JavaCompile,以下似乎是解决方案:

compileJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}

如果您希望它具有测试用例,请使用 compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}

1
这是否在顶层build.gradle或模块中?
IgorGanapolsky '16

5
在模块的build.gradle文件中。
西蒙·哈勒(Simon Harrer)博士

3
您可以扩展第一个片段的上下文吗?它在哪里gradle.build去?
not2qubit

该解决方案适用于javabuild.gradle文件中应用插件的模块,而不适用于应用com.android.applicationcom.android.library插件的模块。
阿迪尔·侯赛因

2
@koppor:请参阅以前的评论。不适用于android开发人员。对于名为“ ... Android gradle based project”的线程,这是一个问题。
罗宾·戴维斯

7

将其放入您的build.gradle文件(根目录)中:

allprojects { // Projects
   gradle.projectsEvaluated {
      tasks.withType(JavaCompile) {
         options.encoding = 'UTF-8'
         options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
      }
   }
}

4

对于gradle.kts使用此build.gradle文件的每个人,请使用以下内容与简单文件进行匹配

build.gradle.kts

afterEvaluate {
        tasks.withType(JavaCompile::class) {
            options.compilerArgs.add("-Xlint:unchecked")
            options.compilerArgs.add("-Xlint:deprecation")
        }
    }

build.gradle

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

3

我要设置一个不同的编译参数。以下对我有用。

gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
        options.compilerArgs << "-XDignore.symbol.file"
        options.bootClasspath = "$System.env.JAVA_HOME/jre/lib/rt.jar"
    }
}

您必须为JDK 1.8及更高版本设置引导类路径,以用于Unsafe和sun.swing。*类。专门为后者修复源代码,因为JRE即将实现的Jigsaw Java 9模块化实现最终将使这些方法不可访问(!)。考虑一下自己被警告。


0

我不确定问题是否与使用Gradle subprojects配置参数有关,但与您使用的语法有关:

options.compilerArgs << "-Xlint:unchecked -Xlint:deprecation"

这对我有用:

subprojects {
  gradle.projectsEvaluated {
    tasks.withType(JavaCompile) {
      options.compilerArgs += [
        '-Xlint:unchecked', // Shows information about unchecked or unsafe operations.
        '-Xlint:deprecation', // Shows information about deprecated members.
      ]
    }
  }
}

要么

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

如果只想添加一个选项(通常会添加更多选项),则JavaCompile只需在任务内添加:

options.compilerArgs << "-Xlint:unchecked"

您可以在此处此处找到有关Lint的更多信息。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.