วิธีเพิ่ม -Xlint: ไม่ถูกตรวจสอบในโครงการ Android Gradle ของฉัน


138

ฉันพยายามเพิ่มสิ่งต่อไปนี้ในbuild.gradleไฟล์รูท:

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

แต่ฉันได้รับสิ่งนี้:

FAILURE: Build failed with an exception.

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

ผมทำอะไรผิดหรือเปล่า?


ทุกอย่างตกลงกับพารามิเตอร์เดียวเช่น options.compilerArgs << "-Xlint: deprecation" หรือไม่
shakalaca

1
ใช่มันใช้งานได้ ฉันได้เปลี่ยนไป"-Xlint:unchecked" << "-Xlint:deprecation"และมันใช้งานได้กับทั้ง :) ถ้าคุณต้องการสร้างคำตอบด้วยสิ่งนี้ฉันจะทำเครื่องหมายว่ายินดี
rfgamaral

@RicardoAmaral บางทีคุณควรตอบด้วยตัวเองอย่างเป็นทางการแล้วดูความคิดเห็นของ shakalaca นี้
Dandre Allison

คำตอบ:


232

นี่คือสิ่งที่ทำงานให้ฉัน: (ใน build.gradle ของโครงการของคุณ)

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

1
คุณจะทำอย่างไรกับโมดูลหลักเท่านั้นไม่รวมการพึ่งพา
aleb

4
@aleb ฉันคิดว่าคุณหมายถึงใช้การตั้งค่ากับ build.gradle ปัจจุบันเท่านั้นและไม่ใช่กับ build.gradle ทั้งหมด (เช่น allprojects) ในกรณีนั้นอย่าallprojectsปิดด้วยการปิด
TheChrisPratt

นี่ควรจะสร้างความแตกต่างในการวิ่งของผ้าสำลีหรือไม่? ด้วยเหตุผลบางอย่างผ้าสำลีของฉันก็แสดงข้อความเตือนเดียวกันโดยไม่คำนึงถึง-Xlint:uncheckedการตั้งค่า
IgorGanapolsky

ฉันคิดว่าเป็นการดีกว่าที่จะเพิ่มใน "build-extras.gradle" แทนที่จะเป็น "build.gradle"
Maxim

2
ขอบคุณสิ่งนี้ใช้ได้กับฉันแม้ว่าฉันจะไม่แน่ใจว่าคำตอบนี้มาจากไหน ดูเหมือนว่าไร้สาระสำหรับฉันที่โดยค่าเริ่มต้น linter จะเพิ่มข้อผิดพลาดโดยไม่มีข้อมูลเกี่ยวกับปัญหาจนกว่าคุณจะเพิ่มตัวเลือกเหล่านี้
JHS

55

คำเตือน:แม้ว่าคำตอบนี้จะมีมากกว่า 10 upvotes แต่ก็ไม่ได้แก้ไขปัญหาในบริบทของโครงการAndroid อย่างไรก็ตาม Google พบคำถามนี้ในบริบทของโครงการที่ไม่ใช่ Android ดังนั้นฉันจึงเก็บคำตอบนี้ไว้สำหรับคนเหล่านั้น

ตามJavaCompileดูเหมือนว่าวิธีการแก้ปัญหาต่อไปนี้:

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

หากคุณต้องการให้มีสำหรับกรณีทดสอบให้ใช้ compileTestJava

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

1
สิ่งนี้มีอยู่ใน build.gradle ระดับบนสุดหรือโมดูลหรือไม่
IgorGanapolsky

5
ในไฟล์ build.gradle ของโมดูล
ดร. Simon Harrer

3
คุณสามารถขยายบริบทของตัวอย่างแรกได้หรือไม่ ที่ไหนในgradle.buildที่ไม่ได้ไป?
not2qubit

วิธีนี้ใช้ได้กับโมดูลที่ใช้javaปลั๊กอินในbuild.gradleไฟล์ แต่ไม่ใช้สำหรับโมดูลที่ใช้com.android.applicationหรือcom.android.libraryปลั๊กอิน
Adil Hussain

2
@koppor: ดูความคิดเห็นก่อนหน้า ไม่ทำงานสำหรับนักพัฒนา Android ซึ่งเป็นปัญหาสำหรับเธรดที่มีชื่อว่า "... Android gradle based project"
Robin Davies

7

วางสิ่งนี้ไว้ในไฟล์build.gradleของคุณ(ไดเรกทอรีราก):

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

4

สำหรับทุกคนที่gradle.ktsใช้สิ่งต่อไปนี้เพื่อจับคู่กับbuild.gradleไฟล์อย่างง่าย

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

ฉันมีข้อโต้แย้งการรวบรวมที่แตกต่างกันในการตั้งค่า งานต่อไปนี้สำหรับฉัน

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

คุณต้องตั้งค่า boot classpath สำหรับ JDK 1.8 ขึ้นไปสำหรับสิ่งต่างๆเช่น Unsafe และ sun.swing. * classes แก้ไขซอร์สโค้ดโดยเฉพาะอย่างยิ่งสำหรับอันหลังเนื่องจาก Jigsaw Java 9 ซึ่งเป็นการนำไปใช้แบบโมดูลาร์ขึ้นและลงสำหรับ JRE ในที่สุดก็จะทำให้วิธีการเหล่านี้ไม่สามารถเข้าถึงได้ (!) พิจารณาตัวเองเตือน


0

ฉันไม่แน่ใจว่าปัญหาเกี่ยวกับการใช้subprojectsพารามิเตอร์การกำหนดค่าGradle แต่ไวยากรณ์ที่คุณใช้:

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

สิ่งนี้ใช้ได้กับฉัน:

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

หรือ

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

หากคุณต้องการเพิ่มเพียงหนึ่งตัวเลือก (โดยปกติแล้วคุณจะเพิ่มอีก) ภายในงานที่JavaCompileคุณต้องเพิ่ม:

options.compilerArgs << "-Xlint:unchecked"

คุณสามารถค้นหาข้อมูลเพิ่มเติมเกี่ยวกับผ้าสำลีที่นี่และที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.