4

我们的项目是一个使用 maven 构建的多模块插件项目。声纳分析运行良好,但在此过程中会产生大量警告,并且可能会产生不正确的结果。下面是项目的设置和分析过程中产生的警告。非常感谢修复这些警告的任何帮助。

项目设置:

  1. 通过 jenkins 构建的声纳分析。
  2. Jenkins Sonar 插件用于运行分析。
  3. Jenkins 和 Sonar 以及 MySQL 在不同的机器上运行。

在声纳分析期间,为 Jenkins 中的声纳插件提供以下属性。

    -Dsonar.profile="我的项目资料"
    -Dsonar.dynamicAnalysis=reuseReports
    -Dsonar.core.codeCoveragePlugin=jacoco
    -Dsonar.jacoco.reportPath=../../releng/com.mycompany.myproject.releng.builds/coverage_data/jacoco.exec

以下是分析过程中产生的警告:

注意:如果 Sonar 和 Jenkins 在同一台机器上运行,则不会生成以下警告

  1. 在对单个模块进行声纳分析之前,会引发以下错误。
    [警告] 在构建的此时无法解决以下依赖项,但似乎是反应器的一部分:
    15:04:52 [警告] o com.mycompany.myproject.plugins:com.mycompany.myproject.external.libraries:jar:1.0.0-SNAPSHOT(提供)
    15:04:52 [警告]尝试将构建运行到生命周期阶段“包”
    15:04:52 [警告] 在构建的此时无法解决以下依赖项,但似乎是反应器的一部分:
    15:04:52 [警告] o com.mycompany.myproject.plugins:com.mycompany.myproject.somefunctionality.framework:jar:1.0.0-SNAPSHOT(提供)

 
  1. 在分析模块期间,它会抛出以下警告
    类 'com/mycompany/myproject/core/common/datatransfers/MyClass' 不能通过 ClassLoader 访问。
    [警告] [15:05:25.731] 类 'com/mycompany/myproject/core/common/datatransfers/MyClass' 无法通过 ClassLoader 访问。

  1. 几乎所有模块在构建完成后分析后都标记为已跳过,但分析结果在 Sonar 中可用。
    [信息] com.mycompany.myproject.platform.feature ...... 跳过
    [信息] com.mycompany.myproject.somefeature.feature ...跳过
    [信息] 我的产品 ................... 已跳过
    [信息] --------------------------------------------- -------------------------
    [信息] 构建成功

4

2 回答 2

1

我知道这是一个迟到的回复,但我遇到了同样的问题,结果证明我运行mvn clean package的是mvn clean install. 我在 SonarQube 邮件列表上找到了这个帖子,希望对您有所帮助。

于 2013-09-26T14:31:07.203 回答
1

此警告可能仅仅是由于插件中的竞争条件,例如maven-jar-plugin(我在另一个与 Maven 3.6.3 无关的 Sonar 案例中也有相同的警告)。

让我们考虑以下项目布局:

  • acme-parent所有项目的父级
  • acme-aggregator
  • acme-common
  • acme-p1取决于acme-common
  • acme-p2取决于acme-common
  • acme-p3取决于acme-common
  • acme-p4取决于acme-p2acme-p3

Maven 将按以下顺序构建:

  • acme-parent
  • acme-common
  • acme-p1, acme-p2,acme-p3acme-p4

然而,对于内部机制,则是另外一回事了:

  • acme-p2并且acme-p3不在本地存储库中
  • 都在反应堆里
  • 在调用 中的插件期间acme-p1,maven 将验证在反应器中找到的工件,并尝试解析本地工件的路径但失败(因此发出警告)。

如果你移动acme-p4before acme-p1,这会改变构建顺序:警告消失(注意:依赖项需要从本地存储库中删除)因为 now ,acme-p2并且acme-p3有效地构建 before acme-p1

Maven 将按以下顺序构建:

  • acme-parent
  • acme-common
  • acme-p2, acme-p3,acme-p4acme-p1

有一些修复:

  • 添加从 acme-p4 到 acme-p1 的依赖项:这将以额外小心为代价强制构建顺序(在我的实际用例中,acme-p4acme-p2acme-p3using maven-assembly-plugin)。
  • Reorder project in reactor:我没有使用-T选项进行测试,允许并发构建,但我认为它也可能失败。
  • 进行package构建:警告中提到了它,但我怀疑 Maven 在某些情况下会引用本地存储库或远程存储库中的工件(如果您SNAPSHOT在它们上部署)。这可能很棘手:如果有人更改方法的签名,那么 Maven 可能会下载 SNAPSHOT(它较新,并且不在反应堆中,因此它比本地 repo 更好)并且构建可能会失败(这是纯粹是我的假设)。

这也可能是 Maven 中如何在反应器中排序模块的错误。

于 2020-04-23T17:11:16.320 回答