当前位置: 首页 > 面试题库 >

我可以使用不同的排除项在声纳中两次分析同一Maven项目吗?

凌照
2023-03-14
问题内容

我有一个由Sonar分析(在Jenkins中)的多模块Maven项目。这将创建一个Sonar项目,其中包含我的Maven项目的整个代码库的指标。Sonar项目的ID与我的Maven项目的ID相同。因此,如果我的Maven项目是
Foo (具有模块 M1M2M3 ),那么我会观察到一个Sonar项目 Foo 已创建,并且可以看到组件 M1
M2M3 的度量。

我想知道是否可以创建另一个对Maven项目的子集进行分析的Sonar项目。我可以使用Maven +
Cobertura做到这一点,方法是指定一个Maven配置文件,该配置文件定义要包含在Cobertura分析中(或从Cobertura分析中排除)的一组软件包。这使我能够生成一组Cobertura报告:一个用于整个项目,一个用于
XYZ 包;等等

因此,我现在要看的是创建一个名为 Bar 的Sonar项目,该项目是为Maven项目 Foo 计算指标的结果,并且将Sonar项目配置为仅包含包
XYZ (住在模块 M1M2 等中)。它将作为Jenkins的工作开始,签出Maven项目 Foo 并调用
声纳生成 后操作,以某种方式指定Sonar项目名称 Bar 而不是默认为 Foo 。然后(我希望)我将有两个Sonar项目: Foo
代表整个Maven项目,而 Bar 代表该Maven项目的子集。

我想知道(a)这是否可能,并且(b)可行吗?我不确定Sonar数据库是否会损坏(Sonar项目 FooBar中 会有模块 M1
M2M3 ,它们可能会相互覆盖数据库条目)。

更新1

也许sonar.branch在詹纳斯(Jenkins)中调用声纳时可以将属性用作后构建操作。

例如

詹金斯一号

  • SCM:签出Maven项目 Foo
  • 建立步骤: clean install -DskipTests
  • 建造后行动:声纳

詹金斯第二职业

  • SCM:签出Maven项目 Foo
  • 建立步骤: clean install -DskipTests
  • 建造后行动:声纳 -Dsonar.branch=Bar

如有必要,我可以为Sonar中的 Bar
分支设置包含项/排除项。这种方法的缺点是,声纳分析在两个不同的分支上进行了两次。一次运行声纳分析然后查询数据库以根据需要缩小焦点范围会更加有效。

更新2

我遇到了一个问题:尽管我可以在分支上运行声纳分析,但是原始(非分支)Maven项目的声纳分析失败了。声纳分析花费了3倍的时间,才能因MySQL错误而失败:

Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure.

The last packet successfully received from the server was 28,962,745 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.

但是,在其他Maven项目上运行声纳分析时,我没有看到任何MySQL错误。


问题答案:

您的编辑是正确的。使用该sonar.branch属性会创建一个不同的ID,即从Sonar的角度来看,这是一个不同的项目。

您可以将sonar.branch属性包括在“栏”配置文件中(当然,您需要在第二项工作中调用该配置文件),从而确保数据库不会损坏。

没错,您将需要两次分析项目,但是这样做更加简洁(以后您可以选择对条形图使用不同的规则)。

但是,您不一定需要创建两个作业,您可以将Sonar分析用作生成操作,而不是后期生成操作。

使用商用Views插件,无需构建两次就可以实现效果。



 类似资料:
  • 问题内容: 这是在使用 JENKINS 构建的 Maven 3 Java JS 项目中使用 Sonar 时发现的问题/问题。 为了分析我的项目,我选择了两种不同的方式,但是两种方式均不起作用。 第一种方法 :在JENKINS中将Sonar作为独立任务启动,作为构建后的动作 *从 *JENKINS 安装的 Sonar插件* v2.1 * *从 *JENKINS 安装的 Sonar Runner* v

  • 在使用SonarQube 4.5.4分析c#项目时,我遇到了以下错误。我已经安装了sonar-csharp-plugin-4.0。

  • 可能重复: JavaScript变量作用域 我有一个用于HTML选择选项的JavaScript函数: 我的问题是--我能在两个不同的for循环中两次声明“var day”吗?这个变量的作用域是什么?它是否合法,如果我在同一个函数中声明同一个变量两次,会发生什么?(内部代表循环还是外部代表循环)?例如,如果我用“var”再次声明其中一个变量,会发生什么? 如果我在for循环中的variable da

  • 本文向大家介绍我可以使用HTML5一次播放同一声音吗?,包括了我可以使用HTML5一次播放同一声音吗?的使用技巧和注意事项,需要的朋友参考一下 要同时播放声音多次,您需要克隆<audio>元素。这适用于谷歌浏览器- 该cloneNode是有用返回节点的副本,并在再次运行声音帮助。

  • 问题内容: 我有兴趣将GitHub上的项目用作我项目中的依赖项。GitHub项目有一个文件。我可以修改我的文件以使用该项目吗?如果是这样,怎么办?如果没有,我的最佳做法是什么? 问题答案: AFAIK,我的意思不是这样。 您可以将github用作Maven存储库-这与直接引用项目不同,它具有pom文件意味着仅是Maven项目。 如果 项目在中央存储库或其他存储库中不可用,则最好的选择是克隆,构建并