您可以使用支援 Gradle 的 IDE 開啟此範例。

此範例展示了如何透過 Problems API 發出問題,以及如何在 IDE 端使用這些報告。請參閱使用者手冊以了解更多關於 Problems API 的資訊。

執行範例

若要執行範例,請執行 ./gradlew :sample-ide:importBuild 命令。

專案結構

此範例由多個個別建置組成,並組合成一個複合建置,其佈局如下

  • sample-project:一個使用外掛程式報告問題的 Gradle 建置

  • sample-ide:一個模擬 IDE 功能的專案。換句話說,它使用 Gradle Tooling API 來配置和執行 sample-project 建置,並印出在此過程中收到的問題報告。

  • reporters/standard-plugin 展示了 Problems API 在標準 Gradle 外掛程式中的用法。

  • reporters/model-builder-plugin 展示了如何在使用 Tooling API 讀取專案配置時,使用 Problems API 報告問題。

  • reporters/script-plugin 展示了如何在預編譯腳本外掛程式中使用 Problems API。

發出問題

問題可以透過注入的 Problems 服務發出。以下是如何從外掛程式報告問題的範例。

reporters/standard-plugin/src/main/java/reporters/StandardPlugin.java
ProblemId problemId = ProblemId.create("adhoc-plugin-deprecation", "Plugin is deprecated", PROBLEM_GROUP);
problems.getReporter().report(problemId, problem -> problem
        .contextualLabel("The 'standard-plugin' is deprecated")
        .documentedAt("https://github.com/gradle/gradle/README.md")
        .severity(Severity.WARNING)
        .solution("Please use a more recent plugin version")
);

接收問題報告

問題以 Tooling API 進度事件的形式發出。它們可以透過註冊 ProgressListener 來處理。

sample-ide/src/main/java/org/gradle/sample/SampleIde.java
@Override
public void statusChanged(ProgressEvent progressEvent) {
    if (progressEvent instanceof SingleProblemEvent) {
        prettyPrint((SingleProblemEvent) progressEvent);
    } else if (progressEvent instanceof ProblemSummariesEvent) {
        prettyPrint((ProblemSummariesEvent) progressEvent);
    }
}