Как правильно настроить свойство sonar.java.binaries?

Мы используем SonarQube 5.1.2 с Ant runner 2.2 и Java pluging 3.12 для анализа. Я могу успешно анализировать свой проект. Я просто продолжаю получать эту ошибку:

Java bytecode has not been made available to the analyzer. The org.sonar.java.bytecode.visitor.DependenciesVisitor@d678716, org.sonar.java.checks.unused.UnusedPrivateMethodCheck@58e28efd, CycleBetweenPackages rule are disabled.

Поэтому мне нужно настроить свойства sonar.java.binaries и sonar.java.test.binaries (следуя http://docs.sonarqube.org/display/PLUG/Java+Plugin+and+Bytecode).

Что, я думаю, я сделал правильно:

<property name="project.dir" value="${basedir}/xalg.prj/h3_service_fo" />   
<property name="sonar.java.binaries" location="${project.build.dir}/classes/main" />
<property name="sonar.java.test.binaries" value="${project.build.dir}/classes/test" />

Которые разрешаются в следующие допустимые каталоги для вышеуказанных свойств:

basedir=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj
project.dir=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo
sonar.java.binaries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\xalg.prj\\h3_service_fo\\build\\classes\\main
sonar.java.test.binaries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/build/classes/test

Но я продолжаю получать:

Java bytecode has not been made available to the analyzer. The org.sonar.java.bytecode.visitor.DependenciesVisitor@d678716, org.sonar.java.checks.unused.UnusedPrivateMethodCheck@58e28efd, CycleBetweenPackages rule are disabled.

И хоть убей, я не могу понять, какие значения мне нужно присвоить свойствам sonar.java.binaries и sonar.java.test.binaries. Я даже пытался использовать sonar.binaries, что дало мне следующий результат:

Binary dirs: xalg.prj/h3_service_fo/build/classes

Чего я не получил, используя ни sonar.java.binaries, ни sonar.java.test.binaries. Я также получил:

JavaClasspath initialization...
sonar.binaries and sonar.libraries are deprecated since version 2.5 of sonar-java-plugin, please use sonar.java.binaries and sonar.java.libraries instead

Что и следовало ожидать от устаревшего свойства. Но, используя свойство sonar.java.binaries, я не получил строку «Двоичные каталоги» в своем журнале.

Использование sonar.java.binaries:

Language is forced to java
Load rules
Load rules (done) | time=761ms
Code colorizer, supported languages: cs,plsql
Initializers : 
Base dir: D:\appl\BuildAgent\work\H3\src.prj\java.prj
Working dir: D:\appl\BuildAgent\work\H3\src.prj\java.prj\.sonar
Source paths: xalg.prj/h3_service_fo/src/main/java
Test paths: xalg.prj/h3_service_fo/src/test/java
Source encoding: windows-1252, default locale: en_US
Index files

По сравнению с использованием sonar.binaries:

Language is forced to java
Load rules
Load rules (done) | time=736ms
Code colorizer, supported languages: cs,plsql
Initializers : 
Base dir: D:\appl\BuildAgent\work\H3\src.prj\java.prj
Working dir: D:\appl\BuildAgent\work\H3\src.prj\java.prj\.sonar
Source paths: xalg.prj/h3_service_fo/src/main/java
Test paths: xalg.prj/h3_service_fo/src/test/java
Binary dirs: xalg.prj/h3_service_fo/build/classes
Source encoding: windows-1252, default locale: en_US
Index files

Я также изучил исходный код SonarQube, SonarQube Java Plugin и SonarQube Scanner на наличие случаев, когда «байт-код Java не был доступен анализатору». или сонар.java.binaries. Я нашел много на sonar.java.binaries, но ничего на "Байт-код Java не был доступен для анализатора". Поэтому я понятия не имею, какие именно условия вызывают эту ошибку.

Я также пробовал следующие перестановки в sonar.java.binaries:

<property name="sonar.java.binaries" location="${project.build.dir}/classes" />
<property name="sonar.java.binaries" location="${project.build.dir}/classes/main/nl" />

Но и это ничего не дало.

Странно то, что Squid прекрасно разрешает путь к классам:

----- Classpath analyzed by Squid:
D:\appl\BuildAgent\work\H3\src.prj\java.prj\xalg.prj\h3_service_fo\build\classes\main

Итак, что мне не хватает? Что я делаю не так? Заранее спасибо.

Обновление 2016-09-08:
Удален весь журнал, сообщение стало слишком длинным.

Подмножество с (я думаю) соответствующими путями:

project.build.dir=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/build
project.dir=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo
project.src.dir=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/src

sonar.dir=D\:/appl/sonarqube-5.1.2
sonar.working.directory=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\.sonar
sonar.projectBaseDir=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj

sonar.jacoco.reportPath=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/build/jacoco/test.exec
sonar.junit.reportsPath=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/build/test-results

sonar.sources=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/src/main/java
sonar.java.binaries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\xalg.prj\\h3_service_fo\\build\\classes\\main

sonar.java.libraries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/_deploy/*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/_repos/lib/*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/_repos/provided/*.jar

sonar.tests=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/src/test/java
sonar.java.test.binaries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/xalg.prj/h3_service_fo/build/classes/test
sonar.java.test.libraries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/_deploy/*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/_repos/lib/*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj/_repos/provided/*.jar

Пути имеют точно такой же формат, как в моем посте. Может быть, бегун Sonar Ant не может определить путь как с обратной косой чертой, так и с косой чертой?

Обновление 2016-09-16:
Удален весь журнал, сообщение стало слишком длинным.

Подмножество с (я думаю) соответствующими путями:

project.build.dir=xalg.prj\\\\h3_service_fo\\\\build
project.dir=xalg.prj\\\\h3_service_fo
project.src.dir=xalg.prj\\\\h3_service_fo\\\\src

sonar.dir=D\:\\\\appl\\\\sonarqube-5.1.2
sonar.working.directory=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\.sonar
sonar.projectBaseDir=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj

sonar.jacoco.reportPath=xalg.prj\\\\h3_service_fo\\\\build\\\\jacoco/test.exec
sonar.junit.reportsPath=xalg.prj\\\\h3_service_fo\\\\build\\\\test-results

sonar.sources=xalg.prj\\\\h3_service_fo\\\\src\\\\main\\\\java
sonar.java.binaries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\xalg.prj\\h3_service_fo\\build\\classes\\main
sonar.java.libraries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\\\_deploy\\\\*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\\\_repos\\\\lib\\\\*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\\\_repos\\\\provided\\\\*.jar

sonar.tests=xalg.prj\\\\h3_service_fo\\\\src\\\\test\\\\java
sonar.java.test.binaries=xalg.prj\\\\h3_service_fo\\\\build\\\\classes\\\\test
sonar.java.test.libraries=D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\\\_deploy\\\\*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\\\_repos\\\\lib\\\\*.jar,D\:\\appl\\BuildAgent\\work\\H3\\src.prj\\java.prj\\\\_repos\\\\provided\\\\*.jar

Некоторые пути стали относительными, но я думаю, что это потому, что TeamCity изменили файл Ant на файл в SVN. Sonar.java.binaries является абсолютным и определенно указывает на правильный каталог.

Но я все еще получаю эту ошибку:

09:17:52.299 INFO  - Java Main Files AST scan done: 1579 ms
09:17:52.301 INFO  - 2/2 source files have been analyzed
09:17:52.305 WARN  - Java bytecode has not been made available to the analyzer. The org.sonar.java.bytecode.visitor.DependenciesVisitor@757a48f9, org.sonar.java.checks.unused.UnusedPrivateMethodCheck@1adf492b, CycleBetweenPackages rule are disabled.

Путь к классам по-прежнему интерпретируется просто отлично:

[sonar:sonar] 09:17:51.971 DEBUG - ----- Classpath analyzed by Squid:
[sonar:sonar] 09:17:51.972 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\xalg.prj\h3_service_fo\build\classes\main
[sonar:sonar] 09:17:51.973 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\batch.daemon.jar
[sonar:sonar] 09:17:51.974 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\buildinfo.jar
[sonar:sonar] 09:17:51.975 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h2_shared.jar
[sonar:sonar] 09:17:51.975 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_generator.jar
[sonar:sonar] 09:17:51.976 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_loadtest.jar
[sonar:sonar] 09:17:51.977 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_common.jar
[sonar:sonar] 09:17:51.977 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xalg.jar
[sonar:sonar] 09:17:51.978 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xalg_dao.jar
[sonar:sonar] 09:17:51.979 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xalg_mappers.jar
[sonar:sonar] 09:17:51.979 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xalg_procedures.jar
[sonar:sonar] 09:17:51.980 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xcare.jar
[sonar:sonar] 09:17:51.981 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xcare_dao.jar
[sonar:sonar] 09:17:51.982 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xcare_mappers.jar
[sonar:sonar] 09:17:51.982 DEBUG - D:\appl\BuildAgent\work\H3\src.prj\java.prj\_deploy\h3_model_xcare_procedures.jar

Может ли у бегуна Sonar Ant быть проблема с экранированными обратными косыми чертами?


person Mark    schedule 02.09.2016    source источник
comment
попробуйте добавить -DsonarRunner.dumpToFile=out.txt в командную строку и изучить пути   -  person G. Ann - SonarSource Team    schedule 06.09.2016
comment
Спасибо за ответ, но это дало мне неизвестную информацию. Я обновил свой пост новой информацией. Не могли бы вы посмотреть еще, пожалуйста?   -  person Mark    schedule 08.09.2016
comment
Я нахожу сочетание \\ и / в ваших разрешенных путях странным. Можете ли вы попробовать, чтобы все косые черты указывали в одном направлении?   -  person G. Ann - SonarSource Team    schedule 08.09.2016
comment
Сделал еще один анализ только с обратными косыми чертами, но все равно безрезультатно.   -  person Mark    schedule 16.09.2016
comment
Я пытался воспроизвести это, но я на Linux и не могу исключить это как фактор. Я бы попробовал: 1) удалить интерполяцию свойств из ваших путей (просто чтобы убедиться) 2) обновить. :-/   -  person G. Ann - SonarSource Team    schedule 23.09.2016
comment
Я не забыл об этой проблеме, она все еще в моем списке дел. У меня просто не было времени, чтобы как следует это сделать (полный бэклог спринта). Я прокомментирую, когда проведу анализ с полными путями. Обновление находится в журнале, я сомневаюсь, что смогу сделать это в ближайшее время. Я буду обновляться до 5.6.3 LTS.   -  person Mark    schedule 09.11.2016
comment
Я обновился до SonarQube 5.6.5 LTS. Вроде бы проблема ушла. Я больше не вижу ту же ошибку в журнале. Как я могу увидеть, действительно ли эта проблема ушла, т.е. какую функциональность я получил?   -  person Mark    schedule 27.01.2017
comment
Возможно, это связано с удаленными функциями DSM? blog.hello2morrow.com/2017 /01/   -  person Mark    schedule 30.01.2017


Ответы (4)


Это то, что я использую, и это работает.

sonar-scanner -Dsonar.projectKey=projectName
-Dsonar.gitlab.commit_sha=$CI_BUILD_REF
-Dsonar.gitlab.ref_name=$CI_BUILD_REF_NAME -Dsonar.sources=directory\src\
-Dsonar.java.binaries=.build\libs\

Вам нужно указать sonar.java.binaries на каталог, содержащий jar-файлы. Я бы не стал заморачиваться с подстановочными знаками и расширениями файлов, это не одно и то же. Вам нужен каталог в качестве аргумента, а не регулярное выражение для файлов.

Я не все знаю о сонарном сканере, но моя конфигурация работает.

Возьмите мой пример в контекст, я использую его в конвейере gitlab runner. Ваши двойные обратные косые черты должны быть в порядке, но вы всегда можете заменить ими прямые косые черты в своих файлах конфигурации.

person David Hunsicker    schedule 15.11.2017
comment
Я думаю, вы запутались в свойствах. Согласно документации, вы упомянули свойство sonar.java.libraries, а не sonar.java.binaries. docs.sonarqube.org/display/PLUG/Java+Plugin+and+ Байт-код - person Mark; 16.02.2018
comment
согласно документу --- sonar.java.binaries = разделенные запятыми пути к каталогам, содержащим скомпилированные файлы байт-кода, соответствующие вашим исходным файлам. И sonar.java.libraries = разделенные запятыми пути к файлам со сторонними библиотеками (файлы JAR или Zip), используемые в вашем проекте. Можно использовать подстановочные знаки: sonar.java.libraries=path/to/Library.jar,directory/**/*.jar -Dsonar.java.binaries=.build\libs\ ....так что здесь у нас должны быть библиотеки и не двоичные файлы - person Shashank Bodkhe; 17.06.2021

Вот несколько вариантов для мультипроекта Gradle. Я работаю в CI (Дженкинс), но принципы применяются.

Параметры:

  1. Вручную поддерживайте жестко закодированную запись sonar.java.binaries, например: sonar.java.binaries=subproject1/build/classes,subproject2/build/classes, (и т. д.)

  2. Установите его в каталог верхнего уровня проекта:

    sonar.java.binaries=.

  3. Используйте скрипт для создания собственного файла реквизита во время выполнения, например:

    cat > sonar-project.properties <<EOF
    sonar.projectKey=XXXX
    sonar.projectVersion=YYYY
    sonar.sources=$(find . -path '*/src/main' | xargs | tr ' ' ',')
    sonar.java.binaries=$(find . -path '*/build/classes/java' | xargs | tr ' ' ',')
    EOF
    

Обратите внимание, что вышеизложенное также относится к sonar.sources, и, вероятно, потребуется синхронизировать его с sonar.java.binaries. Кажется, что двоичные файлы являются надмножеством исходных кодов. Очевидно, что если значение ваших источников слишком широкое (например, включает тесты и т. д.), вы получите больше шума. Преимущество использования сценария заключается в том, что вы можете настроить эти эвристики по своему вкусу.

person Akom    schedule 04.09.2020
comment
Это очень полезно, спасибо, что поделились - person wukong; 09.07.2021

На основе документации по адресу https://docs.sonarqube.org/latest/analysis/languages/java/

Назначение пути sonar.java.binaries:

Разделенные запятыми пути к каталогам, содержащим скомпилированные файлы байт-кода, соответствующие вашим исходным файлам.

Для Gradle путь по умолчанию — build/classes, поэтому я бы установил:

sonar.java.binaries=build/classes
person elem103    schedule 17.08.2019

вы должны указать параметр sonar.java.libraries.

если вы используете maven, вы можете добавить их внутри pom.xml как свойство

<project>
    ...
    <properties>
        ...
        <sonar.java.libraries>target</sonar.java.libraries>

    </properties>

</project>   

или как параметр запуска -Dsonar.java.libraries=target

person Martin Frank    schedule 07.05.2019
comment
Я думаю, это были двоичные файлы, а не библиотеки, не так ли? :-) - person felix at housecat; 05.03.2020