Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: fixed typo

Table of Contents


Versioning Strategy

The goal of this versionnig versionig strategy is both to :

  • Release often release early in order to get quick feedback from the SonarQube community
  • Release some stable versions of the SonarQube platforms for companies whose main priority is to set-up some very stable environments. Even if the price for such stable environnements is to not benefit of latest and sexy SonarQube features
  • Support the the API deprecation strategy (see next section)


  • Any API must be deprecated before being dropped
  • A deprecated API must be fully supported until its drop (For instance the implementation of a deprecated method can't be replaced by a "throw new UnsupportedOperationException()")
  • If an API is deprecated in version X.Y, this API will be dropped in version (X+1).3. Example: an API deprecated in 4.1 is supported in 4.2, 4.3, 5.0, 5.1, 5.2 and is dropped in version 5.3.
  • According to the versionning strategyversioning strategy, that means that an API can remain deprecated before being dropped during 6 to 12 months.
  • Any release of a SonarQube plugin must at least depends on the last major X.0 version of the SonarQube API
  • For each SonarQube plugin there must at least one release on each major version of SonarQube, which means at least one release each 6 months.
  • No usage of deprecated API is accepted when releasing a plugin. It raises a critical issue in SonarQube analysis. This issue can't be postponed.
  • No depreacted API introduced 2 major versions ago is accepted when releasing SonarQube. It raises a critical issue in SonarQube analysis. This issue can't be postponed.
  • An API is marked as deprecated with both:
    • the annotation @Deprecated
    • the javadoc tag @deprecated whose message must start with "in x.y", for example:

      Code Block
       * @deprecated in 4.2. Replaced by {@link #newMethod()}.
      public void foo() {