6

我正在尝试从 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
4

4 回答 4

10

不要混淆。涉及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+ 时仍需要引导的“Codehaus Sonar Mojo”的兼容性org.codehaus.sonar:sonar-maven3-plugin,我们在旧位置添加了一个重定位 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 将下载 pomorg.codehaus.sonar:sonar-maven3-plugin:3.7并查看是否有重定位到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并使用完整日志完成您的问题。

于 2013-09-11T07:34:21.477 回答
1

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

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

于 2013-09-10T12:30:55.830 回答
1

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

http://repo1.maven.org/maven2/org/codehaus/sonar/sonar-maven3-plugin/3.7/sonar-maven3-plugin-3.7.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。

于 2013-09-10T11:25:58.363 回答
0

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

  • 您前段时间使用了声纳,所以您的 Maven 下载了所有插件
  • 后来他们重新定位了他们的一些插件,所以你下载的插件不能反映他们现在期望的结构(听起来很荒谬,与 maven 应该如何工作完全相反)

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

于 2016-04-02T21:15:00.713 回答