如何从代码中获取 PMD 结果报告作为 java 对象?

How can I get PMD result report as java object from code?

我正在写类似 PMD 包装器的东西(目标是使用 PMD 检查 java 代码,但具有某些功能),pmd-corepmd-java 包含在我的项目中像外部库,我正在以这种方式执行 PMD:

int violations = PMD.doPMD(configuration);

doPMD returns 发现的违规次数。通过在 PMDConfiguration 中配置 reportFormat,我们可以将输出设置为 System.out 或使用可用报告格式之一(如 xml、html、文本等)的文件.), 但是...

如何将 PMD 结果(所有源文件的处理结果)报告为 java 对象?也许,可以获得所有 RuleViolations 或其他东西的 list<>

您可以使用自定义 Renderer

  1. 创建 net.sourceforge.pmd.renderers.Renderer
  2. 的自定义实现
  3. 在您的 configuration 调用 setReportFormat 中传递自定义渲染器的完全限定名称(即:"my.organization.package.InMemoryRenderer"
  4. 运行分析,跟你一样

在分析过程中,您的渲染器将只实例化一次,并且将为每个文件的结果调用 renderFileReport(Report) 方法。 Report has method's to obtain and iterate over violations, config and execution errors.

如您所愿,这些是作为 POJO 提供的。

您将无权访问 Renderer 实例,但您可以将数据存储在静态成员中(确保将 thread-safety 保留为 PMD 运行 的多线程分析! ) 并提供静态 getter.