# \[system.err\] Error: Could not find or load main class org.sonar.runner.Main

**URL:** <https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084>\
**Category:** Help/Discuss\
**Tags:** sonarqube\
**Created:** [March 10, 2016, 6:35am UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084 "2016-03-10T06:35:45Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![kamal2222ahmed](https://avatars.discourse-cdn.com/v4/letter/k/e36b37/32.png) [@kamal2222ahmed](https://discuss.gradle.org/u/kamal2222ahmed)\
**Post date:** [March 10, 2016, 6:35am UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/1 "2016-03-10T06:35:45Z")

</div>

I am trying to upgrade sonar-runner from 2.4 to 2.5, using gradle version 2.3

here is the snippet from build.gradle:

classpath ‘org.codehaus.sonar.runner:sonar-runner-dist:2.5’

and i use the following to upload the sonar-runner-dist-2.5.jar

 org.codehaus.sonar.runner sonar-runner-dist 2.5

to nexus

but cannot seem to run sonar-runner

---

<div class="post-metadata">

**Author:** ![bmuschko](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/bmuschko/32/5458_2.png) [@bmuschko](https://discuss.gradle.org/u/bmuschko)\
**Post date:** [March 11, 2016, 9:17pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/2 "2016-03-11T21:17:52Z")

</div>

You’ll need to change the version via the exposed DSL:

```
sonarRunner {
    toolVersion = '2.5'
}

```

For more information please see the [plugin’s documentation page](https://docs.gradle.org/current/userguide/sonar_runner_plugin.html).

---

<div class="post-metadata">

**Author:** ![kamal2222ahmed](https://avatars.discourse-cdn.com/v4/letter/k/e36b37/32.png) [@kamal2222ahmed](https://discuss.gradle.org/u/kamal2222ahmed)\
**Post date:** [March 11, 2016, 10:16pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/3 "2016-03-11T22:16:12Z")

</div>

Thanks for your response @bmuschko

in build.gradle

```
sonarRunner{
         toolVersion = "2.5"
         sonarProperties{
            property "sonar.analysis.mode", "preview"
            property "sonar.issuesReport.html.enable", "true"
            property "sonar.cobertura.reportPath", file("${projectDir}/build/reports/cobertura/coverage.xml")

```

its there

---

<div class="post-metadata">

**Author:** ![kamal2222ahmed](https://avatars.discourse-cdn.com/v4/letter/k/e36b37/32.png) [@kamal2222ahmed](https://discuss.gradle.org/u/kamal2222ahmed)\
**Post date:** [March 11, 2016, 10:22pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/4 "2016-03-11T22:22:34Z")

</div>

could it be a $CLASSPATH issue ? since i am running the gradle command on linux host A, and the sonarQube is on host B, and Nexus is on host C

i also manually copy the sonar-runner-dist-2.5.jar file on host A, and run the command manually like:

java -jar sonar-runner-dist-2.5.jar  
INFO: Runner configuration file: NONE  
INFO: Project configuration file: NONE  
INFO: SonarQube Runner 2.5-RC1  
INFO: Java 1.7.0\_80 Oracle Corporation (64-bit)  
INFO: Linux 2.6.32-504.1.3.el6.x86\_64 amd64  
to see if the jar is ok.

But HOW would gradle task know where is the jar file and how to run it ? unless the $CLASSPATH is set ?  
but since gradle would download the jar file upon execution, not sure how i would setup the $CLASSPATH for java to know where the jar is.  
Makes sense ?

---

<div class="post-metadata">

**Author:** ![bmuschko](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/bmuschko/32/5458_2.png) [@bmuschko](https://discuss.gradle.org/u/bmuschko)\
**Post date:** [March 11, 2016, 10:30pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/5 "2016-03-11T22:30:35Z")

</div>

Possibly the SonarQube project moved the main class to a different package or renamed it. If you look at the contents of the JAR file, do you find this class?

---

<div class="post-metadata">

**Author:** ![kamal2222ahmed](https://avatars.discourse-cdn.com/v4/letter/k/e36b37/32.png) [@kamal2222ahmed](https://discuss.gradle.org/u/kamal2222ahmed)\
**Post date:** [March 11, 2016, 10:38pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/6 "2016-03-11T22:38:42Z")

</div>

not sure where to look:

unzip sonar-runner-dist-2.5.jar  
Archive: sonar-runner-dist-2.5.jar  
creating: META-INF/  
inflating: META-INF/MANIFEST.MF  
creating: org/  
creating: org/sonar/  
creating: org/sonar/runner/  
creating: org/sonar/runner/cli/  
inflating: org/sonar/runner/cli/RunnerFactory$1.class  
inflating: org/sonar/runner/cli/Shutdown$ShutdownHook.class  
inflating: org/sonar/runner/cli/Logs.class  
inflating: org/sonar/runner/cli/Shutdown.class  
inflating: org/sonar/runner/cli/RunnerFactory.class  
inflating: org/sonar/runner/cli/Conf.class  
inflating: org/sonar/runner/cli/SystemInfo$System2.class  
inflating: org/sonar/runner/cli/Shutdown$1.class  
inflating: org/sonar/runner/cli/SystemInfo.class  
inflating: org/sonar/runner/cli/package-info.class  
inflating: org/sonar/runner/cli/Main.class  
inflating: org/sonar/runner/cli/Stats.class  
inflating: org/sonar/runner/cli/Cli.class  
inflating: org/sonar/runner/cli/RunnerFactory$DefaultLogOutput.class  
inflating: org/sonar/runner/cli/Exit.class  
creating: META-INF/maven/  
creating: META-INF/maven/org.sonarsource.sonar-runner/  
creating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-dist/  
inflating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-dist/pom.xml  
inflating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-dist/pom.properties  
inflating: sonar-runner-batch.jar  
creating: org/sonar/runner/impl/  
inflating: org/sonar/runner/impl/IsolatedLauncherProxy.class  
inflating: org/sonar/runner/impl/IsolatedLauncherFactory.class  
inflating: org/sonar/runner/impl/JarDownloader.class  
inflating: org/sonar/runner/impl/VersionUtils.class  
inflating: org/sonar/runner/impl/JarExtractor.class  
inflating: org/sonar/runner/impl/IsolatedLauncherFactory$1.class  
inflating: org/sonar/runner/impl/TempCleaning.class  
inflating: org/sonar/runner/impl/IsolatedClassloader.class  
inflating: org/sonar/runner/impl/package-info.class  
inflating: org/sonar/runner/impl/Jars$BatchFileDownloader.class  
inflating: org/sonar/runner/impl/Jars.class  
inflating: org/sonar/runner/impl/ServerConnection.class  
inflating: org/sonar/runner/impl/SimulatedLauncher.class  
inflating: org/sonar/runner/impl/ClassloadRules.class  
inflating: org/sonar/runner/impl/RunnerException.class  
creating: org/sonar/runner/cache/  
inflating: org/sonar/runner/cache/FileCache.class  
inflating: org/sonar/runner/cache/FileCache$Downloader.class  
inflating: org/sonar/runner/cache/DeleteFileOnCloseInputStream.class  
inflating: org/sonar/runner/cache/DirectoryLock.class  
inflating: org/sonar/runner/cache/FileHashes.class  
inflating: org/sonar/runner/cache/package-info.class  
inflating: org/sonar/runner/cache/PersistentCache.class  
inflating: org/sonar/runner/cache/FileCacheBuilder.class  
inflating: org/sonar/runner/cache/Logger.class  
inflating: org/sonar/runner/cache/PersistentCacheBuilder.class  
inflating: org/sonar/runner/cache/PersistentCache$1.class  
inflating: org/sonar/runner/cache/TTLCacheInvalidation.class  
inflating: org/sonar/runner/cache/PersistentCache$DirectoryCleanFilter.class  
inflating: org/sonar/runner/cache/PersistentCache$DirectoryClearFilter.class  
inflating: org/sonar/runner/cache/PersistentCacheInvalidation.class  
creating: org/sonar/runner/api/  
inflating: org/sonar/runner/api/IssueListenerAdapter.class  
inflating: org/sonar/runner/api/LogOutput$Level.class  
inflating: org/sonar/runner/api/Dirs.class  
inflating: org/sonar/runner/api/Utils$1.class  
inflating: org/sonar/runner/api/IssueListener.class  
inflating: org/sonar/runner/api/EmbeddedRunner.class  
inflating: org/sonar/runner/api/EmbeddedRunner$1.class  
inflating: org/sonar/runner/api/LogOutput.class  
inflating: org/sonar/runner/api/package-info.class  
inflating: org/sonar/runner/api/Issue.class  
inflating: org/sonar/runner/api/RunnerVersion.class  
inflating: org/sonar/runner/api/Issue$1.class  
inflating: org/sonar/runner/api/Utils.class  
inflating: org/sonar/runner/api/version.txt  
inflating: org/sonar/runner/api/Utils$DeleteQuietlyFileVisitor.class  
inflating: org/sonar/runner/api/Issue$Builder.class  
inflating: org/sonar/runner/api/LoggerAdapter.class  
creating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-api/  
inflating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-api/pom.xml  
inflating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-api/pom.properties  
creating: org/sonar/runner/kevinsawicki/  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$1.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$10.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$2.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$3.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$4.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$5.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$6.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$7.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$8.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$9.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$Base64.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$CloseOperation.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$FlushOperation.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$HttpRequestException.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$Operation.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest$RequestOutputStream.class  
inflating: org/sonar/runner/kevinsawicki/HttpRequest.class  
creating: META-INF/maven/com.github.kevinsawicki/  
creating: META-INF/maven/com.github.kevinsawicki/http-request/  
inflating: META-INF/maven/com.github.kevinsawicki/http-request/pom.xml  
inflating: META-INF/maven/com.github.kevinsawicki/http-request/pom.properties  
inflating: META-INF/LICENSE.txt  
inflating: META-INF/NOTICE.txt  
creating: org/sonar/runner/commonsio/  
inflating: org/sonar/runner/commonsio/Charsets.class  
inflating: org/sonar/runner/commonsio/FileExistsException.class  
creating: org/sonar/runner/commonsio/filefilter/  
inflating: org/sonar/runner/commonsio/filefilter/AbstractFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/AgeFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/AndFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/ConditionalFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/DelegateFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/DirectoryFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/FalseFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/FileFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/FileFilterUtils.class  
inflating: org/sonar/runner/commonsio/filefilter/IOFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/MagicNumberFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/NameFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/NotFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/OrFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/PrefixFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/SizeFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/SuffixFileFilter.class  
inflating: org/sonar/runner/commonsio/filefilter/TrueFileFilter.class  
inflating: org/sonar/runner/commonsio/FilenameUtils.class  
inflating: org/sonar/runner/commonsio/FileUtils.class  
creating: org/sonar/runner/commonsio/input/  
inflating: org/sonar/runner/commonsio/input/ClosedInputStream.class  
inflating: org/sonar/runner/commonsio/IOCase.class  
inflating: org/sonar/runner/commonsio/IOUtils.class  
inflating: org/sonar/runner/commonsio/LineIterator.class  
creating: org/sonar/runner/commonsio/output/  
inflating: org/sonar/runner/commonsio/output/ByteArrayOutputStream.class  
inflating: org/sonar/runner/commonsio/output/NullOutputStream.class  
inflating: org/sonar/runner/commonsio/output/StringBuilderWriter.class  
creating: META-INF/maven/commons-io/  
creating: META-INF/maven/commons-io/commons-io/  
inflating: META-INF/maven/commons-io/commons-io/pom.xml  
inflating: META-INF/maven/commons-io/commons-io/pom.properties  
creating: org/sonar/runner/batch/  
inflating: org/sonar/runner/batch/LogOutput$Level.class  
inflating: org/sonar/runner/batch/IssueListener$Issue.class  
inflating: org/sonar/runner/batch/IssueListener.class  
inflating: org/sonar/runner/batch/LogOutput.class  
inflating: org/sonar/runner/batch/IsolatedLauncher.class  
creating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-batch-interface/  
inflating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-batch-interface/pom.xml  
inflating: META-INF/maven/org.sonarsource.sonar-runner/sonar-runner-batch-interface/pom.properties

---

<div class="post-metadata">

**Author:** ![bmuschko](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/bmuschko/32/5458_2.png) [@bmuschko](https://discuss.gradle.org/u/bmuschko)\
**Post date:** [March 11, 2016, 10:47pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/7 "2016-03-11T22:47:18Z")

</div>

I only see the class `org/sonar/runner/cli/Main.class` which doesn’t line up with the [hard-coded class name in the plugin](https://github.com/gradle/gradle/blob/master/subprojects/sonar/src/main/groovy/org/gradle/sonar/runner/tasks/SonarRunner.java#L57). That’s why it is failing for you. The plugin code is not compatible with the library version anymore.

BTW: The SonarRunner plugin in Gradle core is superseded by an [external plugin](https://github.com/SonarSource/sonar-gradle). Please use the external plugin. They might have fixed the issue.

---

<div class="post-metadata">

**Author:** ![kamal2222ahmed](https://avatars.discourse-cdn.com/v4/letter/k/e36b37/32.png) [@kamal2222ahmed](https://discuss.gradle.org/u/kamal2222ahmed)\
**Post date:** [March 14, 2016, 2:25pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/8 "2016-03-14T14:25:50Z")

</div>

git diff build.gradle  
diff --git a/build.gradle b/build.gradle

> ```
> index 111f1ed..b6e9f2a 100644
> — a/build.gradle
> +++ b/build.gradle
> @@ -90,7 +90,8 @@ buildscript {
> }
> dependencies
> { classpath 'gov.dhs.uscis.elis2:crypto-plugin:0.1.4' - classpath 'org.codehaus.sonar.runner:sonar-runner-dist:2.4' + //classpath 'org.codehaus.sonar.runner:sonar-runner-dist:2.5' + classpath 'org.sonarsource.scanner.gradle:sonarqube-gradle-plugin:2.5' classpath 'net.saliman:gradle-cobertura-plugin:2.2.7' }
> @@ -139,7 +140,7 @@ subprojects {
> if(sonarProjects.contains(project.getPath()) && rootProject.hasProperty('sonar') ){
> apply plugin: 'net.saliman.cobertura'
> apply plugin: 'sonar-runner'
> + apply plugin: 'org.sonarqube'
> cobertura {
> coverageDirs << file("$
> {projectDir}/build/classes/main")
> @@ -149,9 +150,9 @@ subprojects {
> }
> project.tasks.generateCoberturaReport.outputs.file file("${projectDir}
> /build/reports/cobertura/coverage.xml")
> project.tasks.cobertura.outputs.dir file("$
> {projectDir}/build/cobertura")
> -
> - sonarRunner{
> - toolVersion = "2.4"
> +
> + sonarqube{
> + toolVersion = "2.5"
> sonarProperties{
> property "sonar.analysis.mode", "preview"
> property "sonar.issuesReport.html.enable", "true"
> @@ -165,8 +166,8 @@ subprojects {
> systemProperty "sonar.host.url", "http://${sonar}"
> systemProperty "project.settings","${projectDir}
> /build/tmp/sonarRunner/sonar-project.properties"
> environment = System.getenv()
> maxHeapSize = '768m'
> jvmArgs '-XX:MaxPermSize=256m'
> + maxHeapSize = '2048m'
> + jvmArgs '-XX:MaxPermSize=2048m'
> }
> }
> 
> ```

and i get error:  
/opt/gradle/gradle-2.7/bin/gradle -PcodeCoverageType=xml -Ptls.key.store=/opt/keystore/JavaKeyStore.jks -Ptls.trusted.store=/opt/keystore/JavaKeyStore.jks -PpbeKeyFile=/elis2/apps/Shared/Crypto/src/main/resources/pbe.dat -PreleaseDeploy=false -Dorg.gradle.daemon=true :noINT :Backend:Elis2Services:sonarqube  
properties decrypted with keyfile /elis2/apps/Shared/Crypto/src/main/resources/pbe.dat  
Incremental java compilation is an incubating feature.  
FAILURE: Build failed with an exception.  
Where:  
Build file ‘/elis2/apps/build.gradle’ line: 143  
What went wrong:  
A problem occurred evaluating root project ‘apps’.  
\> Plugin with id ‘sonarqube’ not found.  
Try:  
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.  
BUILD FAILED  
Total time: 17.665 secs

This is what i use in Nexus:  
  
org.codehaus.sonar.scanner  
sonar-runner-cli  
2.5  
  
and upload the following jar in the lib folder:  
[https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.5.zip](https://sonarsource.bintray.com/Distribution/sonar-scanner-cli/sonar-scanner-2.5.zip)

---

<div class="post-metadata">

**Author:** ![bmuschko](https://sea1.discourse-cdn.com/gradle/user_avatar/discuss.gradle.org/bmuschko/32/5458_2.png) [@bmuschko](https://discuss.gradle.org/u/bmuschko)\
**Post date:** [March 14, 2016, 3:23pm UTC](https://discuss.gradle.org/t/system-err-error-could-not-find-or-load-main-class-org-sonar-runner-main/15084/9 "2016-03-14T15:23:27Z")

</div>

Looks like you are already using the external SonarQube plugin. In this case I’d suggest you ask on their project forum/GitHub.

BTW: For future posts could you please properly format your code snippet. They are pretty much unreadable which makes it hard for someone to help.
