Jak dodać -Xlint: niezaznaczone do mojego projektu opartego na Androidzie Gradle?

138

Próbowałem dodać do build.gradlepliku głównego :

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

Ale rozumiem:

FAILURE: Build failed with an exception.

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

Co ja robię źle?

rfgamaral
źródło
Czy wszystko jest w porządku tylko z jednym parametrem, takim jak options.compilerArgs << "-Xlint: deprecation" ??
shakalaca
1
Tak to działa. Zmieniłem na "-Xlint:unchecked" << "-Xlint:deprecation"i zadziałało dla obu :) Jeśli chcesz stworzyć odpowiedź z tym, z przyjemnością oznaczy ją jako zaakceptowaną.
rfgamaral
@RicardoAmaral może powinieneś sam odpowiedzieć formalnie i odnieść się do komentarza tej shakalaki.
Dandre Allison,

Odpowiedzi:

232

Oto, co zadziałało dla mnie: (w pliku build.gradle twojego projektu)

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Felipe Lima
źródło
1
Jak byś to zrobił tylko dla modułu głównego, z wyłączeniem zależności?
aleb
4
@aleb, zakładam, że masz na myśli zastosowanie tego ustawienia tylko do bieżącego build.gradle, a nie do wszystkich build.gradle (tj. do wszystkich projektów). W takim przypadku nie zawijaj go w allprojectszamknięcie.
TheChrisPratt
Czy to ma mieć wpływ na przebieg Lint? Z jakiegoś powodu mój Lint wyświetla dokładnie ten sam komunikat ostrzegawczy, niezależnie od -Xlint:uncheckedustawienia.
Igor Ganapolsky
Myślę, że lepiej jest dodać go do „build-extras.gradle” zamiast „build.gradle”.
Maxim
2
Dzięki, to zadziałało, chociaż nie jestem pewien, skąd pochodzi ta odpowiedź. Wydaje mi się śmieszne, że domyślnie linter zgłosi błąd bez informacji o problemie, dopóki nie dodasz tych opcji.
JHS
55

Zastrzeżenie: mimo że ta odpowiedź ma więcej niż 10 głosów za, nie rozwiązuje problemu w kontekście projektu Android . Jednak Google znajduje to pytanie w kontekście projektów innych niż Android. Dlatego zachowuję tę odpowiedź dla tych ludzi.

Według JavaCompile rozwiązaniem wydaje się być:

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

Jeśli chcesz, aby to miało dla przypadków testowych, użyj compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
koppor
źródło
1
Czy dzieje się to w build.gradle najwyższego poziomu, czy w module?
IgorGanapolsky
5
W pliku build.gradle modułu.
Dr. Simon Harrer
3
Czy możesz rozszerzyć kontekst tego pierwszego fragmentu? Gdzie gradle.buildto idzie?
not2qubit
To rozwiązanie działa dla modułów, które stosują javawtyczkę w swoim build.gradlepliku, ale nie dla modułów, które stosują wtyczkę com.android.applicationlub com.android.library.
Adil Hussain,
2
@koppor: zobacz poprzedni komentarz. Nie działa dla programistów Androida. Co jest problemem w przypadku wątku zatytułowanego „... Projekt oparty na Androidzie Gradle”.
Robin Davies
7

Umieść to w swoim pliku build.gradle (katalog główny):

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

Dla każdego używającego gradle.ktsużyj poniższego, aby dopasować prosty build.gradleplik

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.
źródło
3

Miałem inny argument kompilacji do ustawienia. Poniższe działa dla mnie.

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

Musisz ustawić startową ścieżkę klas dla JDK 1.8 i nowszych dla klas Unsafe i sun.swing. *. Napraw kod źródłowy specjalnie dla tego ostatniego, ponieważ Jigsaw Java 9, nadchodząca implementacja modułowości dla JRE, ostatecznie sprawi, że te metody staną się niedostępne (!). Uważaj się za ostrzeżonego.

peter_pilgrim
źródło
0

Nie jestem pewien, czy problem dotyczył użycia subprojectsparametru konfiguracyjnego Gradle , ale użyta składnia:

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

To zadziałało dla mnie:

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

lub

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

Jeśli chcesz dodać tylko jedną opcję (normalnie dodałbyś więcej), w zadaniu JavaCompilewystarczy dodać:

options.compilerArgs << "-Xlint:unchecked"

Więcej informacji o Lint można znaleźć tutaj i tutaj .

cesardy
źródło