SonarQube 5.1.2 не может распознать относительный путь для sonar.sources
Ниже моя структура каталогов для анализа SonarQube.
Я использовал SonarQube 5.0 с плагином C++ Community версии 0.9.4 и sonar-runner 2.4 с sonar.sources=../CheckoutDir1, упомянутым в файле sonar-project.properties. Это работало как шарм.
Затем я обновился до SonarQube 5.1.2, сохранив плагин C++ Community, sonar-runner и sonar-project.properties. Теперь сонар-бегун выходит из строя со следующей ошибкой:
14:18:17.531 INFO - Base dir: D:\CheckoutDir2
14:18:17.531 INFO - Working dir: D:\CheckoutDir2\.sonar
14:18:17.531 INFO - Source paths: ../CheckoutDir1
.
.
.
.
ERROR: Error during Sonar runner execution
org.sonar.runner.impl.RunnerException: Unable to execute Sonar
at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:91)
at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75)
at java.security.AccessController.doPrivileged(Native Method)
at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69)
at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50)
at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102)
at org.sonar.runner.api.Runner.execute(Runner.java:100)
at org.sonar.runner.Main.executeTask(Main.java:70)
at org.sonar.runner.Main.execute(Main.java:59)
at org.sonar.runner.Main.main(Main.java:53)
Caused by: java.lang.NullPointerException
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:98)
at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77)
at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94)
at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255)
at sun.nio.fs.AbstractPath.resolve(AbstractPath.java:53)
at org.sonar.api.batch.fs.internal.DefaultInputFile.path(DefaultInputFile.java:72)
at org.sonar.api.batch.fs.internal.DefaultInputFile.file(DefaultInputFile.java:64)
at org.sonar.api.batch.fs.internal.PathPattern$RelativePathPattern.match(PathPattern.java:101)
at org.sonar.batch.scan.filesystem.LanguageDetection.isCandidateForLanguage(LanguageDetection.java:124)
at org.sonar.batch.scan.filesystem.LanguageDetection.language(LanguageDetection.java:97)
at org.sonar.batch.scan.filesystem.InputFileBuilder.completeAndComputeMetadata(InputFileBuilder.java:100)
at org.sonar.batch.scan.filesystem.FileIndexer$1.call(FileIndexer.java:157)
at org.sonar.batch.scan.filesystem.FileIndexer$1.call(FileIndexer.java:154)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
Как ни странно, параметры отладки -X, -e, -Dsonar.verbose=true в sonar-runner не выявили никакой другой информации, кроме java.lang.NullPointerException.
Если я упомяну абсолютный путь для sonar.sources, анализ SonarQube работает нормально.
Подскажите пожалуйста, как решить эту проблему? Кроме того, SonarQube 5.1.2 должен четко печатать журналы отладки о невозможности найти sonar.sources по относительному пути.
1 ответ
Как я вижу в журнале, сонар рассматривает CheckoutDir2 в качестве базового каталога, что неверно,
вы должны установить sonar.projectBaseDir=<AbsolutePath>/ProjectName/CheckoutDir1
а потом sonar.sources=.
так что теперь, даже если файл sonar-project.properties не находится в том же каталоге, что и исходный код, он все равно будет работать так, как если бы он был.