Не может быть проиндексирован дважды - testSourceDirectory и sourceDirectory одинаковы

Я создал тест производительности как подмодуль maven для моего основного модуля. Все тестовые классы написаны в разделе src/ main/java, а не src/ test/java

Я могу упаковать проект как jar и запустить его для тестирования производительности моего проекта.

Я хотел выполнить mvn test. Для работы mvn test у меня должно быть значение <testSourceDirectory>. Как и в этом случае, у меня есть код в src/main/java, который я установил для этого:

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

Теперь mvn test работает.

Но проблема в том, что сборка сонара не с ошибкой: can't be indexed twice. Что очевидно, поскольку мои pom testSourceDirectory и sourceDirectory одинаковы.

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

Как исправить эту проблему?

Ответ 1

Я столкнулся с той же проблемой. Наконец, решил это с помощью следующей документации: -

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

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

A: В случае ошибки ниже, вы должны подтвердить свое исключение/включение свойства. Пожалуйста, проверьте, что шаблоны включения/исключения производят несвязанные наборы для исходных и тестовых файлов

ОШИБКА: Причина: файл [...] не может быть проиндексирован дважды. Пожалуйста, проверьте это шаблоны включения/исключения создают непересекающиеся множества для основного и тестового Файлы Пример может выглядеть следующим образом:

sonar.sources=.
sonar.tests=.
sonar.test.inclusions=**/*Test*/**
sonar.exclusions=**/*Test*/**

Ответ 2

Это не стандартное использование Maven, но вы можете легко исправить анализ SonarQube с использованием исключений. sonar.exclusions = SRC/главная/Java/** или sonar.test.exclusions = SRC/Основной/Java/**

в зависимости от того, хотите ли вы, чтобы исходные файлы рассматривались как тесты или основные файлы.

Но правильным способом Maven было бы поставить ваши тесты в src/test/java и ackage ваши тесты: https://maven.apache.org/guides/mini/guide-attached-tests.html

Ответ 3

Если проект не соответствует структуре каталогов Maven по умолчанию, в pom проекта вы можете явно указать, где находится часть исходного кода и часть тестов:

<properties>
    <sonar.sources>src/main/foo</sonar.sources>
    <sonar.tests>src/test/bar</sonar.tests>
</properties>