SonarRunner throws ClassNotFoundException: org.apache.maven.execution.MavenSession

Gradle SonarRunner is giving a wierd ‘java.lang.ClassNotFoundException: org.apache.maven.execution.MavenSession’ when I run ‘sonarRunner’ task for simple gradle project with Java 1.7 and Gradle 2.1 and the following SonarRunner configuraiton in ‘build.gradle’.

sonarRunner {

sonarProperties {

property “sonar.host.url”, “http://sonar:8080/sonar

property “sonar.jdbc.url”, “jdbc:mysql://sonar:3306/sonar?useUnicode=true&characterEncoding=utf8”

property “sonar.jdbc.driverClassName”, “com.mysql.jdbc.Driver”

property “sonar.jdbc.username”, “sonar”

property “sonar.jdbc.password”, “sonar”

}

}

‘gradle clean sonarRunner’ gives the following stacktrace:

19:50:33.139 [DEBUG] [org.gradle.launcher.daemon.server.exec.ReturnResult] Daemon is dispatching the build result: DaemonCommandResult[type=CommandFailure, value=org.gradle.launcher.exec.ReportedException: org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ‘:sonarRunner’.]

19:50:33.139 [DEBUG] [org.gradle.launcher.daemon.server.SynchronizedDispatchConnection] thread 13: dispatching class org.gradle.launcher.daemon.protocol.CommandFailure

[sts] Build failed

org.gradle.tooling.BuildException: Could not execute build using Gradle distribution ‘http://services.gradle.org/distributions/gradle-2.1-rc-2-bin.zip’.

at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:53)

at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:57)

at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)

at org.gradle.tooling.internal.consumer.DefaultBuildLauncher.run(DefaultBuildLauncher.java:71)

at org.springsource.ide.eclipse.gradle.core.TaskUtil.execute(TaskUtil.java:116)

at org.springsource.ide.eclipse.gradle.core.launch.GradleProcess$1.doit(GradleProcess.java:92)

at org.springsource.ide.eclipse.gradle.core.util.GradleRunnable$1.run(GradleRunnable.java:53)

at org.eclipse.core.internal.jobs.Worker.run(Worker.java:54)

Caused by: org.gradle.internal.exceptions.LocationAwareException: Execution failed for task ‘:sonarRunner’.

at org.gradle.initialization.DefaultExceptionAnalyser.transform(DefaultExceptionAnalyser.java:77)

at org.gradle.initialization.MultipleBuildFailuresExceptionAnalyser.transform(MultipleBuildFailuresExceptionAnalyser.java:47)

at org.gradle.initialization.StackTraceSanitizingExceptionAnalyser.transform(StackTraceSanitizingExceptionAnalyser.java:30)

at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:108)

at org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:86)

at org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:80)

at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:45)

at org.gradle.tooling.internal.provider.BuildModelAction.run(BuildModelAction.java:32)

at org.gradle.tooling.internal.provider.ConfiguringBuildAction.run(ConfiguringBuildAction.java:134)

at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:36)

at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:26)

at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:47)

at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:35)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)

at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)

at org.gradle.util.Swapper.swap(Swapper.java:38)

at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)

at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:70)

at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)

at org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:258)

at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)

at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.HandleCancel.execute(HandleCancel.java:36)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:30)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.DaemonHygieneAction.execute(DaemonHygieneAction.java:39)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)

at org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)

at org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:52)

at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:154)

at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)

at org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)

at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)

Caused by: org.gradle.api.tasks.TaskExecutionException: Execution failed for task ‘:sonarRunner’.

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)

at org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)

at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)

at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)

at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)

at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)

at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)

at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)

at org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:305)

at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)

at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)

at org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)

at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:23)

at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:88)

at org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)

at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)

at org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)

at org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:68)

at org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)

at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:62)

at org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:55)

at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:149)

at org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:106)

… 47 more

Caused by: org.sonar.runner.RunnerException: java.lang.NoClassDefFoundError: Lorg/apache/maven/execution/MavenSession;

at org.sonar.runner.Runner.delegateExecution(Runner.java:288)

at org.sonar.runner.Runner.execute(Runner.java:151)

at org.sonar.runner.Runner$execute$0.call(Unknown Source)

at org.gradle.api.sonar.runner.SonarRunner.run(SonarRunner.groovy:52)

at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:63)

at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:218)

at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:211)

at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:200)

at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:579)

at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:562)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)

at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)

… 70 more

Caused by: java.lang.NoClassDefFoundError: Lorg/apache/maven/execution/MavenSession;

at org.picocontainer.injectors.AdaptingInjection$2.run(AdaptingInjection.java:217)

at org.picocontainer.injectors.AdaptingInjection.injectionFieldAnnotated(AdaptingInjection.java:209)

at org.picocontainer.injectors.AdaptingInjection.fieldAnnotatedInjectionAdapter(AdaptingInjection.java:188)

at org.picocontainer.injectors.AdaptingInjection.createComponentAdapter(AdaptingInjection.java:57)

at org.picocontainer.behaviors.AbstractBehaviorFactory.createComponentAdapter(AbstractBehaviorFactory.java:44)

at org.picocontainer.behaviors.OptInCaching.createComponentAdapter(OptInCaching.java:45)

at org.picocontainer.DefaultPicoContainer.addComponent(DefaultPicoContainer.java:535)

at org.picocontainer.DefaultPicoContainer.access$300(DefaultPicoContainer.java:83)

at org.picocontainer.DefaultPicoContainer$AsPropertiesPicoContainer.addComponent(DefaultPicoContainer.java:1148)

at org.sonar.api.platform.ComponentContainer.addExtension(ComponentContainer.java:173)

at org.sonar.batch.bootstrap.ExtensionInstaller.doInstall(ExtensionInstaller.java:74)

at org.sonar.batch.bootstrap.ExtensionInstaller.install(ExtensionInstaller.java:53)

at org.sonar.batch.scan.ModuleScanContainer.addExtensions(ModuleScanContainer.java:122)

at org.sonar.batch.scan.ModuleScanContainer.doBeforeStart(ModuleScanContainer.java:62)

at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:90)

at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77)

at org.sonar.batch.scan.ProjectScanContainer.scan(ProjectScanContainer.java:187)

at org.sonar.batch.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:182)

at org.sonar.batch.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:175)

at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92)

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:82)

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.BootstrapContainer.executeTask(BootstrapContainer.java:156)

at org.sonar.batch.bootstrap.BootstrapContainer.doAfterStart(BootstrapContainer.java:144)

at org.sonar.api.platform.ComponentContainer.startComponents(ComponentContainer.java:92)

at org.sonar.api.platform.ComponentContainer.execute(ComponentContainer.java:77)

at org.sonar.batch.bootstrapper.Batch.startBatch(Batch.java:92)

at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:74)

at org.sonar.batch.Batch.execute(Batch.java:103)

at org.sonar.runner.internal.batch.Launcher.executeBatch(Launcher.java:69)

at org.sonar.runner.internal.batch.Launcher.execute(Launcher.java:61)

at org.sonar.runner.Runner.delegateExecution(Runner.java:285)

… 81 more

Caused by: java.lang.ClassNotFoundException: org.apache.maven.execution.MavenSession

at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)

at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)

at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)

… 117 more

Appreciate if anybody can help on this?

Please try with the new Sonar integration in 2.2-rc-2. Also make sure that you aren’t using any Sonar plugins that only support Maven.

Thank you for the reply. Unfortunately, I get the same error when I change to 2.2-rc-2. Following is my complete ‘build.gradle’ file:

buildscript {

repositories {

maven { url “http://repo.spring.io/libs-release” }

mavenLocal()

mavenCentral()

}

dependencies {

classpath(“org.springframework.boot:spring-boot-gradle-plugin:1.1.3.RELEASE”)

}

}

apply plugin: ‘java’

apply plugin: ‘spring-boot’

apply plugin: ‘war’

apply plugin: “sonar-runner”

war {

baseName = ‘foo.bar’

version = ‘0.1.0’

}

repositories {

mavenLocal()

mavenCentral()

maven { url “http://repo.spring.io/libs-release” }

}

dependencies {

compile(“org.springframework.boot:spring-boot-starter-web”)

compile(“org.springframework.boot:spring-boot-starter-jdbc”)

compile(“com.fasterxml.jackson.core:jackson-databind”)

compile(“com.mangofactory:swagger-springmvc:0.6.5”) {

exclude group: ‘org.slf4j’, module: ‘slf4j-log4j12’

}

compile(“org.hamcrest:hamcrest-all:1.3”)

compile(“c3p0:c3p0:0.9.1.2”)

compile(“com.sun.jersey:jersey-client:1.12”)

testCompile(“junit:junit”)

compile(‘com.google.guava:guava:17.0’)

providedRuntime(“org.springframework.boot:spring-boot-starter-tomcat”)

}

configurations {

providedRuntime

}

sonarRunner {

sonarProperties {

property “sonar.host.url”, “http://sonar:8080/sonar

property “sonar.jdbc.url”, “jdbc:mysql://sonar:3306/sonar?useUnicode=true&characterEncoding=utf8”

property “sonar.jdbc.driverClassName”, “com.mysql.jdbc.Driver”

property “sonar.jdbc.username”, “sonar”

property “sonar.jdbc.password”, “sonar”

}

}

task wrapper(type: Wrapper) {

gradleVersion = ‘2.2-rc-2’

}

How do I verify if the Sonar plugins only support Maven?

Thanks.

Did you customize the Sonar server in any way, e.g. by installing additional plugins?

PS: The stack trace should look different when running with 2.2-rc-2, as the implementation of the sonar-runner plugin has changed significantly.

Actually it is a typical corporate installation of SonarQube, so I am pretty sure there will lot of additonal plugins. I am not sure if it would be easy for me to find out which additional plugins are installed and which one is using Maven since I don’t have access to sever. :(. I will try if I can find that information.

Oh yeah you are right the stacktrace is significantly different when I run with 2.2-rc-2. However. when I run with --debug option the underlying error is still same where it cannot find MavenSession class. I will post the stacktrace when I get back to office tomorrow.

Thanks for the help.

From the stack trace I can’t tell if this is a problem with the Gradle plugin or not. If you could try to reproduce this with a fresh local installation of SonarQube, that would be awesome. Perhaps the SonarQube folks can also help to diagnose the problem.

I tried with a fresh installation of SonarQube 4.0, but it is throwing a different error, I guess Gradle plugin doesn’t support 4.0 yet. I will try with SonarQube 3.7.4 later today and see if I can reproduce the issue with that. I have also cross posted the issue on the SonarQube forum as well, let’s see if I get any reply.

Perhaps SonarQube 4.0 requires a later version of the Sonar Runner API, which you can configure in the Gradle build (starting from Gradle 2.2). For details see the Sonar Runner plugin chapter in the Gradle User Guide.

I tested with a vanilla version of Sonar 3.7.4 and it works fine, so it seems like there is some specific plugin which is interfering. Unfortunately, I don’t have access to or make any changes to the central Sonar instance, so any suggestions or workaround to fix this?

I’m not aware of anything that can be done on the Gradle side. My best guess is that the plugin in question will have to add support for build tools other than Maven. (Until a few years ago, Sonar was a Maven-only solution.) I recommend to bring this up on the Sonar list.