Como adicionar -Xlint: desmarcado ao meu projeto baseado no Android Gradle?

138

Tentei adicionar o seguinte ao build.gradlearquivo raiz :

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

Mas eu estou entendendo isso:

FAILURE: Build failed with an exception.

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

O que estou fazendo de errado?

rfgamaral
fonte
Está tudo bem com apenas um parâmetro, como options.compilerArgs << "-Xlint: deprecation" ??
shakalaca
1
Sim, funciona. Eu mudei para "-Xlint:unchecked" << "-Xlint:deprecation"e funcionou para os dois :) Se você quiser criar uma resposta com isso, terei prazer em marcá-la como aceita.
Rfgamaral 09/09/2013
@RicardoAmaral talvez você deva responder formalmente e consultar o comentário deste shakalaca.
Dandre Allison

Respostas:

232

Foi isso que funcionou para mim: (no build.gradle do seu projeto)

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Felipe Lima
fonte
1
Como você faria isso apenas para o módulo principal, excluindo as dependências?
aleb
4
@ aleb, suponho que você queira dizer apenas aplicar a configuração ao build.gradle atual e não a todos os build.gradle (ou seja, todos os projetos). Nesse caso, não o allprojectsencerre.
TheChrisPratt
Isso deve fazer diferença nas execuções do Lint? Por alguma razão, meu Lint está exibindo exatamente a mesma mensagem de aviso, independentemente da -Xlint:uncheckedconfiguração.
IgorGanapolsky
Eu acho que é melhor adicioná-lo ao "build-extras.gradle" em vez de "build.gradle".
Maxim
2
Obrigado, isso funcionou para mim, embora não tenha certeza de onde veio essa resposta. Parece ridículo para mim que, por padrão, o linter gerará um erro sem informações sobre o problema até você adicionar essas opções.
JHS
55

Isenção de responsabilidade: embora essa resposta tenha mais de 10 votos positivos, ela não soluciona o problema no contexto de um projeto Android . No entanto, o Google encontra essa pergunta no contexto de projetos que não são do Android. Assim, eu mantenho essa resposta para essas pessoas.

De acordo com o JavaCompile , o seguinte parece ser a solução:

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

Se você deseja que ele tenha para os casos de teste, use compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
koppor
fonte
1
Isso ocorre no build.gradle de nível superior ou no módulo?
IgorGanapolsky
5
No arquivo build.gradle do módulo.
Dr. Simon Harrer
3
Você pode expandir o contexto desse primeiro trecho? Para onde gradle.buildele vai?
not2qubit 11/11
Esta solução funciona para os módulos que estão aplicando o javaplug - in em seu build.gradlearquivo, mas não para os módulos que estão aplicando o plug-in com.android.applicationou com.android.library.
Adil Hussain
2
@koppor: veja o comentário anterior. Não funciona para desenvolvedores do Android. O que é um problema para um encadeamento intitulado "... Projeto com base no Android gradle".
Robin Davies
7

Coloque isso em seu arquivo build.gradle (diretório raiz):

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

Para todos que usam, gradle.ktsuse o seguinte para combinar com o build.gradlearquivo simples

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"
        }
    }
Dipali s.
fonte
3

Eu tinha um argumento de compilação diferente para definir. O seguinte funciona para mim.

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

Você deve definir o caminho de classe de inicialização para o JDK 1.8 e superior para coisas como classes inseguras e sun.swing. *. Corrija o código-fonte especialmente para este último, porque o Jigsaw Java 9, a implementação de modularidade para o JRE, finalmente tornará esses métodos inacessíveis (!). Considere-se avisado.

peter_pilgrim
fonte
0

Não sei se o problema foi sobre o uso do subprojectsparâmetro de configuração Gradle , mas a sintaxe que você usou:

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

Isso funcionou para mim:

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

ou

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

Se você deseja adicionar apenas uma opção (normalmente você adicionaria mais), dentro da tarefa, JavaCompilebasta adicionar:

options.compilerArgs << "-Xlint:unchecked"

Você pode encontrar mais informações sobre o Lint aqui e aqui .

cesards
fonte