Comment ajouter -Xlint: décoché à mon projet basé sur Android Gradle?

138

J'ai essayé d'ajouter ce qui suit au build.gradlefichier racine :

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

Mais je comprends ceci:

FAILURE: Build failed with an exception.

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

Qu'est-ce que je fais mal?

rfgamaral
la source
Est-ce que tout va bien avec un seul paramètre tel que options.compilerArgs << "-Xlint: deprecation" ??
shakalaca
1
Oui cela fonctionne. J'ai changé "-Xlint:unchecked" << "-Xlint:deprecation"et cela a fonctionné pour les deux :) Si vous voulez créer une réponse avec ceci, je la marquerai volontiers comme acceptée.
rfgamaral
@RicardoAmaral peut-être que vous devriez y répondre vous-même formellement et renvoyer le commentaire de ce shakalaca.
Dandre Allison

Réponses:

232

C'est ce qui a fonctionné pour moi: (dans build.gradle de votre projet)

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Felipe Lima
la source
1
Comment feriez-vous pour uniquement le module principal, à l'exclusion des dépendances?
aleb du
4
@aleb, je suppose que vous voulez dire n'appliquez le paramètre qu'au build.gradle actuel et non à tous les build.gradle (c'est-à-dire à tous les projets). Dans ce cas, ne l'enveloppez pas dans une allprojectsfermeture.
TheChrisPratt
Est-ce censé faire une différence sur les courses Lint? Pour une raison quelconque, mon Lint affiche exactement le même message d'avertissement quel que soit le -Xlint:uncheckedréglage.
IgorGanapolsky
Je pense qu'il vaut mieux l'ajouter à "build-extras.gradle" au lieu de "build.gradle".
Maxim le
2
Merci, cela a fonctionné pour moi même si je ne sais pas d'où vient cette réponse. Il me semble ridicule que, par défaut, le linter soulève une erreur sans aucune information sur le problème jusqu'à ce que vous ajoutiez ces options.
JHS
55

Avertissement: même si cette réponse a plus de 10 votes positifs, elle ne résout pas le problème dans le contexte d'un projet Android . Cependant, Google trouve cette question dans le contexte de projets non Android. Ainsi, je garde cette réponse pour ces gens.

Selon JavaCompile , ce qui suit semble être une solution:

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

Si vous le souhaitez pour les cas de test, utilisez compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
Koppor
la source
1
Cela va-t-il dans le build.gradle de niveau supérieur ou dans le module?
IgorGanapolsky
5
Dans le fichier build.gradle du module.
Dr Simon Harrer
3
Pouvez-vous élargir le contexte de ce premier extrait de code? Où va- gradle.buildt-il?
not2qubit
Cette solution fonctionne pour les modules qui appliquent le javaplugin dans leur build.gradlefichier mais pas pour les modules qui appliquent le plugin com.android.applicationou com.android.library.
Adil Hussain
2
@koppor: voir le commentaire précédent. Ne fonctionne pas pour les développeurs Android. Ce qui pose problème pour un fil de discussion intitulé "... projet basé sur Android gradle".
Robin Davies
7

Mettez ceci dans votre fichier build.gradle (répertoire racine):

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

Pour tous les utilisateurs, gradle.ktsutilisez ce qui suit pour faire correspondre le build.gradlefichier 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.
la source
3

J'avais un argument de compilation différent à définir. Ce qui suit fonctionne pour moi.

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

Vous devez définir le chemin de classe de démarrage pour JDK 1.8 et supérieur pour des éléments tels que Unsafe et sun.swing. *. Corrigez le code source en particulier pour ce dernier, car Jigsaw Java 9, l'implémentation de modularité à venir pour le JRE, rendra finalement ces méthodes inaccessibles (!). Considérez-vous averti.

peter_pilgrim
la source
0

Je ne suis pas sûr que le problème concernait l'utilisation du subprojectsparamètre de configuration Gradle , mais la syntaxe que vous avez utilisée:

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

Cela a fonctionné pour moi:

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

Si vous ne souhaitez ajouter qu'une seule option (vous en ajouteriez normalement plus), il JavaCompilevous suffit d'ajouter dans la tâche :

options.compilerArgs << "-Xlint:unchecked"

Vous pouvez trouver plus d'informations sur Lint ici et ici .

cesards
la source