¿Cómo agregar -Xlint: desmarcado a mi proyecto basado en Android Gradle?

138

Traté de agregar lo siguiente al build.gradlearchivo raíz :

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

Pero estoy entendiendo esto:

FAILURE: Build failed with an exception.

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

¿Qué estoy haciendo mal?

rfgamaral
fuente
¿Está todo bien con un solo parámetro, como options.compilerArgs << "-Xlint: deprecation"?
shakalaca
1
Si, funciona. He cambiado "-Xlint:unchecked" << "-Xlint:deprecation"y funcionó para ambos :) Si desea crear una respuesta con esto, con mucho gusto lo marcaré como aceptado.
rfgamaral
@RicardoAmaral tal vez deberías responderlo tú mismo formalmente y consultar el comentario de este shakalaca.
Dandre Allison el

Respuestas:

232

Esto es lo que funcionó para mí: (en el proyecto build.gradle)

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Felipe Lima
fuente
1
¿Cómo lo haría solo para el módulo principal, excluyendo las dependencias?
aleb
44
@aleb, supongo que quiere decir que solo aplica la configuración al build.gradle actual y no a todos los build.gradle (es decir, todos los proyectos). En ese caso, no lo envuelva en un allprojectscierre.
TheChrisPratt
¿Se supone que esto haga una diferencia en las carreras de Lint? Por alguna razón, mi Lint muestra exactamente el mismo mensaje de advertencia independientemente de la -Xlint:uncheckedconfiguración.
IgorGanapolsky
Creo que es mejor agregarlo a "build-extras.gradle" en lugar de "build.gradle".
Maxim
2
Gracias, esto funcionó para mí, aunque no estoy seguro de dónde vino esta respuesta. Me parece ridículo que, por defecto, el linter genere un error sin información sobre el problema hasta que agregue estas opciones.
JHS
55

Descargo de responsabilidad: aunque esta respuesta tiene más de 10 votos a favor, no aborda el problema en el contexto de un proyecto de Android . Sin embargo, Google encuentra esta pregunta en el contexto de proyectos que no son de Android. Por lo tanto, mantengo esta respuesta para esas personas.

Según JavaCompile , lo siguiente parece ser la solución:

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

Si desea que tenga para los casos de prueba, use compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
koppor
fuente
1
¿Esto va en el build.gradle de nivel superior o en el módulo?
IgorGanapolsky
55
En el archivo build.gradle del módulo.
Dr. Simon Harrer
3
¿Puedes ampliar el contexto de ese primer fragmento? ¿A dónde gradle.buildva?
not2qubit
Esta solución funciona para módulos que están aplicando el javacomplemento en su build.gradlearchivo pero no para módulos que están aplicando el complemento com.android.applicationo com.android.library.
Adil Hussain
2
@koppor: ver comentario anterior. No funciona para desarrolladores de Android. Lo cual es un problema para un hilo titulado "... proyecto basado en Android gradle".
Robin Davies
7

Ponga esto en su archivo build.gradle (directorio raíz):

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

Para todos los que usan, gradle.ktsuse lo siguiente para que coincida con el build.gradlearchivo simple

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.
fuente
3

Tenía un argumento de compilación diferente para establecer. Lo siguiente funciona para mí.

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

Debe configurar el classpath de arranque para JDK 1.8 y superior para cosas como Unsafe y sun.swing. *. Arregle el código fuente especialmente para este último, porque Jigsaw Java 9, la próxima implementación de modularidad para JRE, finalmente hará que estos métodos sean inaccesibles (!). Considérate advertido.

peter_pilgrim
fuente
0

No estoy seguro de que el problema fuera sobre el uso del subprojectsparámetro de configuración de Gradle , pero la sintaxis que usó:

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

Esto funcionó para mí:

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

o

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

Si solo desea agregar una opción (normalmente agregaría más), dentro de la tarea JavaCompilesolo necesita agregar:

options.compilerArgs << "-Xlint:unchecked"

Puede encontrar más información sobre Lint aquí y aquí .

cesards
fuente