当前位置: 首页 > 知识库问答 >
问题:

声纳maven插件:相同的项目密钥为所有模块不工作?

左丘峰
2023-03-14

我使用声纳-maven-插件3.2和maven 3.3.9。在父POM中,我定义了sonar.projectKey maven属性。这个值是有效的,我可以从声纳的打印输出中看到它。但是mvn sonar: sonar步骤失败,因为maven模块使用相同的项目键值,因为maven属性在所有模块中具有相同的值。声纳给出了错误:

项目“…”不能有具有以下键的2个模块:。。。

真的没有办法让一个声纳项目包含所有maven模块吗?所有模块都必须是真正不同的声纳项目吗?

我知道我可以将分支属性用作黑客,但我希望避免这样做。如果有一种方法可以在sonar中使用一个包含所有maven模块的单一项目密钥来创建一个maven多模块项目,那将是最好的。。。

共有3个答案

公冶弘壮
2023-03-14

必须有一种唯一标识每个组件的方法。正如Steve C所说,不能有两个项目具有相同的项目密钥。在项目中,模块还必须具有唯一标识符。否则,对第二个“模块b”的分析将覆盖第一个“模块b”。

郎建章
2023-03-14

根据SonarQube分析参数:

声纳。项目密钥

每个项目唯一的项目密钥。允许的字符有:字母、数字、'-'、''、'.'和“:”,至少有一个非数字
使用Maven时,它会自动设置为

因此,删除您的sonar.projectKey配置,它应该可以工作。

(我也经历过同样的循环)。

通俊发
2023-03-14

模块已在最近的版本中删除。我还无法验证以下基于模块的解决方案是否适用于Sonarqube8。x、 但假设必须使用不同的解决方案。当我联系SonarQube支持部门时,他们建议管理项目密钥前缀的权限,并使用前缀范围的项目创建权限动态创建共享该前缀的项目密钥。

在本例中,您的pom。xml将如下所示:

<properties>
    <sonar.projectKey>
        YourKey-${project.groupId}:${project.artifactId}
    </sonar.projectKey>
</properties>

其中YourKey是project前缀。这需要SonarQube管理员应用建议的权限方案。

7.6之前的SonarQube是/是模块感知的。在父级中定义模块。pom,您可以声明以下属性:

<properties>
    <sonar.projectKey>
        YourKey
    </sonar.projectKey>
    <sonar.moduleKey>
        ${project.groupId}:${project.artifactId}
    </sonar.moduleKey>
</properties>

这两个属性都将由模块继承。然后,这将把结果编译成一个声纳报告,跟踪公共project ectKey下的子模块。有趣的是结果是:

[INFO] Reactor Summary:
[INFO] 
[INFO] parent ................................. SUCCESS [01:14 min]
[INFO] module1................................. SKIPPED
[INFO] module2 ................................ SKIPPED
[INFO] module3 ................................ SKIPPED

因此,我不确定确切的模块分辨率是如何完成的,但最终所有模块都出现在报告中。

 类似资料:
  • 我有一个基于java和kotlin的多模块gradle项目。我正在尝试设置声纳分析。我在根项目中配置了sonar,并用CircleCI进行了分析。sonarcloud中的结果仅适用于其中一个子项目。 我的项目结构如下: 项目A/构建。格拉德尔 项目B/构建。格拉德尔 ProjectC/build。格拉德尔 建造。格拉德尔 这是我的根构建。格雷德尔。

  • parent-child1-pom.xml-child2-pom.xml-child3-pom.xml-pom.xml 我在父pom.xml中包含了JaCoCo插件。当我从父级pom.xml运行mvn clean install sonar:sonar build时,我看到每个子级都生成自己的jacoco.exec文件。类似于child1/target/jacoco.exec,child2/tar

  • 我有一个父pom和两个子pom,用于jar和war文件。war文件将jar文件作为pom中的依赖项。因此,构建顺序定义如下 家长 儿童罐 儿童战争 在父pom中,模块如下所示。 要部署到Jboss的最后一个工件位于父/工作区/子war/目标/项目文件夹下。战争 当我从父工作区文件夹调用maven目标时,部署失败。 mvn清理编译安装jboss为:deploy-Dmaven。测验跳过=真 我尝试在父

  • 问题内容: 我们有一个与我们一起工作的人,他使用maven-assembly- plugin打包所有依赖项。从那以后他就离开了公司,我正在努力弄清楚他是如何做到的。我现在正在学习有关maven-assembly-plugin的信息。 我们的应用程序分为与相关模块项目一起的Maven POM项目。在下面的示例中,我包含了运行时模块项目。我试图在我的应用程序中创建一个名为运行时的模块项目,但是一旦进行

  • 问题内容: 我想与Jenkins一起针对Maven 2项目启动SonarQube分析。我首先在构建配置中使用了目标。 但是我刚刚找到了Jenkins的SonarQube插件。为什么要使用它?这是更好的做法,为什么? 问题答案: 您当然可以做一个简单的,这将起作用。 另一方面,还有用于Jenkins的SonarQube插件,它将使配置更加容易。例如,您将能够在一个位置(Jenkins的配置部分)定义

  • 我想在eclipse下处理同一个多模块maven项目的两个不同版本。 不幸的是,当您在eclipse下导入多模块maven项目时,您可以自己更改父模块项目名称以防止冲突,但不能更改子模块项目名称。子模块作为根项目导入,以模块名称命名。显然在导入过程中无法重命名它们。 在理想情况下,我希望保持pom不变。显然,我希望保持相同的eclipse工作区。。。