Bagaimana cara menambahkan -Xlint: tidak dicentang ke proyek berbasis Android Gradle saya?

139

Saya mencoba menambahkan yang berikut ini ke build.gradlefile root :

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

Tapi saya mendapatkan ini:

FAILURE: Build failed with an exception.

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

Apa yang saya lakukan salah?

rfgamaral.dll
sumber
Apakah semuanya baik-baik saja dengan hanya satu parameter seperti options.compilerArgs << "-Xlint: deprecation" ??
shakalaca
1
Ya, itu berhasil. Saya telah berubah menjadi "-Xlint:unchecked" << "-Xlint:deprecation"dan berfungsi untuk keduanya :) Jika Anda ingin membuat jawaban dengan ini, saya akan dengan senang hati menandainya sebagai diterima.
rfgamaral
@RicardoAmaral mungkin Anda harus menjawab sendiri secara resmi dan merujuk komentar shakalaca ini.
Dandre Allison

Jawaban:

234

Inilah yang berhasil untuk saya: (dalam proyek Anda build.gradle)

allprojects {
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }
}
Felipe Lima
sumber
1
Bagaimana Anda melakukannya hanya untuk modul utama, tidak termasuk dependensi?
aleb
4
@ aleb, saya anggap maksud Anda hanya menerapkan pengaturan ke build.gradle saat ini dan bukan ke semua build.gradle (yaitu allprojects). Dalam hal ini, jangan membungkusnya dalam allprojectspenutupan.
TheChrisPratt
Apakah ini seharusnya membuat perbedaan pada pengoperasian Lint? Untuk beberapa alasan, Lint saya menampilkan pesan peringatan yang sama persis terlepas dari -Xlint:uncheckedpengaturannya.
IgorGanapolsky
Saya pikir lebih baik menambahkannya ke "build-extras.gradle" daripada "build.gradle".
Maxim
2
Terima kasih, ini berhasil untuk saya meskipun saya tidak yakin dari mana jawaban ini berasal. Tampaknya konyol bagi saya bahwa secara default linter akan memunculkan kesalahan tanpa informasi tentang masalah tersebut sampai Anda menambahkan opsi ini.
JHS
56

Penafian: Meskipun jawaban ini memiliki lebih dari 10 suara positif, ini tidak mengatasi masalah dalam konteks proyek Android . Namun, Google menemukan pertanyaan ini dalam konteks proyek non-Android. Jadi, saya menyimpan jawaban ini untuk orang-orang itu.

Menurut JavaCompile , berikut ini tampaknya menjadi solusi:

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

Jika Anda menginginkannya untuk kasus uji, gunakan compileTestJava

compileTestJava {
    options.encoding = 'UTF-8'
    options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
}
koppor
sumber
1
Apakah ini masuk ke build.gradle tingkat atas, atau modul?
IgorGanapolsky
5
Di file build.gradle modul.
Dr. Simon Harrer
3
Dapatkah Anda memperluas konteks cuplikan pertama itu? Kemana gradle.buildperginya?
not2qubit
Solusi ini berfungsi untuk modul yang menerapkan javaplugin di build.gradlefile mereka tetapi tidak untuk modul yang menerapkan plugin com.android.applicationor com.android.library.
Adil Hussain
2
@koppor: lihat komentar sebelumnya. Tidak berfungsi untuk pengembang android. Yang merupakan masalah untuk utas berjudul "... Proyek berbasis gradle Android".
Robin Davies
7

Letakkan ini di file build.gradle Anda (direktori root):

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

Untuk semua orang yang menggunakan gradle.ktsberikut ini untuk mencocokkan dengan build.gradlefile sederhana

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 Shah
sumber
3

Saya memiliki argumen kompilasi yang berbeda untuk ditetapkan. Berikut ini bekerja untuk saya.

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

Anda harus menyetel jalur kelas boot untuk JDK 1.8 dan yang lebih baru untuk hal-hal seperti kelas Unsafe dan sun.swing. *. Perbaiki kode sumber terutama untuk yang terakhir, karena Jigsaw Java 9, implementasi modularitas yang akan datang untuk JRE, akhirnya akan membuat metode ini tidak dapat diakses (!). Anggap diri Anda diperingatkan.

peter_pilgrim
sumber
0

Saya tidak yakin masalahnya adalah tentang penggunaan subprojectsparameter konfigurasi Gradle , tetapi sintaks yang Anda gunakan:

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

Ini berhasil untuk saya:

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

atau

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

Jika Anda hanya ingin menambahkan satu opsi (biasanya Anda akan menambahkan lebih banyak), di dalam tugas JavaCompileAnda hanya perlu menambahkan:

options.compilerArgs << "-Xlint:unchecked"

Anda dapat menemukan informasi lebih lanjut tentang Lint di sini dan di sini .

cesards
sumber
0

Untuk penghentian, Anda sekarang dapat menggunakan ini dalam skrip kotlin gradle, yang lebih baik daripada memodifikasi compilerArgskarena ini tipe-aman:

tasks.withType<JavaCompile> {
    options.isDeprecation = true
}
ice1000
sumber