Wie füge ich -Xlint hinzu: deaktiviert für mein Android Gradle-basiertes Projekt?

138

Ich habe versucht, der Stammdatei Folgendes hinzuzufügen build.gradle:

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

Aber ich verstehe das:

FAILURE: Build failed with an exception.

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

Was mache ich falsch?

rfgamaral
quelle
Ist alles in Ordnung mit nur einem Parameter wie options.compilerArgs << "-Xlint: deprecation"?
Shakalaca
1
Ja es funktioniert. Ich habe zu geändert "-Xlint:unchecked" << "-Xlint:deprecation"und es hat für beide funktioniert :) Wenn Sie damit eine Antwort erstellen möchten, werde ich sie gerne als akzeptiert markieren.
Rfgamaral
@ RicardoAmaral Vielleicht solltest du es einfach selbst formell beantworten und auf den Kommentar dieses Shakalaca verweisen.
Dandre Allison

Antworten:

231

Das hat bei mir funktioniert: (im build.gradle Ihres Projekts)

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Felipe Lima
quelle
1
Wie würden Sie dies nur für das Hauptmodul ohne die Abhängigkeiten tun?
Aleb
4
@aleb, ich nehme an, Sie meinen, Sie wenden die Einstellung nur auf das aktuelle build.gradle und nicht auf alle build.gradle (dh alle Projekte) an. Wickeln Sie es in diesem Fall nicht in einen allprojectsVerschluss.
TheChrisPratt
Soll das bei Lint-Läufen einen Unterschied machen? Aus irgendeinem Grund zeigt mein Lint unabhängig von der -Xlint:uncheckedEinstellung genau dieselbe Warnmeldung an .
IgorGanapolsky
Ich denke, es ist besser, es zu "build-extras.gradle" anstatt zu "build.gradle" hinzuzufügen.
Maxim
2
Danke, das hat bei mir funktioniert, obwohl ich nicht sicher bin, woher diese Antwort kommt. Es scheint mir lächerlich, dass der Linter standardmäßig einen Fehler ohne Informationen über das Problem auslöst, bis Sie diese Optionen hinzufügen.
JHS
55

Haftungsausschluss: Obwohl diese Antwort mehr als 10 positive Stimmen enthält, wird das Problem im Kontext eines Android- Projekts nicht behoben . Google findet diese Frage jedoch im Zusammenhang mit Nicht-Android-Projekten. Daher behalte ich diese Antwort für diese Leute.

Laut JavaCompile scheint Folgendes eine Lösung zu sein:

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

Wenn Sie es für die Testfälle haben möchten, verwenden Sie compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
koppor
quelle
1
Geht das in das build.gradle der obersten Ebene oder in das Modul?
IgorGanapolsky
5
In der Datei build.gradle des Moduls.
Dr. Simon Harrer
3
Können Sie den Kontext dieses ersten Snippets erweitern? Wohin gradle.buildgeht es?
not2qubit
Diese Lösung funktioniert für Module, die das javaPlugin in ihrer build.gradleDatei anwenden, jedoch nicht für Module, die das Plugin com.android.applicationoder anwenden com.android.library.
Adil Hussain
2
@koppor: siehe vorherigen Kommentar. Funktioniert nicht für Android-Entwickler. Welches ist ein Problem für einen Thread mit dem Titel "... Android Gradle-basiertes Projekt".
Robin Davies
7

Fügen Sie dies in Ihre build.gradle- Datei (Stammverzeichnis) ein:

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

Verwenden Sie für alle Benutzer gradle.ktsFolgendes, um mit der einfachen build.gradleDatei übereinzustimmen

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

Ich musste ein anderes Kompilierungsargument festlegen. Folgendes funktioniert für mich.

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

Sie müssen den Boot-Klassenpfad für JDK 1.8 und höher für Dinge wie Unsafe und sun.swing. * Klassen festlegen. Korrigieren Sie den Quellcode speziell für Letzteres, da Jigsaw Java 9, die aufstrebende Modularitätsimplementierung für JRE, diese Methoden endgültig unzugänglich macht (!). Betrachten Sie sich als gewarnt.

peter_pilgrim
quelle
0

Ich bin nicht sicher, ob das Problem die Verwendung des Gradle- subprojectsKonfigurationsparameters war, aber die von Ihnen verwendete Syntax:

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

Das hat bei mir funktioniert:

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

oder

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

Wenn Sie nur eine Option hinzufügen möchten (normalerweise würden Sie weitere hinzufügen), müssen Sie innerhalb der Aufgabe JavaCompilenur Folgendes hinzufügen:

options.compilerArgs << "-Xlint:unchecked"

Weitere Informationen zu Lint finden Sie hier und hier .

cesards
quelle