【问题标题】:Can not execute SonarQube analysis from Jenkins无法从 Jenkins 执行 SonarQube 分析
【发布时间】:2013-09-13 23:12:02
【问题描述】:

我正在尝试从 Jenkins 配置 Sonarqube 分析(使用 Maven)。我安装了 Sonarqube 3.7。我配置了声纳 jenkins 插件,它运行良好。我有 Maven 3.0.3 并且正在使用声纳 Maven 插件 2.1。

问题是 - 它试图执行目标但要求 org.codehaus.sonar:sonar-maven3-plugin:jar:3.7。我在任何地方都找不到这个罐子。在存储库中,我只能看到这个的 pom 而不是 jar

Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.1:sonar (default-cli) on project twister: Can not execute SonarQube analysis
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:217)
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:319)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoExecutionException: Can not execute SonarQube analysis
at org.codehaus.mojo.sonar.Bootstraper.executeMojo(Bootstraper.java:109)
at org.codehaus.mojo.sonar.Bootstraper.start(Bootstraper.java:67)
at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:109)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
Caused by: org.apache.maven.plugin.PluginResolutionException: Plugin org.codehaus.sonar:sonar-maven3-plugin:3.7 or one of its dependencies could not be resolved: Failure to find org.codehaus.sonar:sonar-maven3-plugin:jar:3.7 in the local repository

【问题讨论】:

    标签: maven jenkins maven-3 sonarqube jenkins-plugins


    【解决方案1】:

    不确定我的诊断是否正确,但看起来像:

    • 您之前使用了声纳,所以您的 maven 下载了所有插件
    • 后来他们重新定位了一些插件,因此您下载的插件无法反映他们现在期望的结构(听起来很荒谬,与 maven 的工作方式完全相反)

    对我来说,它有助于使用声纳删除 ~/.m2/repository/org/codehouse/mojo/sonar-maven-plugin~/.m2/repository/org/codehouse/... 其他东西(我不记得确切)

    【讨论】:

      【解决方案2】:

      我查看了 sonar-maven3-plugin 的 pom 文件,看起来它已被重新定位到 sonar-maven-plugin

      http://repo1.maven.org/maven2/org/codehaus/sonar/sonar-maven3-plugin/3.7/sonar-maven3-plugin-3.7.pom

      pom 说

      Since Sonar 3.7 there is no more difference between Maven 2 and Maven 3 so relocate to Maven 2 plugin to avoid duplication 
      

      所以我猜你可以使用 sonar-maven-plugin 而不是 sonar-maven3-plugin。

      【讨论】:

      • 我该如何指定?我所做的只是在 jenkins 的 maven-plugin 版本中提及 2.1 版。我尝试查找它找到的 org.codehaus.mojo.sonar-maven-plugin.2.1,然后尝试执行目标,之后出现上述异常。
      • 不要混淆。没有 sonar-maven2-plugin,你不应该尝试使用除org.codehaus.mojo:sonar-maven-plugin 之外的其他插件。详情见我的回答。
      【解决方案3】:

      不要混淆。涉及 2 个不同的插件。

      第一个就是我们所说的“Codehaus Sonar Mojo”。这是您在执行mvn sonar:sonar 时调用的那个。 这个插件的 GAV 是:org.codehaus.mojo:sonar-maven-plugin 我们最近发布了 2.1 版本来支持 Maven 3.1。这个插件没有频繁发布,因为我们尽量避免与 SonarQube 版本的任何耦合。当您调用此插件时,它会简单地进行一些基本检查,向 SonarQube 服务器询问其版本,然后引导“SonarQube Maven 插件”。

      “SonarQube Maven 插件”是针对每个 SonarQube 服务器版本发布的插件。这个插件的 GAV 是:org.codehaus.sonar:sonar-maven[3]-plugin。过去我们需要 2 个不同的插件(一个用于 Maven 2,一个用于 Maven 3)。根据 Maven 版本引导正确的是“Codehaus Sonar Mojo”的工作。从 SonarQube 服务器 3.7 开始,只有一个插件:org.codehaus.sonar:sonar-maven-plugin。为了不破坏与在使用 Maven 3+ 时仍需要引导 org.codehaus.sonar:sonar-maven3-plugin 的“Codehaus Sonar Mojo”的兼容性,我们在旧位置添加了一个重定位 pom。

      总而言之,当您使用 Maven 3+ 和 SonarQube 服务器 3.7 开始 SonarQube 分析时,预期如下:

      1. mvn sonar:sonar
      2. Maven 将下载并使用最新的“Codehaus Sonar Mojo”,即org.codehaus.mojo:sonar-maven-plugin:2.1
      3. “Codehaus Sonar Mojo”将查询 SonarQube 服务器版本并引导 org.codehaus.sonar:sonar-maven3-plugin:3.7
      4. Maven 将下载 org.codehaus.sonar:sonar-maven3-plugin:3.7 的 pom 并看到有一个重定位到 org.codehaus.sonar:sonar-maven-plugin:3.7
      5. Maven 将下载并使用org.codehaus.sonar:sonar-maven-plugin:3.7

      介绍完之后,回到你的问题。消息显示“Codehaus Sonar Mojo”无法下载org.codehaus.sonar:sonar-maven3-plugin:3.7。首先,您应该尝试 Marc 的建议并尝试更新您的 Maven 版本,以防出现重定位支持的错误(我在 Maven 发行说明中没有看到任何相关内容)。然后您应该检查您的 Maven 配置(您是否使用了存储库管理器?)。

      最后,如果您仍有问题,请从干净的 Maven 存储库开始(备份/删除 ~/.m2/repository),然后运行 ​​mvn sonar:sonar -X 并使用完整日志完成您的问题。

      【讨论】:

      • 非常感谢.. 问题确实是 Maven 无法下载 org.codehaus.sonar:sonar-maven3-plugin:3.7。之后,它正确地重新定位到 org.codehaus.sonar:sonar-maven-plugin:3.7。现在可以正常使用了。
      • @Abby,你到底需要做什么才能让它工作?升级 Maven?
      • @Julien 我也有类似的问题;看起来 SonarQube 无法在第 2 步中下载插件。我收到“无法找到 org.codehaus.sonar:sonar-maven3-plugin:jar:5.2”。有关如何解决此问题的任何想法?
      【解决方案4】:

      我遇到了同样的问题。我使用的是mvn sonar:sonar,在从 Sonar 3.1 升级到 3.7 后失败并显示完全相同的错误消息。

      原来我使用的是旧版本的 Maven (3.0.1),我猜它没有正确处理插件的这种重定位。 升级Maven 3.0.5 为我解决了这个问题

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-30
        • 2016-12-14
        • 2015-01-03
        • 1970-01-01
        • 2016-01-27
        • 2016-01-28
        • 2015-07-01
        • 2022-08-08
        相关资源
        最近更新 更多