【问题标题】:Please provide compiled classes of your project with sonar.java.binaries请使用 sonar.java.binaries 提供项目的编译类
【发布时间】:2018-04-09 03:35:00
【问题描述】:

我正在为一个多模块项目的错误而苦苦挣扎,结构很简单,看起来像这样:

 root 
   module a
   module b
   module c
   pom.xml

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

我有这个错误:

未能执行目标 org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar (default-cli) 在项目 X 上:请提供你的编译类 具有 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>

【问题讨论】:

  • 添加你的 pom.xml
  • 请提供详细的结构和pom。
  • 你好,我加了我的root的pom.xml,挺简单的

标签: maven jenkins sonarqube


【解决方案1】:

在我的情况下适用于:

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

重写:

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

【讨论】:

    【解决方案2】:

    我遇到了同样的问题,但使用的是 BitBucket 管道,所以需要在 bitbucket-pipelines.yml 中设置变量

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

    【讨论】:

      【解决方案3】:

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

      你应该把 sonar.maven.plugin 放到编译代码的模块 pom 中。

      【讨论】:

        【解决方案4】:

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

        并且还在执行 SonarQube 扫描仪下的我的分析属性中添加了以下属性。

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

        【讨论】:

          【解决方案5】:

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

          Sonar 扫描您的二进制类。

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

              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  
              

              【讨论】:

              • 它对我有用...我只是更改了这个属性 sonar.java.binaries=./target/classes
              • 我们也可以指定完整路径 sonar.java.binaries=/var/lib/jenkins/workspace/$JOB_NAME/target/classes
              【解决方案8】:

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

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

              试试这个:

              mvn clean deploy sonar:sonar
              

              现在,如果您要反对您不想实际“部署”jar,直到/除非更改的代码通过质量门,那么...这需要不同的工作流程:

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

              最后两个步骤的细节将取决于您的 CI 基础架构。但是对于 Jenkins,第 2 步是 well documented

              【讨论】:

              • 通常mvn clean package 足以在之后执行sonar:sonar...并且安装并不是真正必要的..
              • 谢谢@khmarbaise。更新
              • 实际上,只有编译就可以了——在我的情况下,测试需要很长时间,所以它是最好的。如果您编辑 Maven 设置,则无需向 pom.xml 添加任何内容
              猜你喜欢
              • 2018-06-18
              • 2020-06-16
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多