Antランナー2.2とJava 3.12をプラグインして分析するSonarQube 5.1.2を使用しています。プロジェクトを正常に分析できます。このエラーが引き続き発生します。
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プロパティを使用して、ログに「Binary dirs」行を取得しませんでした。
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バイトコードを使用できません。」またはsonar.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は絶対であり、definitelyは正しいディレクトリを指します。
しかし、私はまだこのエラーを受け取ります:
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ランナーは、エスケープされたバックスラッシュに問題がありますか?
これは私が使用するものであり、機能します。
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ランナーパイプラインで使用します。二重のバックスラッシュは問題ありませんが、設定ファイルのスラッシュの代わりにいつでも使用できます。
https://docs.sonarqube.org/latest/analysis/languages/Java/ のドキュメントに基づく
sonar.Java.binaries
パスの目的は次のとおりです。
ソースファイルに対応するコンパイル済みバイトコードファイルを含むディレクトリへのコンマ区切りパス。
Gradleの場合、デフォルトパスはbuild/classes
にあるため、次のように設定します。
sonar.Java.binaries=build/classes
パラメーターsonar.Java.libraries
を提供する必要があります。
maven を使用する場合、プロパティとしてpom.xml
内にこれらを追加できます
<project>
...
<properties>
...
<sonar.Java.libraries>target</sonar.Java.libraries>
</properties>
</project>
または、実行パラメーター-Dsonar.Java.libraries=target
として