SonarQube 目录缠结索引的问题

Problems with the SonarQube Directory Tangle Index

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

  1. 为什么SonarQube需要访问class个文件来计算缠结指数? java 文件中未包含的分析需要哪些信息?

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

  3. 为什么,当我点击 "Directory Tangle Index" 的 link 时,我得到的页面是否显示 "No DSM data available for the component"?我在某处读到,对于复杂的项目,SonarQube 无法提供有关哪些目录混乱的信息。为什么不?或者是我们只为每个项目指定一个 class 文件路径,而不是列出所有单独的子目录?

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

所以这个问题实际上有三个问题:

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

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

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