Please provide compiled classes of your project with sonar.java.binaries

CommonPeople picture CommonPeople · Oct 27, 2017 · Viewed 85k times · Source

I am struggling with an error with a multi-modules project, the struture is simple, it looks like this :

 root 
   module a
   module b
   module c
   pom.xml

After using the maven command line : clean sonar:sonar deploy

I am this error :

Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.3.0.603:sonar (default-cli) on project X : Please provide compiled classes of your project with sonar.java.binaries property -> [Help 1]

EDIT : Here is the structure of my 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>

Answer

G. Ann - SonarSource Team picture G. Ann - SonarSource Team · Oct 27, 2017

You're running your Maven steps in the wrong order:

  • clean - delete all previous build output
  • sonar:sonar - run analysis (which requires build output)
  • deploy - build &etc...

Try this instead:

mvn clean deploy sonar:sonar

Now if you're about to object that you don't want to actually "deploy" the jar until/unless the changed code passes the Quality Gate, well... that requires a different workflow:

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

The particulars of those last two steps will depend on your CI infrastructure. But for Jenkins, step #2 is well documented