您可以使用支援 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);
}
}