请使用sonar.java.binaries

时间:2017-10-27 13:45:26

标签: maven jenkins sonarqube

我正在努力解决多模块项目的错误,结构很简单,看起来像这样:

 root 
   module a
   module b
   module c
   pom.xml

使用maven命令行后:clean sonar:sonar deploy

我是这个错误:

  

无法执行目标   org.sonarsource.scanner.maven:声纳Maven的插件:3.3.0.603:声纳   项目X上的(default-cli):请提供您的编译类   项目与sonar.java.binaries属性 - > [帮助1]

编辑:这是我的pom.xml

的结构
<?xml version="1.0" encoding="UTF-8"?>
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <groupId>groupeId</groupId>
    <artifactId>artifactId</artifactId>
    <version>version</version>
    <packaging>pom</packaging>
    <name>${project.artifactId}-parent</name>
    <description>description</description>
    <build>
        <plugins>
            <plugin>
                <groupId>org.sonarsource.scanner.maven</groupId>
                <artifactId>sonar-maven-plugin</artifactId>
                <version>3.3.0.603</version>
            </plugin>
        </plugins>
    </build>
    <modules>
        <module>module a</module>
        <module>module b</module>
        <module>module c</module>
    </modules>
</project>

8 个答案:

答案 0 :(得分:32)

您以错误的顺序运行Maven步骤:

  • clean - 删除所有以前的构建输出
  • sonar:sonar - 运行分析(需要构建输出)
  • deploy - build&amp; etc ...

请改为尝试:

mvn clean deploy sonar:sonar

现在,如果您反对提出您不想实际部署&#34;罐子直到/除非更改的代码通过质量门,那么......需要不同的工作流程:

mvn clean package sonar:sonar
// check quality gate status
// if (qualityGateOk) { deploy }

最后两个步骤的细节取决于您的CI基础设施。但对詹金斯来说,第二步是well documented

答案 1 :(得分:24)

我在调用独立SonarQube分析作为Jenkins作业预构建步骤时遇到了同样的错误,我修复了sonar.java.binaries=**/target/classes和其他SonarQube Analysis属性的添加,如下所示:

sonar.projectKey=TEST-PROJECT
sonar.projectName=TEST-PROJECT
sonar.projectVersion=1.0
sonar.sources=src/main/java/
sonar.language=java
sonar.java.binaries=**/target/classes  

答案 2 :(得分:0)

您可以通过使用maven工具传递sonar.java.binaries来解决此问题。

  

mvn sonar:sonar -Dsonar.host.url = http://localhost:9000   -Dsonar.login = faeef1e48b8d00290a0f3cc00021720baf1ca4dd -Dsonar.java.binaries = D:\ aiwb_s **

答案 3 :(得分:0)

对于Java,二进制文件位于目标文件夹中。这就是为什么您应该使用mvn clean install sonar:sonar来确保项目已编译并位于目标文件夹中的原因。

Sonar扫描您的二进制类。

答案 4 :(得分:0)

我遇到了问题。我做了以下步骤 从构建步骤添加了调用顶级Maven目标(这应该是第一个构建步骤) 添加了全新安装。

,并且还在Execute SonarQube扫描器下的“分析”属性中添加了以下属性。

sonar.projectVersion=1.0
sonar.sources=src/main/java
sonar.sourceEncoding=UTF-8
sonar.language=java
sonar.java.binaries=target/classes

答案 5 :(得分:0)

这是父pom,具有“ pom”包装。它不包含已编译的代码。

您应该将sonar.maven.plugin移至编译代码的模块poms中。

答案 6 :(得分:0)

我有同样的问题,但是使用BitBucket管道,因此需要在bitbucket-pipelines.yml中设置变量

  - mvn compile
  - pipe: sonarsource/sonarcloud-scan:1.1.0
    variables:
      EXTRA_ARGS: -Dsonar.java.binaries=\"target/classes\"

答案 7 :(得分:0)

就我而言适用于:

mvn clean install sonar:sonar -Dsonar.projectKey=groupId:artifactId -Dsonar.host.url=http://localhost:9000 -Dsonar.login=loginHASH -Dsonar.sources=src/main/java/ -Dsonar.java.binaries=target/classes