【问题标题】:Sonar: "Module is already part of project" or How to upload projects with same dependencies?声纳:“模块已经是项目的一部分”或如何上传具有相同依赖项的项目?
【发布时间】:2023-03-26 16:21:01
【问题描述】:

我有两个项目(A 和 B),它们使用相同的可重用模块 (C)。我将 A 上传到 sonarqube 没有问题,但是当我上传 B 时,sonar-maven-plugin 告诉我模块 C 已经是项目 A 的一部分。我该如何修复它?我希望将我的两个项目都上传到 sonarqube。

【问题讨论】:

标签: java maven sonarqube


【解决方案1】:

我也遇到了这个问题。如果您正在运行较新版本的 Maven,则可以排除模块。这对你来说可能是也可能不是一个足够的答案,但对我来说。

在项目 A 上运行 Sonar 时,请正常运行(无 --projects 开关)。 在项目 B 上运行 Sonar 时,提供排除列表(使用 --projects 开关)。

对于项目 A:

mvn sonar:sonar

然后

mvn sonar:sonar --projects !moduleC

这里简单提到这个方法:

http://docs.sonarqube.org/display/SONAR/Analyzing+with+Maven#AnalyzingwithMaven-ExcludingamodulefromSonarQubeanalysis

【讨论】:

  • 感谢您的回复!我认为问题可以通过三种不同的方式解决:
  • 1) 禁用检查声纳。 2) 从分析中排除模块。 3)复制粘贴和重命名模块。我们已经应用了第三种方式。但是您的方法(2)更好,因为(3)是最糟糕的。但无论如何,我认为最好的方法是(1)。我完全不明白这个检查是什么?例如,我有两个具有相同模块的项目,我想查看我的两个项目的所有内容分析。谁需要只分析项目的一部分?
  • 如何禁用检入声纳?
【解决方案2】:

我找到了另一种从分析中排除模块的方法。我们使用它,工作正常。很简单。

  1. 由于模块重复,无法自动创建新项目。所以手动创建它。以管理员身份登录 Web 界面。然后使用设置-> 配置 -> 创建。
  2. 打开创建的项目。然后配置 -> 设置 -> 排除 -> 文件 -> 模块排除。

【讨论】:

  • 是的,这个选项是存在的,但是如果你尝试提交两个同名的模块,即使从 UI 禁用模块,你也会在 Sonar 执行时失败。因此,如果您想排除不重复的模块,您提出的选项是有效的。
【解决方案3】:
  • 如果您是 Sonar 管理员,请转到 http:///background_tasks 并选择执行日志。您有以下错误:
2016.11.18 08:56:08 ERROR [o.s.s.c.t.CeWorkerCallableImpl] Failed to execute task XXXXXX
org.sonar.api.utils.MessageException: Validation of project failed:
  o Module "moduleA" is already part of project "org.company:proj2"
  • 所以你必须在你的项目 proj1 中编辑 MODULE pom.xml,并告诉 Sonar 这个模块将被命名为:
<properties>
    <sonar.moduleKey>org.company:proj2:moduleA-NEW</sonar.moduleKey>
</properties>

【讨论】:

  • 这个答案实际上可以解决大多数问题。除了 Somaiah Kumbera 的评论外,我们的问题是我们的密钥不是唯一的,因为组 ID 不正确,我们让它在分支上工作,但 :master 不会因为在其他地方使用全局 groupId 的松散项目。这里的正确答案应该是确保 groupId:artifactId 和 的组合是唯一的。从分析中排除模块不一定是正确的做法。
【解决方案4】:

声纳模块名称是从maven创建的

<maven groupId>:<maven artifactId>:<branch name>

在某些情况下,不同的应用程序可能具有相同的值。

在这种情况下,声纳会感到困惑,这是正确的。

在这种情况下的解决方案是使用Matias Burni的解决方案

<properties>
    <sonar.moduleKey>groupId:artifactId:some distinct identifier</sonar.moduleKey>
</properties>

但是,更正确的方法是为不同的应用程序使用不同的 groupId -artifactId 组合。

【讨论】:

  • 这是一种更优雅的解决方法,因为它不需要对代码进行任何更改。
  • 除此之外,它还允许您将同一模块的分析保留在 2 个项目中,这对于查看整体质量很有用。
猜你喜欢
  • 1970-01-01
  • 2017-05-09
  • 2018-06-14
  • 2018-11-15
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 2013-03-21
  • 2020-09-12
相关资源
最近更新 更多