¿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?


¿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"
        }
    }
}

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"
}

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"
      }
   }
}

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"
        }
    }

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.


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í .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.