2014-04-08 36 views
1

經過一段時間後分析拋出NPE。但它不是它分析的第一個模塊。所以我沒有線索,問題可能是什麼。隨着SonarQube 4.1.2,它的工作沒有問題。NPE在詹金斯/ Maven的分析升級到4.2 SonarQube

這裏NPE的註銷:

15:06:41 org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:sonar-maven-plugin:2.2:sonar (default- cli) on project XXX: Can not execute SonarQube analysis 
15:06:41 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:216) 
15:06:41 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) 
15:06:41 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) 
15:06:41 at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) 
15:06:41 at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) 
15:06:41 at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) 
15:06:41 at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) 
15:06:41 at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:317) 
15:06:41 at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:152) 
15:06:41 at org.apache.maven.cli.MavenCli.execute(MavenCli.java:555) 
15:06:41 at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:214) 
15:06:41 at org.apache.maven.cli.MavenCli.main(MavenCli.java:158) 
15:06:41 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
15:06:41 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
15:06:41 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
15:06:41 at java.lang.reflect.Method.invoke(Method.java:601) 
15:06:41 at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) 
15:06:41 at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) 
15:06:41 at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) 
15:06:41 at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) 
15:06:41 Caused by: org.apache.maven.plugin.MojoExecutionException: Can not execute SonarQube analysis 
15:06:41 at org.codehaus.mojo.sonar.Bootstraper.executeMojo(Bootstraper.java:109) 
15:06:41 at org.codehaus.mojo.sonar.Bootstraper.start(Bootstraper.java:67) 
15:06:41 at org.codehaus.mojo.sonar.SonarMojo.execute(SonarMojo.java:109) 
15:06:41 at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:106) 
15:06:41 at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:208) 
15:06:41 ... 19 more 
15:06:41 Caused by: org.apache.maven.plugin.MojoExecutionException 
15:06:41 at org.sonar.maven.ExceptionHandling.handle(ExceptionHandling.java:37) 
15:06:41 at org.sonar.maven.SonarMojo.execute(SonarMojo.java:175) 
15:06:41 at org.codehaus.mojo.sonar.Bootstraper.executeMojo(Bootstraper.java:104) 
15:06:41 ... 23 more 
15:06:41 Caused by: java.lang.NullPointerException 
15:06:41 at org.sonar.plugins.java.bridges.DsmSerializer.serializeCell(DsmSerializer.java:86) 
15:06:41 at org.sonar.plugins.java.bridges.DsmSerializer.serializeRow(DsmSerializer.java:74) 
15:06:41 at org.sonar.plugins.java.bridges.DsmSerializer.serializeRows(DsmSerializer.java:53) 
15:06:41 at org.sonar.plugins.java.bridges.DsmSerializer.serialize(DsmSerializer.java:43) 
15:06:41 at org.sonar.plugins.java.bridges.DsmSerializer.serialize(DsmSerializer.java:94) 
15:06:41 at org.sonar.plugins.java.bridges.DesignBridge.serializeDsm(DesignBridge.java:133) 
15:06:41 at org.sonar.plugins.java.bridges.DesignBridge.onProject(DesignBridge.java:83) 
15:06:41 at org.sonar.plugins.java.Bridges.saveProject(Bridges.java:76) 
15:06:41 at org.sonar.plugins.java.Bridges.save(Bridges.java:67) 
15:06:41 at org.sonar.plugins.java.JavaSquidSensor.analyse(JavaSquidSensor.java:87) 
15:06:41 at org.sonar.batch.phases.SensorsExecutor.executeSensor(SensorsExecutor.java:79) 
15:06:41 at org.sonar.batch.phases.SensorsExecutor.execute(SensorsExecutor.java:70) 
15:06:41 at org.sonar.batch.phases.PhaseExecutor.execute(PhaseExecutor.java:134) 
15:06:41 at org.sonar.batch.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:186) 
15:06:41 at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
15:06:41 at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
15:06:41 at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:199) 
15:06:41 at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:194) 
15:06:41 at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:192) 
15:06:41 at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:192) 
15:06:41 at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:187) 
15:06:41 at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
15:06:41 at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
15:06:41 at org.sonar.batch.scan.ScanTask.scan(ScanTask.java:56) 
15:06:41 at org.sonar.batch.scan.ScanTask.execute(ScanTask.java:44) 
15:06:41 at org.sonar.batch.bootstrap.TaskContainer.doAfterStart(TaskContainer.java:82) 
15:06:41 at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
15:06:41 at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
15:06:41 at org.sonar.batch.bootstrap.BootstrapContainer.executeTask(BootstrapContainer.java:144) 
15:06:41 at org.sonar.batch.bootstrap.BootstrapContainer.doAfterStart(BootstrapContainer.java:132) 
15:06:41 at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92) 
15:06:41 at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77) 
15:06:41 at org.sonar.batch.bootstrapper.Batch.startBatch(Batch.java:92) 
15:06:41 at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:74) 
15:06:41 at org.sonar.runner.batch.IsolatedLauncher.execute(IsolatedLauncher.java:45) 
15:06:41 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
15:06:41 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
15:06:41 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
15:06:41 at java.lang.reflect.Method.invoke(Method.java:601) 
15:06:41 at org.sonar.runner.impl.BatchLauncher$1.delegateExecution(BatchLauncher.java:87) 
15:06:41 at org.sonar.runner.impl.BatchLauncher$1.run(BatchLauncher.java:75) 
15:06:41 at java.security.AccessController.doPrivileged(Native Method) 
15:06:41 at org.sonar.runner.impl.BatchLauncher.doExecute(BatchLauncher.java:69) 
15:06:41 at org.sonar.runner.impl.BatchLauncher.execute(BatchLauncher.java:50) 
15:06:41 at org.sonar.runner.api.EmbeddedRunner.doExecute(EmbeddedRunner.java:102) 
15:06:41 at org.sonar.runner.api.Runner.execute(Runner.java:90) 
15:06:41 at org.sonar.maven.SonarMojo.execute(SonarMojo.java:173) 
15:06:41 ... 24 more 
+0

對於小型項目,不會出現此問題。對於更大的項目> 10個模塊,構建會破壞所述異常。 –

回答

1

JIRA門票創建:http://jira.codehaus.org/browse/SONARJAVA-501優先「攔截」

+0

謝謝。聲納用戶ML上的Brian Tisse發現了一個快速解決方法:如果使用-Dsonar.skipDesign = true作爲maven參數,則編譯將會完成。 –

0

基於this thread這似乎是插件不是最新與SonarCube 4.2的問題。看起來這些變化不是向後兼容的。

最新詹金斯插件的版本是2.1。它於2013年發佈,由於SonarCube 4.2只是released a month ago,它看起來像需要發佈此插件的新版本才能工作。

+1

您提到的線程講述了Eclipse集成。 Jenkins插件只是啓動Maven作業,它自己尋找正確的Maven插件。 Maven工作加載了最新的Sonar Maven插件。 –

+0

我知道它的確如此,但它與Eclipse集成的服務器API相同。但沒關係,沒有嘗試過,所以我可以承認我的答案只是猜測。 – eis

0

只是爲了記錄在案,並提供一個更完整的答案:

問題是由於一個事實,即在項目的目錄中的一個部分您的Java文件中定義多個包:

directory : foo 
       file A.java : 
          package foo; 
          class A {.... 

       file B.java 
          package bar; 
          class B { .... 

這完全是由javac的支持,但它是一個不好的做法,它是由聲納-java的分析檢測,提高預警: 「目錄,包含3個NS屬於不同的包文件 - 某些指標可能會錯誤地報告:「......

如果B類指的是在另一個目錄中的一些其他類項目的,然後它會提高你面臨的空指針異常。 聲納的Java 2.2中實現的解決辦法是提高的情況下,你沒有的skipDesign標誌失效分析,並邀請你要麼修復的源代碼或使用skipPackageDesign標誌一個特定的異常。

您可能會問的一個問題是爲什麼SQ 4.2和sonar-java 2.1之前的工作原因:這是因爲Java是SonarQube覆蓋語言的特定公民,並且使用了一個名爲JavaPackage的特定對象。 我們在SQ 4.2和sonar-java 2.1中擺脫了這種特殊性,因此如果在一個目錄中有多個包,我們就無法正確附加指標。而在你提出的情況下,我們甚至無法生成依賴關係圖。因此

解決方案是通過將文件複製到相應目錄到他們的包或使用已經提到的標誌跳過這個依賴性分析來修復代碼。

我們提供了一個更好的錯誤在即將到來的聲納的Java 2.2處理此。

+1

在我們的案例中,問題發生是因爲一個java文件,其中的所有內容都被評論了,甚至是包聲明。 –

+0

感謝您的反饋,可以派上用場! – benzonico