Skip to main content
Jump to: navigation, search

SonarQube

About code quality analysis

Why?

Code quality analysis helps you to make your code:

  • less error-prone
  • more sustainable
  • more reliable
  • more readable
  • more welcoming to new contributors

How?

Code quality analysis mainly relies on a set of tools that look at your code and give you hints. The most famous tools are Findbugs, PMD, Checkstyle; but also code coverage tools such as Jacoco. JDT itself provides very powerful quality checks, but there are not enabled by default. You should go to Error/Warnings in preferences and replace all "ignore" by "Warning". You can (and should) enable such tools in IDE.

Code quality can also be analyzed out of the IDE, running those tools and using their reports to find out the "hot spots" in your code.

About Sonar

Sonar is an open-source product which is used to gather several metrics about code quality, put them all in a single dashboard, and provide some tips to help you making your code better, more sustainable, more reliable, less bugged.

Enable Hudson Sonar plugin on your job or running mvn sonar:sonar on your Maven build will result in the following flow of actions:

  1. Sonar will locally analyze code and generate reports from many analyzers
  2. Sonar will push those reports to the Sonar dashboard

Setting up SonarQube for Eclipse.org projects

Usage

Sonar can be found on https://dev.eclipse.org/sonar . Several projects already have quality reports enabled. You can drill-down on code to see Sonar annotations on each class, or navigate through the different widgets on the dashboard to focus on specific issues.

Enable Sonar for your project

The only prerequisite for projects is to use Tycho as a building tool, which allows to automatically retrieve all information about the build and its dependencies. Please note that for now Buckminster is not supported for Sonar analysis at Eclipse.

The project must have a Hudson instance. See how to get a dedicated HIPP. You should first setup a normal build to make sure the project compiles correctly.

Optional: it may be a good thing to add a sonar goal in your pom.xml, so you can run the sonar analyser whenever you want independently of the Hudson build.

Once done, a dedicated job has to be defined for the quality analysis -- because you don't want to execute Sonar everytime the project is built. In the update center, install the Sonar plugin and restart the Hudson instance. Then post a new bug entry in the community bugzilla to ask an administrator to add the Eclipse Sonar instance parameters to the Sonar plugin.

The initial documentation referenced Mickael Istria's blog entry at http://mickaelistria.wordpress.com/2012/10/08/sonar-at-eclipse-org/ . The information in it regarding the Eclipse process is outdated, but the article is still a good reading to understand how sonar works and what it can bring to you.

Permissions on Sonar

Sonar is currently (and will remain) public to all, but only an admin can log it. So it's not yet possible to store user preferences or be made an administrator on a project. Follow bug 391343 for more details.

Infrastructure and maintenance

Sonar is installed on a VM accessible from inside Eclipse infrastructure and with hostname sonar. It uses its embedded Jetty server to publish to HTTP, and uses a PostgreSQL database on the same VM.

The database is made accessible from Eclipse.org servers and has a user for Sonar, and another user for Hudson. When running the Hudson Sonar plugin, the plugin uses this user to push to the Sonar database the metrics about your project.

Bugzilla

Restarting Sonar

  1. As root, restart postgres with
/etc/init.d/postgresql start
  1. Then, as sonar user, restart SonarQube
# Assuming installed version is 3.7.1
$ cd sonar-3.7.1/bin/linux-x86-64
$ ./sonar.sh start

Maintenance notes

  • Database requires to be tweak to add some "GRANT" permissions to the sonar user. Sonar could start otherwise.
  • March 2013: https://bugs.eclipse.org/bugs/show_bug.cgi?id=407658 . Removed big log file and restarted Sonar,
  • July 2013: Got an OutOfMemory on Sonar side while running Platform-Sonar job. Increased max memory in conf/wrapper.conf and restarted Sonar.
  • July 2013: No space left on device. A lot of big memory dumps files in bin/linux-x86-64 consumed half of disk space. Removed them
  • October 2013: Migration to SonarQube 3.7.1 to provide compatibility with Maven
  • Reboot: INFO | jvm 1 | 2014/01/24 06:06:27 | java.lang.OutOfMemoryError

Back to the top