Làm cách nào để thêm -Xlint: không được chọn vào dự án dựa trên Android Gradle của tôi?


138

Tôi đã cố gắng thêm các mục sau vào build.gradletập tin gốc :

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

Nhưng tôi đang nhận được điều này:

FAILURE: Build failed with an exception.

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

Tôi đang làm gì sai?


Mọi thứ có ổn không chỉ với một tham số, chẳng hạn như Options.compilerArss << "-Xlint: deprecation" ??
shakalaca

1
Có nó hoạt động. Tôi đã thay đổi "-Xlint:unchecked" << "-Xlint:deprecation"và nó hoạt động cho cả hai :) Nếu bạn muốn tạo câu trả lời bằng điều này, tôi sẽ vui lòng đánh dấu nó là được chấp nhận.
rfgamaral

@RicardoAmaral có lẽ bạn chỉ nên tự trả lời chính thức và tham khảo bình luận của shakalaca này.
Dandre Allison

Câu trả lời:


232

Đây là những gì làm việc cho tôi: (trong build.gradle của dự án của bạn)

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

1
Làm thế nào bạn sẽ làm điều đó chỉ cho các mô-đun chính, không bao gồm các phụ thuộc?
aleb

4
@aleb, tôi giả sử bạn có nghĩa là chỉ áp dụng cài đặt cho build.gradle hiện tại và không áp dụng cho tất cả build.gradle (tức là allprojects). Trong trường hợp đó, đừng bọc nó trong một bao allprojectsđóng.
TheChrisPratt

Đây có phải là để tạo sự khác biệt trên Lint chạy? Vì một số lý do, Lint của tôi đang hiển thị chính xác thông báo cảnh báo bất kể -Xlint:uncheckedcài đặt.
IgorGanapolsky

Tôi nghĩ tốt hơn là thêm nó vào "build-extend.gradle" thay vì "build.gradle".
Maxim

2
Cảm ơn, điều này làm việc cho tôi mặc dù tôi không chắc câu trả lời này đến từ đâu. Nó có vẻ nực cười với tôi rằng theo mặc định, kẻ nói dối sẽ đưa ra một lỗi không có thông tin về vấn đề cho đến khi bạn thêm các tùy chọn này.
JHS

55

Tuyên bố miễn trừ trách nhiệm: Mặc dù câu trả lời này có hơn 10 câu hỏi, nhưng nó không giải quyết được vấn đề trong bối cảnh của một dự án Android . Tuy nhiên, Google tìm thấy câu hỏi này trong bối cảnh các dự án không phải Android. Vì vậy, tôi giữ câu trả lời này cho những người đó.

Theo JavaCompile , sau đây dường như là giải pháp:

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

Nếu bạn muốn nó có cho các trường hợp thử nghiệm, sử dụng compileTestJava

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

1
Điều này có trong build.gradle cấp cao nhất hoặc mô-đun không?
IgorGanapolsky

5
Trong tệp build.gradle của mô-đun.
Tiến sĩ Simon Harrer

3
Bạn có thể mở rộng bối cảnh của đoạn trích đầu tiên đó không? Nơi ở gradle.buildhiện nó đi?
not2qubit

Giải pháp này hoạt động cho các mô-đun đang áp dụng javaplugin trong build.gradletệp của họ nhưng không áp dụng cho các mô-đun đang áp dụng com.android.applicationhoặc com.android.libraryplugin.
Adil Hussain

2
@koppor: xem bình luận trước. Không hoạt động cho các nhà phát triển Android. Đó là một vấn đề đối với một chủ đề có tên "... Dự án dựa trên lớp Android".
Robin Davies

7

Đặt cái này trong tệp build.gradle của bạn (thư mục gốc):

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

4

Đối với tất cả mọi người sử gradle.ktsdụng sử dụng sau đây để phù hợp với đơn giảnbuild.gradle tệp

build.gradle.kts

afterEvaluate {
        tasks.withType(JavaCompile::class) {
            options.compilerArgs.add("-Xlint:unchecked")
            options.compilerArgs.add("-Xlint:deprecation")
        }
    }

xây dựng. nâng cấp

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

3

Tôi đã có một đối số biên dịch khác nhau để thiết lập. Các công việc sau đây cho tôi.

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

Bạn phải đặt đường dẫn khởi động cho JDK 1.8 trở lên cho những thứ như các lớp không an toàn và sun.swing. *. Khắc phục mã nguồn đặc biệt cho lần sau, vì Jigsaw Java 9, việc triển khai mô đun sắp tới và sắp tới cho JRE, cuối cùng sẽ làm cho các phương thức này không thể truy cập được (!). Hãy xem xét bản thân cảnh báo.


0

Tôi không chắc vấn đề là do sử dụng subprojectstham số cấu hình Gradle , nhưng cú pháp bạn đã sử dụng:

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

Điều này làm việc cho tôi:

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

hoặc là

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

Nếu bạn chỉ muốn thêm một tùy chọn (thông thường bạn sẽ thêm nhiều hơn), bên trong tác vụ JavaCompilebạn chỉ cần thêm:

options.compilerArgs << "-Xlint:unchecked"

Bạn có thể tìm thêm thông tin về Lint tại đâyđây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.