java - SonarQube 目录缠结索引的问题

标签 java sonarqube

我们正在使用最新版本 (5) 的 SonarQube 来分析我们的项目。我对它如何计算目录缠结索引(以前称为包缠结索引)有一些疑问,我无法在其他地方找到答案。

  1. 为什么SonarQube需要访问类文件来计算缠结索引?该分析需要哪些未包含在 java 文件中的信息?

  2. 在指定上述类文件位置时,为什么我们必须提供这么深的路径?我想指定“project.sonar.java.binaries=/path/bin/”而不是“...=/path/bin/com/company/project/a/b/”。我也可以使用“...=/path/bin/**/*.class”或其他一些通配符。为此,我是否需要为项目中的每个包指定单独的类文件位置?我们遇到的问题是,我们正在尝试通过自动化流程生成 SonarQube 配置文件,而深入查找所有必要的路径是一个问题 - 当流程运行时,执行此操作所需的信息不可用。

  3. 为什么当我单击“Directory Tangle Index”链接时,我会看到一个页面,指出“该组件没有可用的 DSM 数据”?我在某处读到,对于复杂的项目,SonarQube 无法提供有关哪些目录困惑的信息。为什么不?或者问题是我们只为每个项目指定一个类文件路径,而不列出所有单独的子目录?

缠结索引听起来很有趣,但如果我无法深入了解哪些包显示缠结,那么它对改进我们的代码不会有太大帮助。

最佳答案

所以这个问题实际上包含三个问题:

  1. 这主要是历史原因造成的。 java 分析器中的语义分析是最近才出现的,在此之前,很难 100% 确定源中类中引用的类型(假设没有工具可以利用数据)。因此,解决方案是依靠对字节码的分析。

  2. sonar.java.binaries 需要指向包含 .class 文件的目录,但它应该位于根包中,因为假设包是属性中指定的目录之一的目录,则将完成查找类。 (因此,如果 sonar.java.binaries 被定义为指向 path/bin,对于类 com.mycompany.A 我们将查找 path/bin/com/mycompany/A.class文件)。

  3. 这需要更多信息才能提供详细帮助。 (就像你的陈述的来源一样)。

关于java - SonarQube 目录缠结索引的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29682297/

相关文章:

java - 动态构建资源包 'key'?

java - 我的 hibernate 枚举是否正常工作/稳定设置?

java - SONAR 提示 Make the enclosure method "static"or remove this set

ios - Sonar runner OS X

java - 降低java方法的圈复杂度

java - 正确的 JNDI @Resource(name)

java - 处理Java对象

java - Mockito 模拟方法返回 NULL

sonarqube - 如果我的项目包含扩展名为 .sah 的文件,SonarQube 可以分析它吗

sonarqube - 如何在 Sonar 扫描期间获取已修复问题的列表