【发布时间】:2016-10-16 14:58:40
【问题描述】:
我正在为 SonarQube 5.6 开发一个插件,但由于 InputFile 对象而无法创建 Issuable 对象。在传感器执行时,我可以看到所有通过调用索引(通过迭代)的文件
Iterator<InputFile> files = fileSystem.inputFiles(p.and(p.hasLanguage("java"), p.hasType(InputFile.Type.MAIN))).iterator();
但是当我尝试使用
访问特定文件(索引并显示在前面)时java.io.File file = new java.io.File(path);
// file.exists() returns true
InputFile inputFile = fileSystem.inputFile(fileSystem.predicates().is(file));
“输入文件”为空。即使我尝试编写路径,它也会使用此指令返回 null:
InputFile inputFile = fileSystem.inputFile(fileSystem.predicates().hasPath(file.getAbsolutePath()));
这是我得到的日志,真的很奇怪:
[INFO] File exists.
[INFO] That file AbsolutePath: C:\Program Files (x86)\Jenkins\workspace\soapui\soapui\src\main\java\com\eviware\soapui\impl\wsdl\support\wsdl\AbstractWsdlDefinitionLoader.java
[ERROR] File "C:\Program Files (x86)\Jenkins\workspace\soapui\soapui\src\main\java\com\eviware\soapui\impl\wsdl\support\wsdl\AbstractWsdlDefinitionLoader.java" is not indexed. Skip it.
烦人的事实是,这曾经可以工作,但不知何故现在不行,无需更改此方法(仅用于返回 InputFile 对象)。我承认问题可能出在请求的 FilePredicates 上。 任何帮助表示赞赏。提前致谢。
编辑: 忘了提一个奇怪的事实,在使用这个完全相同的指令显示所有索引文件之后,如果我再次尝试使用它(为了访问我正在使用的 InputFile寻找),返回的迭代器甚至不能前进一次:
Iterator<InputFile> files = fileSystem.inputFiles(p.and(p.hasLanguage("java"), p.hasType(InputFile.Type.MAIN))).iterator();
【问题讨论】:
-
能否提供sensorContext.filesystem().baseDir()的值?这可能是区分大小写的问题。内部文件由相对路径索引。因此,当您通过绝对路径查询时,我们正在使用 baseDir 重建完整路径。
-
baseDir() 的值是:C:\Program Files (x86)\Jenkins\workspace\soapui 对我来说,这确实是正确的目录。那么你是否建议我在创建 File 对象时给出的路径应该是相对于这个 baseDir 而不是绝对路径(就像我现在发送的那样)?
-
经过一番挖掘(以及两天的工作使我的头撞到键盘上),我意识到这个问题可能与 SonarQube (jira.sonarsource.com/browse/SONAR-6724) 的这个问题有关,因为我试图分析的项目包含一组子模块(而不是之前被正确分析的子模块)。这有意义吗?
标签: java sonarqube sonarqube-web