【问题标题】:Error in SonarQube when launching svn blame启动 svn blame 时 SonarQube 出错
【发布时间】:2015-04-28 17:33:31
【问题描述】:

我最近将我的 SonarQube 服务器从 4.5.2 升级到 5.0.1,然后升级到 5.1(请参阅下面的编辑)。

突然,一个多模块 Maven 项目的分析失败,出现以下错误:

[INFO] [12:02:05.045] Sensor SCM Sensor...
[INFO] [12:02:05.169] SCM provider for this project is: svn
[INFO] [12:02:05.169] Retrieve SCM blame information...
[INFO] [12:02:05.185] 650 files to be analyzed
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] myproject ......................................... FAILURE [3:21.165s]
[INFO] module1 ........................................... SKIPPED
[INFO] module2 ........................................... SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2:42.429s
[INFO] Finished at: Thu Feb 26 11:30:01 CET 2015
[INFO] Final Memory: 73M/2020M
[DEBUG] [11:30:01.789] Executing: svn blame --xml --non-interactive -x -w src/main/java/MyClass.java
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) on project myproject: java.io.IOException: Cannot run progra
m "svn" (in directory "C:\somedirectory\module1"): CreateProcess error=2, The system cannot find the file specified
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
        at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
        at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
        at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
        at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
        at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
        at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
        at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: java.io.IOException: Cannot run program "svn" (in directory "C:\somedirectory\module1"): CreateProcess error=2, The system cannot find the file specified
        at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionHandling.java:41)
        at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBootstraper.java:139)
        at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:138)
        at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
        at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
        ... 19 more

不知何故,命令svn 没有在目录C:\somedirectory\module1 中找到文件src/main/java/MyClass.java,尽管该文件肯定存在。如果我复制粘贴 SonarQube 尝试在目录svn blame --xml --non-interactive -x -w src/main/java/MyClass.java 内的命令提示符C:\somedirectory\module1 中执行的命令,那么该命令工作正常。

svn 命令在 PATH 上正确,可以在 SonarQube 服务器的“系统信息”页面上的“库路径”字段中看到。 SonarQube 服务器托管在执行 mvn sonar:sonar 的同一台服务器上(Windows Server 2008 R2)。

svn 正在由 SonarQube 启动以检索指责历史。据我了解,there were some changes made in SonarQube 5.0 concerning SCM support(更改为内置)。我现在的解决方法是禁用 SonarQube 中的 SCM 传感器(使用 -Dsonar.scm.disabled=true 或直接在 SonarQube 服务器中,在“设置 > 常规设置 > SCM”下)。

这与this question 无关,因为我只是在升级到 SonarQube 5.0.1 时才遇到这种行为。

使用的 JRE:1.7.0_51(64 位)

编辑:

升级到 SonarQube 5.1 后,错误仍然存​​在,但消息不同且更清晰。我已经重新安装了一个 SVN 客户端 (TortoiseSVN) 并重新启动了 Jenkins 和 SonarQube,但错误仍然存​​在:

SCM 提供程序设置为“svn”,但未找到此密钥的 SCM 提供程序。未安装 SCM 提供程序

[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) on project bombardier: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.5:sonar (default-cli) on project bombardier: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
    at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
    at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317)
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152)
    at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555)
    at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214)
    at org.apache.maven.cli.MavenCli.main(MavenCli.java:158)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
    at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
    at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
    at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoExecutionException: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed
    at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionHandling.java:41)
    at org.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBootstraper.java:139)
    at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:138)
    at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106)
    at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208)
    ... 19 more
Caused by: java.lang.IllegalArgumentException: SCM provider was set to "svn" but no SCM provider found for this key. No SCM provider installed
    at org.sonar.batch.scm.ScmConfiguration.setProviderIfSupported(ScmConfiguration.java:123)
    at org.sonar.batch.scm.ScmConfiguration.considerOldScmUrl(ScmConfiguration.java:133)
    at org.sonar.batch.scm.ScmConfiguration.start(ScmConfiguration.java:109)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.invokeMethod(ReflectionLifecycleStrategy.java:110)
    at org.picocontainer.lifecycle.ReflectionLifecycleStrategy.start(ReflectionLifecycleStrategy.java:89)
    at org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.start(AbstractInjectionFactory.java:84)
    at org.picocontainer.behaviors.AbstractBehavior.start(AbstractBehavior.java:169)
    at org.picocontainer.behaviors.Stored$RealComponentLifecycle.start(Stored.java:132)
    at org.picocontainer.behaviors.Stored.start(Stored.java:110)
    at org.picocontainer.DefaultPicoContainer.potentiallyStartAdapter(DefaultPicoContainer.java:1015)
    at org.picocontainer.DefaultPicoContainer.startAdapters(DefaultPicoContainer.java:1008)
    at org.picocontainer.DefaultPicoContainer.start(DefaultPicoContainer.java:766)
    at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:91)
    at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77)
    at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:57)
    at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:45)
    at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:135)
    at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92)
    at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77)
    at org.sonar.batch.bootstrap.GlobalContainer.executeTask(GlobalContainer.java:158)
    at org.sonar.batch.bootstrapper.Batch.executeTask(Batch.java:95)
    at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:67)
    at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:48)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87)
    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.codehaus.mojo.sonar.bootstrap.RunnerBootstraper.execute(RunnerBootstraper.java:135)
    ... 22 more

【问题讨论】:

  • 错误很复杂,你应该选择其中的一部分
  • @HamitYıldırım 我不同意,所有的堆栈跟踪都可能与调试问题有关。而且时间也不长。

标签: maven svn sonarqube sonarqube-5.0 sonarqube5.1


【解决方案1】:

请检查 SonarQube 进程是否具有与您用于测试的环境变量相同的环境变量。

【讨论】:

  • 在 SonarQube System Info 页面中,在 Library Path 下,我有(除其他外)"C:\Program Files\TortoiseSVN\bin" 并且 svn 可执行文件正确位于该文件夹下。
【解决方案2】:

使用以下命令将禁用 svn 相关问题

-Dsonar.scm.disabled=True

这将禁用 svn

【讨论】:

  • 我已经这样做了。我在 SonarQube 服务器上禁用了 SCM 传感器,没有它也可以工作。但我希望它与 SCM 传感器一起使用。
  • "mvn 声纳:声纳 -Dsonar.scm.disabled=True" 。为我工作。谢谢
【解决方案3】:

我刚刚在 Redhat Linux 机器上安装了 SonarQube 5.0.1,我遇到了完全相同的问题。

我没有禁用 scm stats 插件,而是安装了一个 svn 客户端 (svnkit.x86_64),并且在激活 SCM 的情况下成功执行了构建。 所以我猜在 Windows 上,你应该安装一个 svn 客户端并将其放在 PATH 上。

【讨论】:

  • 感谢您的回答,但我已经在 Windows 机器上安装了一个 SVN 客户端(它是 TortoiseSVN)。有了命令提示符,我就可以成功执行svn命令了。
  • 哦,我明白了,你有没有试过将tortoisesvn bin目录直接添加到Windows系统路径中?之后重新启动 Jenkins,以便更新新的环境变量。
  • 是的,这实际上是我添加它的地方。 SonarQube 和 Jenkins 服务器都已重新启动。
【解决方案4】:

我在安装 SonarQube 5.1 后遇到了同样的问题,请转到 更新中心:

http://your_domain:port/updatecenter/available

搜索“SVN”,点击“安装”

https://docs.sonarqube.org/display/PLUG/SVN+Plugin

会出现这样的东西:

SonarQube 需要重新启动才能安装以下内容 插件:sonar-scm-svn-plugin-1.0.jar

重新启动您的 SonarQube。

【讨论】:

  • 是的,成功了!我没有注意到有一个新的 SVN 插件。这应该在升级说明中明确提及。
  • 我可以确认 git 也是如此。我们将 Sonarqube 从 4.5 移到了新服务器上的 6.4。旧服务器安装了 git。通过添加 git-plugin link 我解决了这个问题。
【解决方案5】:

我遇到了这个问题,它是由于在运行声纳分析的构建机器上没有主动安装 SVN 造成的。声纳盒安装了什么并不重要。构建代理需要做 SVN 的责备。

我使用的是 CentOS。魔法是

sudo yum install svn

最后一个技巧是确保构建机器使用与我安装的版本相同的 SVN 版本进行检出。如果构建机器本身使用不同的版本,您可能必须确保它在下次检出之前清理整个工作区。

最后,不要忘记 Sonar 也需要您的 SVN 凭据!

【讨论】:

    【解决方案6】:

    这个问题可以通过两种方式解决,
    1.通过设置sonar.properties -Dsonar.scm.disabled=True,这仅对sonarrunner.bat声纳分析有效,
    2. 如果您使用任何其他类型分析,则使用 admin 默认 admin 登录为 admin/admin(username/password).http://yourDomin:port/settings/index(e.ghttp://localhost:9000/settings/index) 然后在类别中选择 scm 并将 scm 传感器设置为 true。
    3.否则你可以在以管理员身份登录(admin/admin)后将svn插件添加到声纳http://your_domain:port/updatecenter/available,搜索可用插件并选择svn并安装它..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-15
      • 1970-01-01
      • 1970-01-01
      • 2014-10-14
      • 2019-11-14
      • 1970-01-01
      • 2011-05-08
      • 2018-04-27
      相关资源
      最近更新 更多