您可以使用 IntelliJ 原生导入器Eclipse Buildship 在 IDE 中打开此示例。

此示例展示了如何通过 Problems API 发出问题,以及如何在 IDE 端使用这些报告。

运行示例

要运行示例,请执行 ./gradlew :sample-ide:importBuild 命令。

项目结构

该示例由多个独立的构建组成,这些构建组合成一个复合构建,其布局如下

  • sample-project:一个包含报告问题的插件的 Gradle 构建

  • sample-ide:模拟 IDE 功能的项目。换句话说,它使用 Gradle Tooling API 来配置和运行 sample-project 构建,并打印在过程中收到的问题报告。

  • reporters/standard-plugin 展示了在标准 Gradle 插件中使用 Problems API 的方法。

  • reporters/model-builder-plugin 展示了如何使用 Problems API 在通过 Tooling API 读取项目配置时报告问题。

  • reporters/script-plugin 展示了如何在预编译的脚本插件中使用 Problems API。

发出问题

可以通过注入的Problems服务发出问题。以下是如何从插件报告问题的示例。

reporters/standard-plugin/src/main/java/reporters/StandardPlugin.java
problems.forNamespace("reporters.standard.plugin").reporting(problem -> problem
        .label("The 'standard-plugin' is deprecated")
        .documentedAt("https://github.com/gradle/gradle/README.md")
        .category("deprecation", "plugin")
        .severity(Severity.WARNING)
        .solution("Please use a more recent plugin version")
);

接收问题报告

问题以工具 API 进度事件的形式发出。可以通过注册ProgressListener来处理它们。

sample-ide/src/main/java/org/gradle/sample/SampleIde.java
@Override
public void statusChanged(ProgressEvent progressEvent) {
    prettyPrint(((ProblemDescriptor) progressEvent.getDescriptor()));
}