您可以在支持 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);
}
}