sonar maven 插件构建错误,SonarQube 版本:null
sonar maven plugin build error, SonarQube version: null
我的 jenkins 构建刚开始失败并显示此消息:
[INFO] --- sonar-maven-plugin:2.7:sonar (default-cli) @ cividas-core-web ---
[INFO] artifact com.ontimize:ontimize-core: checking for updates from central
[INFO] artifact com.ontimize:ontimize-core: checking for updates from imatia-local
[INFO] artifact com.ontimize:ontimize-core: checking for updates from snapshots
[INFO] User cache: /var/lib/jenkins/.sonar/cache
[INFO] SonarQube version: null
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.773s
[INFO] Finished at: Thu Oct 22 19:49:04 CEST 2015
[INFO] Final Memory: 13M/193M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar (default-cli) on project cividas-core-web: null: MojoExecutionException: NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar (default-cli) on project cividas-core-web: null
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
at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionHandling.java:41)
at org.codehaus.mojo.sonar.bootstrap.RunnerBootstrapper.execute(RunnerBootstrapper.java:107)
at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:141)
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.NullPointerException
at org.apache.maven.artifact.versioning.ComparableVersion.parseVersion(ComparableVersion.java:354)
at org.apache.maven.artifact.versioning.ComparableVersion.<init>(ComparableVersion.java:345)
at org.apache.maven.artifact.versioning.DefaultArtifactVersion.parseVersion(DefaultArtifactVersion.java:110)
at org.apache.maven.artifact.versioning.DefaultArtifactVersion.<init>(DefaultArtifactVersion.java:46)
at org.codehaus.mojo.sonar.bootstrap.RunnerBootstrapper.isVersionPriorTo5Dot2(RunnerBootstrapper.java:192)
at org.codehaus.mojo.sonar.bootstrap.RunnerBootstrapper.execute(RunnerBootstrapper.java:84)
... 22 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Sonar analysis completed: FAILURE
这是怎么回事?
通过将此代码添加到我的 pom.xml
的插件部分,将自动选择的最新 (2.7) 版本降级到旧版本 (2.4) 来解决
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.4</version>
</plugin>
这是一个提示:
[INFO] SonarQube version: null
稍后在代码中,Maven 尝试解析此版本号但失败了。源代码在这里:https://github.com/mojohaus/sonar-maven-plugin/blob/master/src/main/java/org/codehaus/mojo/sonar/bootstrap/RunnerBootstrapper.java
从 source of the SonarQube runner 开始,这是由属性实例支持的。因此,代码可能无法访问服务器,或者服务器没有发回此数据。不好说。
我能看到的是代码在 2.5 中发生了变化。这可能就是 2.4 仍然有效的原因。在这里查看如何确定版本:
我们今天在工作中遇到了同样的问题,我们自动使用最新版本的 maven 和 sonar 插件。一开始发现问题并不容易。
elcodedocle 给出的答案是正确的,但我想为那些以自动化方式使用 maven 和声纳的人补充一点,这也是一个解决方案:
org.codehaus.mojo:sonar-maven-plugin:2.6:sonar
这样它可以在旧版本 2.6 上运行,我可以确认它可以工作。
2.7 中可能存在错误,我希望它能尽快修复。这是我们的错误:
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven plugin:2.7:sonar (default-cli) on project (projectName): Unable to determine structure of project. Probably you use Maven Advanced Reactor Options with a broken tree of modules. "(projectName)" is orphan -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
编辑:
查看此 post 以获取更多信息:
这里说明插件新版本2.7不再兼容java6个项目。如果您不熟悉它,您还可以在 Jenkins 中找到有关如何修复它的说明。 (我的解释有点短)
对于那些对 "why?" 感兴趣的人,我做了更多的挖掘,似乎正在发生的事情是这样的:
RunnerBootstrapper 尝试检查版本是否为 5.2+:
首先serverVersion是retrieved from a launcher created in EmbeddedRunner,
使用IsolatedLauncher creating a proxy of implementation class BatchIsolatedLauncher
其中 attempts to read a resource file sq-version.txt
包含版本。
此 sq-version.txt
文件位于 org.codehaus.sonar:sonar-plugin-api, but this dependency is not included (even transitively) in the sonar-maven-plugin. All it references sonar-wise is org.sonarsource.sonar-runner:sonar-runner-api。
他们似乎 have changed the location and name of the version txt file 但没有更新所有代码。您可能会手动添加内容为 5.2
(无换行符)的 sq-version.txt
到插件类路径(可能通过更新插件 jar),或者添加对 sonar-plugin-[=53= 的依赖],但这些都是技巧。
sonar-maven-plugin 2.6 使用sonar-runner 2.4,与sonar-maven-plugin 2.7 使用的2.5 有很大不同(sonar-runner 的groupId 改变了域 从 org.codehaus.sonar.runner
到 org.sonarsource.sonar-runner
),所以最好坚持使用 v2.6 插件,直到他们平稳过渡并发布更多版本。
SonarQube 服务器版本传递给 maven-sonar-plugin
的方式在 v2.7 中发生了变化,连同其他内容,因为它现在使用 sonar-runner 2.5
。
在<4.3的SonarQube实例中使用它确实存在一个错误,为此我开了工单:https://jira.sonarsource.com/browse/MSONAR-131
请注意,不再主动支持 SQs < 4.5(当前 LTS),并且不能保证 sonar-maven-plugin
不会由于公开的新界面而以其他方式与它们不兼容通过 sonar-runner 2.5
。
对于这些情况,最好将 Maven 插件版本锁定为 2.6,正如已经建议的那样。
发现适合您的插件版本运行声纳安装。
例如
mvn org.codehaus.mojo:sonar-maven-plugin:2.6:sonar
此插件版本不适用于最新的声纳版本,但适用于 4.1.2。
我的 jenkins 构建刚开始失败并显示此消息:
[INFO] --- sonar-maven-plugin:2.7:sonar (default-cli) @ cividas-core-web ---
[INFO] artifact com.ontimize:ontimize-core: checking for updates from central
[INFO] artifact com.ontimize:ontimize-core: checking for updates from imatia-local
[INFO] artifact com.ontimize:ontimize-core: checking for updates from snapshots
[INFO] User cache: /var/lib/jenkins/.sonar/cache
[INFO] SonarQube version: null
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.773s
[INFO] Finished at: Thu Oct 22 19:49:04 CEST 2015
[INFO] Final Memory: 13M/193M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar (default-cli) on project cividas-core-web: null: MojoExecutionException: NullPointerException -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.7:sonar (default-cli) on project cividas-core-web: null
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
at org.codehaus.mojo.sonar.bootstrap.ExceptionHandling.handle(ExceptionHandling.java:41)
at org.codehaus.mojo.sonar.bootstrap.RunnerBootstrapper.execute(RunnerBootstrapper.java:107)
at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:141)
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.NullPointerException
at org.apache.maven.artifact.versioning.ComparableVersion.parseVersion(ComparableVersion.java:354)
at org.apache.maven.artifact.versioning.ComparableVersion.<init>(ComparableVersion.java:345)
at org.apache.maven.artifact.versioning.DefaultArtifactVersion.parseVersion(DefaultArtifactVersion.java:110)
at org.apache.maven.artifact.versioning.DefaultArtifactVersion.<init>(DefaultArtifactVersion.java:46)
at org.codehaus.mojo.sonar.bootstrap.RunnerBootstrapper.isVersionPriorTo5Dot2(RunnerBootstrapper.java:192)
at org.codehaus.mojo.sonar.bootstrap.RunnerBootstrapper.execute(RunnerBootstrapper.java:84)
... 22 more
[ERROR]
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
Sonar analysis completed: FAILURE
这是怎么回事?
通过将此代码添加到我的 pom.xml
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>sonar-maven-plugin</artifactId>
<version>2.4</version>
</plugin>
这是一个提示:
[INFO] SonarQube version: null
稍后在代码中,Maven 尝试解析此版本号但失败了。源代码在这里:https://github.com/mojohaus/sonar-maven-plugin/blob/master/src/main/java/org/codehaus/mojo/sonar/bootstrap/RunnerBootstrapper.java
从 source of the SonarQube runner 开始,这是由属性实例支持的。因此,代码可能无法访问服务器,或者服务器没有发回此数据。不好说。
我能看到的是代码在 2.5 中发生了变化。这可能就是 2.4 仍然有效的原因。在这里查看如何确定版本:
我们今天在工作中遇到了同样的问题,我们自动使用最新版本的 maven 和 sonar 插件。一开始发现问题并不容易。
elcodedocle 给出的答案是正确的,但我想为那些以自动化方式使用 maven 和声纳的人补充一点,这也是一个解决方案:
org.codehaus.mojo:sonar-maven-plugin:2.6:sonar
这样它可以在旧版本 2.6 上运行,我可以确认它可以工作。
2.7 中可能存在错误,我希望它能尽快修复。这是我们的错误:
[ERROR] Failed to execute goal org.codehaus.mojo:sonar-maven plugin:2.7:sonar (default-cli) on project (projectName): Unable to determine structure of project. Probably you use Maven Advanced Reactor Options with a broken tree of modules. "(projectName)" is orphan -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
编辑:
查看此 post 以获取更多信息:
这里说明插件新版本2.7不再兼容java6个项目。如果您不熟悉它,您还可以在 Jenkins 中找到有关如何修复它的说明。 (我的解释有点短)
对于那些对 "why?" 感兴趣的人,我做了更多的挖掘,似乎正在发生的事情是这样的:
RunnerBootstrapper 尝试检查版本是否为 5.2+:
首先serverVersion是retrieved from a launcher created in EmbeddedRunner,
使用IsolatedLauncher creating a proxy of implementation class BatchIsolatedLauncher
其中 attempts to read a resource file
sq-version.txt
包含版本。
此 sq-version.txt
文件位于 org.codehaus.sonar:sonar-plugin-api, but this dependency is not included (even transitively) in the sonar-maven-plugin. All it references sonar-wise is org.sonarsource.sonar-runner:sonar-runner-api。
他们似乎 have changed the location and name of the version txt file 但没有更新所有代码。您可能会手动添加内容为 5.2
(无换行符)的 sq-version.txt
到插件类路径(可能通过更新插件 jar),或者添加对 sonar-plugin-[=53= 的依赖],但这些都是技巧。
sonar-maven-plugin 2.6 使用sonar-runner 2.4,与sonar-maven-plugin 2.7 使用的2.5 有很大不同(sonar-runner 的groupId 改变了域 从 org.codehaus.sonar.runner
到 org.sonarsource.sonar-runner
),所以最好坚持使用 v2.6 插件,直到他们平稳过渡并发布更多版本。
SonarQube 服务器版本传递给 maven-sonar-plugin
的方式在 v2.7 中发生了变化,连同其他内容,因为它现在使用 sonar-runner 2.5
。
在<4.3的SonarQube实例中使用它确实存在一个错误,为此我开了工单:https://jira.sonarsource.com/browse/MSONAR-131
请注意,不再主动支持 SQs < 4.5(当前 LTS),并且不能保证 sonar-maven-plugin
不会由于公开的新界面而以其他方式与它们不兼容通过 sonar-runner 2.5
。
对于这些情况,最好将 Maven 插件版本锁定为 2.6,正如已经建议的那样。
发现适合您的插件版本运行声纳安装。
例如 mvn org.codehaus.mojo:sonar-maven-plugin:2.6:sonar
此插件版本不适用于最新的声纳版本,但适用于 4.1.2。