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

MavenJenkinsSonarqube

Maven Problem Overview


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 have 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>

Maven Solutions


Solution 1 - Maven

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

Solution 2 - Maven

I got the same error while invoking Standalone SonarQube Analysis as a Jenkins job pre-build step, which I fixed adding sonar.java.binaries=**/target/classes along with other SonarQube Analysis properties, as follows:

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  

Solution 3 - Maven

I had a seme problem. I did below steps Added Invoke top-level maven target from build steps (It should be the first build step) added clean install.

and also added below properties to my Analysis properties under Execute SonarQube scanner.

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

Solution 4 - Maven

For Java, the binaries are in the target folder. That's why you should use mvn clean install sonar:sonar to make sure your project is compiled and inside the target folder.

Sonar scans your binary classes.

Solution 5 - Maven

I had the same problem but with BitBucket pipelines, so need to setup variables in bitbucket-pipelines.yml

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

Solution 6 - Maven

In my case works with:

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

rewrite:

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

Solution 7 - Maven

You can fix that by passing sonar.java.binaries by maven tool.

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

Solution 8 - Maven

In my case, after a refactoring, a submodule was mistakenly changed to <packaging>pom</packaging> even though it contained Java sources and should be built as Jar.

Reverting that fixed the issue.

Solution 9 - Maven

This is a parent pom and has "pom" packaging. It doesn't contain compiled code.

You should put move the sonar.maven.plugin to the module poms that compile code.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionCommonPeopleView Question on Stackoverflow
Solution 1 - MavenG. Ann - SonarSource TeamView Answer on Stackoverflow
Solution 2 - MavenArpit AggarwalView Answer on Stackoverflow
Solution 3 - MavenRajitha BhanukaView Answer on Stackoverflow
Solution 4 - MavenGeneView Answer on Stackoverflow
Solution 5 - MavenGetoXView Answer on Stackoverflow
Solution 6 - MavenjoseluisbzView Answer on Stackoverflow
Solution 7 - MavenSANView Answer on Stackoverflow
Solution 8 - MavenDidier LView Answer on Stackoverflow
Solution 9 - MavenMartinus OuwehandView Answer on Stackoverflow