Skip to end of metadata
Go to start of metadata
NameJava Ecosystem
Latest version1.2 ( 13 March 2013 )
Requires Sonar version3.4 or higher ( check version compatibility )
DownloadJavaEcosystem-1.2.zip
LicenseGNU LGPL 3
DevelopersSonarSource
Issue trackerhttp://jira.codehaus.org/browse/SONARJAVA
Sourceshttps://github.com/SonarSource/sonar-java
Live example

If you want to see a live example of the capabilities of the Java Ecosystem, you can have a look at Sonar on Sonar.

Description / Features

The Java Ecosystem is a set of Sonar plugins used to monitor the quality of Java projects within Sonar.

It is compatible with the Sonar Eclipse plugin to track violations while coding. It is also compatible with the Issues Report plugin to run pre-commit local analysis.

Installation

The Java Ecosystem is a set of plugins:

  • Mandatory plugins:
    • Java [sonar-java-plugin]: to parse Java code source, compute metrics, etc.
    • Squid [sonar-squid-java-plugin]: to compute additional metrics, check code against rules provided by the Sonar engine
       
  • Optional plugins adding features from external tools:
    • Checkstyle [sonar-checkstyle-plugin]: to check code against rules provided by Checkstyle
    • FindBugs [sonar-findbugs-plugin]: to check code against rules provided by FindBugs
    • PMD [sonar-pmd-plugin]: to check code against rules provided by PMD
    • Surefire [sonar-surefire-plugin]: to execute unit tests with Surefire
    • Cobertura [sonar-cobertura-plugin]: to get code coverage with Cobertura 
    • JaCoCo [sonar-jacoco-plugin]: to get code coverage with JaCoCo

Note that by default the Java Ecosystem is provided with Sonar.

You can update it from the Update Center (since Sonar 3.5) or download the latest release from this page header.

Usage

Run a Sonar Analysis

To launch a Sonar analysis of your Java project, it is recommended to use the following analyzers:

Sample projects for each analyzer are available on GitHub that can be browsed or downloaded: /projects/languages/java

Notes:

  • The source directory should be set to the directory containing the top parent package. For example, if your directory structure is 'src/main/java/com/mycompany/...', the source directory must be set to 'src/main/java'.
  • The source directory tree has to match the package declaration. For example, the following class:
MyClass.java

must be located in the following directory: [mySourceDirectory]/com/mycompany/mypackage/MyClass.java. Otherwise you would get such an error while running your analysis:

Log

Tests and Code Coverage

The default code coverage engine for unit tests can be set in Settings > Configuration > General Settings > Java > Code coverage plugin property.

By default the code coverage engine is JaCoCo but CoberturaEmma or Clover can also be used.

To deal with unit tests and code coverage for Java project in Sonar, see Code Coverage by Unit Tests for Java Project tutorial.

To deal with integration tests and code coverage for Java project in Sonar, see Code Coverage by Integration Tests for Java Project tutorial.

Advanced Settings

Documentation on advanced parameters is available on the Analysis Parameters page.

Advanced parameters specific to Java are:

KeyDescriptionDefault value

sonar.skipDesign

Deactivate Java bytecode analysis. The Java bytecode is analyzed by Sonar in order to extract dependencies between packages and files. These dependencies are used for instance to display the DSM (Dependency System Matrix). This bytecode analysis can be deactivated.

false

sonar.java.source

Java version of the source code. This property is not used by the Sonar core but can be used by Java Sonar plugin like the PMD plugin. 

1.5

FAQ

See Java Ecosystem FAQ.

Metrics

See Metrics documentation page.

Android

A sample project with code coverage computed with Emma is available on GitHub that can be browsed or downloaded: /projects/android

Extending Coding Rules using XPath

New coding rules can be added using XPath. See the related documentation.

To navigate the AST, download the SSLR Java Toolkit.

Change Log

Version 1.3 (unreleased) (43 issues)
Type Key Summary Priority Status
Bug SONARJAVA-165 "Undocumented API" detects private attributes as public Critical Resolved
Bug SONARJAVA-85 Provide contextual information when an ASM Exception is thrown while analysing a java class and don't stop the analysis Major Closed
Improvement SONARJAVA-81 CallToDeprecatedMethod: Improve the violation message Major Closed
Improvement SONARJAVA-105 The cardinality of JaCoCo properties "includes", "excludes" and "exclclassloader" should be multiple Major Closed
Improvement SONARJAVA-131 Rename the property key 'sonar.surefire.reportsPath' into 'sonar.junit.reportsPath' Major Closed
New Feature SONARJAVA-125 Rule S00112: Generic exceptions Error, RuntimeException, Throwable and Exception should never be thrown Major Closed
Bug SONARJAVA-29 "Avoid Throwing Raw Exception Types" Rule not able to detect "throw new Exception" in all cases Major Closed
Bug SONARJAVA-135 The rule "Unused private method" generates some false-positives in case of method overloading Major Closed
New Feature SONARJAVA-118 Rule S00100: Method names should comply with a naming convention Major Closed
New Feature SONARJAVA-119 Rule S00101: Class names should comply with a naming convention Major Closed
New Feature SONARJAVA-121 Rule S00104: Files should not have too many lines of code Major Closed
New Feature SONARJAVA-138 Rule S00113: Files should contain an empty new line at the end Major Closed
New Feature SONARJAVA-127 Rule S00107: Methods should not have too many parameters Major Closed
New Feature SONARJAVA-122 Rule S00105: Tabulation characters should not be used Major Closed
Task SONARJAVA-141 Deprecate PMD XPath rule in favor of Sonar XPath rule Major Closed
Task SONARJAVA-140 Mark Checkstyle CyclomaticComplexityCheck and PMD CyclomaticComplexity rules as deprecated in favor of our own rule Major Closed
New Feature SONARJAVA-143 Rule S00114: Interface names should comply with a naming convention Major Closed
Improvement SONARJAVA-142 Remove "Sun checks" profile Major Closed
New Feature SONARJAVA-146 Rule S00117: Local variable names should comply with a naming convention Major Closed
New Feature SONARJAVA-149 Rule S00120: Package names should comply with a naming convention Major Closed
New Feature SONARJAVA-152 Deprecate PMD rule AvoidDollarSigns in favor of S00114 - S00117 Major Closed
Bug SONARJAVA-161 XPath rule should not lead to NPE, when parse error happens Major Closed
New Feature SONARJAVA-150 Rule S00121: if/else/for/while/do statements should always use curly braces Major Closed
New Feature SONARJAVA-148 Rule S00119: Parameter type names should comply with a naming convention Major Closed
New Feature SONARJAVA-120 Rule S00103: Lines of code should not be too long Major Closed
New Feature SONARJAVA-145 Rule S00116: Field names should comply with a naming convention Major Closed
New Feature SONARJAVA-151 Rule S00122: Statements should be on separate lines Major Closed
New Feature SONARJAVA-144 Rule S00115: Constant names should comply with a naming convention Major Closed
Improvement SONARJAVA-166 Reorganize the properties of every Java plugin using sub-categories Major Closed
New Feature SONARJAVA-133 Compute the new metric "complexity in methods" Major Closed
Bug SONARJAVA-164 The Sonar JaCoCo plugin takes into account only the first binary directories if several ones are provided Major Closed
Improvement SONARJAVA-154 Use the new Sonar API to highlight any symbol use or declaration in java source code Major Closed
Improvement SONARJAVA-153 Use the Sonar Syntax Highlighting API to colorize java source code Major Closed
Bug SONARJAVA-19 @SuppressWarnings("all") no longer works in Sonar 3.3+ Major Resolved
Task SONARJAVA-139 Update the SQALE mapping for new rules Major Closed
New Feature SONARJAVA-147 Rule S00118: Abstract class names should comply with a naming convention Major Reopened
Task SONARJAVA-169 Upgrade to SSLR 1.19.1 and sslr-squid-bridge 2.3 Major Resolved
New Feature SONARJAVA-128 Rule S00108: Nested blocks of code should not be left empty Major Resolved
Improvement SONARJAVA-104 Improve the documentation explaining how to define some JaCoCo exclusion/inclusion patterns Minor Closed
Improvement SONARJAVA-116 Make the Checkstyle filter property configurable at project level Minor Closed
Improvement SONARJAVA-124 When the Sonar CheckstyleAuditListener receives an exception event, the java source file path must be logged along with error message Minor Closed
Bug SONARJAVA-158 Parser: usage of TypeArgument should be forbidden in some places Minor Closed
Bug SONARJAVA-159 Parser: usage of BasicType should be forbidden in ResourceSpecification Minor Closed

Version 1.2 (16 issues)
Type Key Summary Priority
Bug SONARJAVA-111 Support multiple binary directories in Findbugs Major
Improvement SONARJAVA-109 Do not apply exclusions to configuration of Cobertura intrumentation Major
Improvement SONARJAVA-108 Remove configuration of file exclusions in Findbugs Major
Bug SONARJAVA-82 Constructor for a class named get* will cause java-squid to fail sonar analyze Major
New Feature SONARJAVA-95 Provide TestNG Listener to record coverage per test Major
New Feature SONARJAVA-94 Provide JUnit Listener to record coverage per test Major
Improvement SONARJAVA-103 Add "Failed Tests" and "Skipped Tests" rules from Common Rules Major
Task SONARJAVA-99 Upgrade to SSLR 1.18 Major
Improvement SONARJAVA-96 Upgrade to JaCoCo 0.6.2 Major
Bug SONARJAVA-36 CheckstyleProfileImporter should support inheritance of properties Minor
Improvement SONARJAVA-90 The Findbugs plugin sometimes logs some violations with line number less than 1 Minor
Bug SONARJAVA-83 PMD plugin does not accept source level of "7" (vs 1.7) Minor
Bug SONARJAVA-51 Files not ending with '.java' or '.jav' should not be taken into account Minor
Improvement SONARJAVA-93 Remove the sonar.skipDesign property from the web interface Minor
Bug SONARJAVA-92 Author links are incorrect in Update Center for all plugins Minor
Improvement SONARJAVA-21 When a timeout exception occurs while executing Findbugs, the timeout threshold value should be logged Trivial

Version 1.1 (15 issues)
Type Key Summary Priority
Improvement SONARJAVA-18 Grab violations directly from findbugs without xml-report generation Major
Bug SONARJAVA-80 L10n files are not in the correct folder Major
Improvement SONARJAVA-20 Upgrade to SSLR 1.16 and switch to lexerless parser Major
Improvement SONARJAVA-3 The literal "42L" should be lexed as a LONG_LITERAL instead of a INTEGER_LITERAL Major
Improvement SONARJAVA-2 The literal "42.0" should be lexed as a DOUBLE_LITERAL instead of a FLOATING_LITERAL Major
Bug SONARJAVA-1 OutOfMemoryError when attempting to lex an unterminated single quote Major
Bug SONARJAVA-14 findbugs-result.xml contains invalid character entity Major
Improvement SONARJAVA-15 When using the property 'sonar.findbugs.excludesFilters' an INFO log should be generated to clearly show that the external Findbugs filter is taken into account Major
Improvement SONARJAVA-39 New property 'sonar.java.coveragePlugin' Major
Improvement SONARJAVA-4 Upgrade to Checkstyle 5.6 Major
New Feature SONARJAVA-5 Rule: Generic Java rule to define some homemade checks with an XPath expression Major
Improvement SONARJAVA-17 When the last line of a source code file is a blank line, this line is not counted in the "lines" measure Major
Bug SONARJAVA-44 The IT and Overall code coverage should not be computed when the code coverage by unit tests is not computed with jacoco Minor
Improvement SONARJAVA-22 The two properties of the Checkstyle rule 'RegexpHeaderCheck' should be TEXT Trivial
Bug SONARJAVA-84 Typo in the Checkstyle rule "ReturnCount" Trivial

 

Labels
  • None