web-dev-qa-db-fra.com

Comment configurer correctement la propriété "sonar.Java.binaries"?

Nous utilisons SonarQube 5.1.2 en utilisant Ant Runner 2.2 et Java Pluging 3.12 pour l’analyse. Je peux analyser avec succès mon projet. Je continue juste à avoir cette erreur:

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.

Je dois donc configurer mes propriétés sonar.Java.binaries et sonar.Java.test.binaries (après http://docs.sonarqube.org/display/PLUG/Java+Plugin+and+Bytecode ). 

Ce que je pense avoir fait correctement:

<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" />

Quelle solution aux répertoires valides suivants pour les propriétés ci-dessus:

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

Mais je continue à recevoir:

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.

Et pour la vie de moi, je ne peux pas comprendre quelles valeurs je dois donner aux propriétés sonar.Java.binaries et sonar.Java.test.binaries. J'ai même essayé d'utiliser sonar.binaries, ce qui m'a donné la sortie suivante:

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

Ce que je n'ai pas eu en utilisant ni sonar.Java.binaries ni sonar.Java.test.binaries. J'ai aussi eu:

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

Ce qui est à prévoir pour une propriété déconseillée. Mais en utilisant la propriété sonar.Java.binaries, je n’ai pas obtenu la ligne "Répertoire binaire" dans mon journal.

Utilisation de 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

Versus utilisant 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

J'ai également examiné le code source de SonarQube, SonarQube Java Plugin et le scanner SonarQube pour rechercher des occurrences de l'un ou l'autre "Le bytecode Java n'a pas été mis à la disposition de l'analyseur". ou sonar.Java.binaries. J'en ai trouvé beaucoup sur sonar.Java.binaries, mais rien sur "le bytecode Java n'a pas été mis à la disposition de l'analyseur". Donc, je n'ai aucune idée des conditions qui déclenchent exactement cette erreur.

J'ai aussi essayé les permutations suivantes sur 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" />

Mais cela n'a rien fait non plus.

Ce qui est étrange, c’est que Squid semble résoudre le chemin de classe très bien:

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

Alors, qu'est-ce qui me manque? Qu'est-ce que je fais mal? Merci d'avance.

Mise à jour 2016-09-08:
Suppression de la totalité du journal, la publication devient trop longue.

Un sous-ensemble avec les chemins (je pense) pertinents:

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

Les chemins ont exactement le même format que dans mon post. Se pourrait-il que le coureur de Sonar Ant ne puisse pas trouver un chemin avec des barres obliques inverses et des barres obliques?

Mise à jour du 16/09/2016:
Suppression de la totalité du journal, la publication devient trop longue.

Un sous-ensemble avec les chemins (je pense) pertinents:

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

Certains chemins sont devenus relatifs, mais je pense que cela est dû au fait que TeamCity a modifié le fichier Ant en fichier SVN . Le fichier sonar.Java.binaries est absolu et il certainement pointe vers le bon répertoire. 

Mais je reçois toujours cette erreur:

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.

Le classpath est toujours très bien interprété:

[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

Le coureur de Sonar Ant pourrait-il avoir un problème avec les barres obliques inversées?

9
Mark

C'est ce que j'utilise et ça marche.

  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\

Vous devez faire pointer sonar.Java.binaries vers un répertoire contenant des fichiers JAR. Je n'essaierais pas d'avoir des fantaisies avec des caractères génériques et des extensions de fichiers, ce n'est pas la même chose. Vous avez besoin d'un répertoire en tant qu'argument, et non d'une expression régulière pour les fichiers.

Je ne connais pas tout du scanner sonar, mais ma configuration fonctionne.

Prenons mon exemple dans son contexte, je l’utilise dans un pipeline de coureur Gitlab. Vos doubles barres obliques inversées devraient suffire, mais vous pouvez toujours les remplacer par des barres obliques dans vos fichiers de configuration.

2
David Hunsicker