21

I have created performance test as a maven submodule to my main module. All the test classes are written under src/main/java and not src/test/java

I am able to package the project as jar and run it to performance test my project.

I wanted to execute mvn test. For mvn test to work I should have <testSourceDirectory> value set. As in this case I have my code in src/main/java I set this to :

<testSourceDirectory>src/main/java</testSourceDirectory>

Now mvn test works.

But the Problem is sonar build fails with error complaining: can't be indexed twice. Which is obvious as for my pom testSourceDirectory and sourceDirectory are same.

[ERROR] Failed to execute goal 
org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) 
   on project Blah: File [relative=XYZ.java, abs=/Path/XYZ.java] can't be indexed twice. 
Please check that inclusion/exclusion patterns produce 
disjoint sets for main and test files -> 

How to fix this issue?

benzonico
  • 10,635
  • 5
  • 42
  • 50
Amod Pandey
  • 1,336
  • 3
  • 14
  • 22

4 Answers4

24

I was facing the same problem. Finally, solved it with help of below documentation:-

https://github.com/SonarOpenCommunity/sonar-cxx/wiki/FAQ

Q: ERROR: Caused by: File [...] can't be indexed twice.

A: In case of below error you have to verify your exclusion/inclusion properties. Please check that inclusion/exclusion patterns produce disjoint sets for source and test files

ERROR: Caused by: File [...] can't be indexed twice. Please check that inclusion/exclusion patterns produce disjoint sets for main and test files An example could look like this:

sonar.sources=.
sonar.tests=.
sonar.test.inclusions=**/*Test*/**
sonar.exclusions=**/*Test*/**
dira
  • 30,304
  • 14
  • 54
  • 69
5

This is not a standard Maven usage but you can easily fix SonarQube analysis using exclusions. sonar.exclusions=src/main/java/** or sonar.test.exclusions=src/main/java/**

depending on whether you want your source files to be considered as tests or main files.

But the proper Maven way would be to put your tests in src/test/java and ackage your tests: https://maven.apache.org/guides/mini/guide-attached-tests.html

0

If project does not follow default Maven directory structure then in project's pom you can explicitly specify where is located the part of source code and the part of tests:

<properties>
    <sonar.sources>src/main/foo</sonar.sources>
    <sonar.tests>src/test/bar</sonar.tests>
</properties>
user07
  • 319
  • 2
  • 8
0

I was seeing this can't be indexed twice error when running sonarqube Gradle task on an Android project. The issue related to files stored in app/src/debug/assets.

I tried setting sonar.sources and sonar.tests properties to use disjointed sets but I wasn’t able to resolve the error.

To fix the error I changed:

property "sonar.coverage.exclusions", "**/assets/**, ..."

to:

property "sonar.exclusions", "**/assets/**, ..."

in order to ignore the /assets/ directory completely.

Lucy
  • 436
  • 5
  • 8