Giter Club home page Giter Club logo

mathan-dependency-updates-sonar-plugin's Introduction

Maven metadata URI example branch parameter Codacy Badge

Dependency-Updates-Report Plugin for SonarQube 7.9 to 9.1

Integrates dependency updates report from versions-maven-plugin into SonarQube v7.9. The plugin is compatible to SonarQube versions 7.9 to 9.1.

About dependency updates report

The versions-maven-plugin has the goal dependency-updates-report which creates an overview about available updates for the dependencies of a Maven project. There can be incremental, minor or major version updates.

Note

This SonarQube plugin does not perform analysis, rather, it reads existing dependency-updates-reports. Please refer to versions-maven-plugin for relevant documentation how to generate the reports.

Metrics

The plugin keeps track of the following statistics:

Metric Description
Dependencies to patch The number of dependencies with patches available (incremental updates).
Dependencies to patch (Ratio) The ratio of dependencies to patch.
Dependencies to upgrade The number of dependencies with upgrades available (minor and/or major updates).
Dependencies to upgrade (Ratio) The ratio of dependencies to upgrade.
Dependencies Total The total number of dependencies.
Patch maintenance The rating of the patch maintenance (see below)
Patches missed The total number of patches missed.
Upgrade maintenance The rating of the upgrade maintenance (see below)
Upgrades missed The total number of upgrades missed.

Please note that when computing measures on directory/module/project level measures for identical dependencies will be included only once. E.g. if a project contains two sub models having same dependency, this is included in the measure for each sub module. For the project the measure will not include the dependency multiple times (for each sub module) but only once.

Maintenance rating

The maintenance rating is based on the ratio of dependencies with patches/upgrades and the total number of dependencies. The ratios of <=5%, <=10%, <=20%, <=50% and >50% are the guidelines to define the rating. There are slightly adoptions for projects with less than 50 dependencies.

This metric is not final. For now the rating is calculated the following way.

Ratings a b c d e
Ratio <=~5% <=~10% <=~20% <=~50% >50%
0 - 10 dependencies 0 1 2 3-5 >5
11 - 20 dependencies 0-1 2-3 4-5 6-10 >10
21 - 50 dependencies 0-2 3-5 6-10 11-25 >25
50 - dependencies 0-5 6-10 11-20 21-50 >50

Installation

Copy the plugin (jar file) to $SONAR_INSTALL_DIR/extensions/plugins and restart SonarQube.

Plugin Configuration

The versions-maven-plugin will output a file named 'dependency-updates-report.xml' when asked to output XML. The mathan-dependency-updates-sonar-plugin reads an existing dependency updates XML report.

There is additional configuration available which enables to override the default mapping from available updates to SonarQube severity. It is also possible to include or exclude certain dependencies for the check. Reducing or raising the severity for dependencies can be done too.

Artifact pattern syntax

The filters defined are using a special artifact pattern syntax already known from Maven extended to allow a comma separated list of such patterns.

The pattern is defined like this: [groupId]:[artifactId]:[type]:[version]:[scope]:[classifier].

Each pattern segment is optional and supports full and partial * wildcards. An empty pattern segment is treated as an implicit wildcard. For example, org.apache.* would match all artifacts whose group id started with org.apache., and :::*-SNAPSHOT would match all snapshot artifacts.

Configuration properties

This plugin offers various configuration options which are explained in the following categories. The settings can be found under Administration > Configuration > General Settings > Dependency-Updates.

Appearance

By default 9 metrics will be reported. With the following configuration metrics for ratio, rating and missed patches/upgrades can be hidden. Changes to the setting in this category need a restart of SonarQube to take effect.

Property Default
Hide missed measures false
Hide rating measures false
Hide ratio mesasures false

Default Severity

For each kind of update for a dependency the default severity can be defined. This results in all issues for available updates of a kind to be created with this severity. All possible severities can be used as value. (INFO, MINOR, MAJOR, CRITICAL, BLOCKER)

Property Default
sonar.dependencyUpdates.updateIncremental Severity.MINOR
sonar.dependencyUpdates.updateMinor Severity.MAJOR
sonar.dependencyUpdates.updateMajor Severity.CRITICAL

Inclusions/ Exclusions

By default updates for all dependencies are reported. A whitelist filter and/or a blacklist filter can be used to include/exclude certain dependencies. These filter use the artifact pattern syntax described above. Some common use cases for the filter are

  • exclude SNAPSHOT dependencies (:::*-SNAPSHOT)
  • exclude dependencies with scope test (::::test)
  • include dependencies of own company only (e.g com.mycompany.*)
Property Default
sonar.dependencyUpdates.inclusions ::::: (include all)
sonar.dependencyUpdates.exclusions (none)

Overrides

In addition to global inclusion/exclusion filter and the option to define the default severity for the kind of updates, overrides can be defined for all severities. Using such a whitelist filter will report updates found for matching dependencies with the regarding severity. Some common use cases for the filter is

  • increase severity for security related dependencies
Property Default
sonar.dependencyUpdates.override.info (none)
sonar.dependencyUpdates.override.minor (none)
sonar.dependencyUpdates.override.major (none)
sonar.dependencyUpdates.override.critical (none)
sonar.dependencyUpdates.override.blocker (none)

Versions

versions-maven-plugin by default reports all versions available in the configured repositories. Especially some libraries are releasing non-standard alpha, beta, release candidate or milestone versions. In general such libraries should not be reported by this plugin. Therefore the following configuration property is excluding these versions by default. It is also possible to configure this for the versions-maven-plugin but then it has to be done for each project or global to maven.

Property Default
sonar.dependencyUpdates.versionExclusionRegex .*\[-_\\.\]\(alpha|Alpha|ALPHA|beta|Beta|BETA|rc|RC|milestone|M|EA\)\[-_\\.\]?\[0-9\]*

The second configuration in the Versions category is related to the sub versions reported for minor and major updated. versions-maven-plugin will report available patches for minor updates as discrete versions as it will also report available minors for major updates. As if a minor or major update is done, usually the latest patch/minor update is taken respectively. So the following configuration will exclude additional patches available for minor updates and additional minors available for major updates. It is enabled by default.

Property Default
sonar.dependencyUpdates.discreteMinorMajor true

Sample for a dependency with version 1.1.0

Reported by versions-maven-plugin Recognized (configuration is false) Recognized (configuration is true)
minor updates 1.2.0, 1.2.1, 1.2.2, 1.3.0 4 (1.2.0, 1.2.1, 1.2.2, 1.3.0) 2 (1.2.2, 1.3.0)
major updates 2.0.0, 2.1.0, 2.2.0, 3.0.0, 4.0.0 5 (2.0.0, 2.1.0, 2.2.0, 3.0.0, 4.0.0) 3 (2.2.0, 3.0.0, 4.0.0)

mathan-dependency-updates-sonar-plugin's People

Contributors

dependabot[bot] avatar pethers avatar reallyinsane avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

mathan-dependency-updates-sonar-plugin's Issues

Component can't be null, issue with multimodule project sonarqube 7.9.1

Caused by: java.lang.IllegalArgumentException: Component can't be null
at org.sonar.api.internal.google.common.base.Preconditions.checkArgument (Preconditions.java:122)
at org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation.on (DefaultIssueLocation.java:44)
at io.mathan.sonar.dependencyupdates.IssueSensor.addIssues (IssueSensor.java:83)
at io.mathan.sonar.dependencyupdates.IssueSensor.addIssues (IssueSensor.java:92)
at io.mathan.sonar.dependencyupdates.IssueSensor.execute (IssueSensor.java:118)
at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse (AbstractSensorWrapper.java:48)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute (ModuleSensorsExecutor.java:85)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1 (ModuleSensorsExecutor.java:59)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy (ModuleSensorsExecutor.java:77)
at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute (ModuleSensorsExecutor.java:59)
at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart (ModuleScanContainer.java:82)
at org.sonar.core.platform.ComponentContainer.startComponents (ComponentContainer.java:136)
at org.sonar.core.platform.ComponentContainer.execute (ComponentContainer.java:122)

ratio not used in calculation of ratings

static int calculateRating(double ratio, int total) {
    Range range = mapping.keySet().stream().filter(r -> r.contains(total)).findFirst().get();
    Map<Range<Integer>, Integer> ratings = mapping.get(range);
    return ratings.get(ratings.keySet().stream().filter(r -> r.contains(total)).findFirst().get());
  }

Do not correspond to documentation of "Maintenance rating"

Examples
https://www.hack23.com/sonar/component_measures?id=com.hack23.cia%3Acia-all&metric=metrios.patches.rating
https://www.hack23.com/sonar/component_measures?id=com.hack23.sonar%3Asonar-cloudformation-plugin&metric=metrios.patches.rating

Happy to help, will do some testing tomorrow.

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar

I compiled the source an integrate the jar in Sonar 7.9.1 Communityedition.
When I try to use the plugin with default settings, I got this:

[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar (default-cli) on project sonarqube-licensecheck-plugin: Component can't be null -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.6.0.1398:sonar (default-cli) on project sonarqube-licensecheck-plugin: Component can't be null at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:215) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288) at org.apache.maven.cli.MavenCli.main (MavenCli.java:192) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) Caused by: org.apache.maven.plugin.MojoExecutionException: Component can't be null at org.sonarsource.scanner.maven.bootstrap.ScannerBootstrapper.execute (ScannerBootstrapper.java:67) at org.sonarsource.scanner.maven.SonarQubeMojo.execute (SonarQubeMojo.java:104) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288) at org.apache.maven.cli.MavenCli.main (MavenCli.java:192) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) Caused by: java.lang.IllegalArgumentException: Component can't be null at org.sonar.api.internal.google.common.base.Preconditions.checkArgument (Preconditions.java:122) at org.sonar.api.batch.sensor.issue.internal.DefaultIssueLocation.on (DefaultIssueLocation.java:44) at io.mathan.sonar.dependencyupdates.IssueSensor.addIssues (IssueSensor.java:83) at io.mathan.sonar.dependencyupdates.IssueSensor.addIssues (IssueSensor.java:92) at io.mathan.sonar.dependencyupdates.IssueSensor.execute (IssueSensor.java:118) at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse (AbstractSensorWrapper.java:48) at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute (ModuleSensorsExecutor.java:85) at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1 (ModuleSensorsExecutor.java:59) at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy (ModuleSensorsExecutor.java:77) at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute (ModuleSensorsExecutor.java:59) at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart (ModuleScanContainer.java:82) at org.sonar.core.platform.ComponentContainer.startComponents (ComponentContainer.java:136) at org.sonar.core.platform.ComponentContainer.execute (ComponentContainer.java:122) at org.sonar.scanner.scan.ProjectScanContainer.scan (ProjectScanContainer.java:400) at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively (ProjectScanContainer.java:395) at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart (ProjectScanContainer.java:358) at org.sonar.core.platform.ComponentContainer.startComponents (ComponentContainer.java:136) at org.sonar.core.platform.ComponentContainer.execute (ComponentContainer.java:122) at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart (GlobalContainer.java:141) at org.sonar.core.platform.ComponentContainer.startComponents (ComponentContainer.java:136) at org.sonar.core.platform.ComponentContainer.execute (ComponentContainer.java:122) at org.sonar.batch.bootstrapper.Batch.doExecute (Batch.java:73) at org.sonar.batch.bootstrapper.Batch.execute (Batch.java:67) at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute (BatchIsolatedLauncher.java:46) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke (IsolatedLauncherProxy.java:60) at com.sun.proxy.$Proxy25.execute (Unknown Source) at org.sonarsource.scanner.api.EmbeddedScanner.doExecute (EmbeddedScanner.java:185) at org.sonarsource.scanner.api.EmbeddedScanner.execute (EmbeddedScanner.java:137) at org.sonarsource.scanner.maven.bootstrap.ScannerBootstrapper.execute (ScannerBootstrapper.java:65) at org.sonarsource.scanner.maven.SonarQubeMojo.execute (SonarQubeMojo.java:104) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo (DefaultBuildPluginManager.java:137) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:210) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:156) at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:148) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:117) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:81) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:56) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:305) at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:192) at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:105) at org.apache.maven.cli.MavenCli.execute (MavenCli.java:956) at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288) at org.apache.maven.cli.MavenCli.main (MavenCli.java:192) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke (Method.java:498) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:282) at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:225) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:406) at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:347) [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

here the XML
<DependencyUpdatesReport> <summary> <usingLastVersion>8</usingLastVersion> <nextVersionAlailable>0</nextVersionAlailable> <nextIncremetalAvailable>4</nextIncremetalAvailable> <nextMinorAvailable>1</nextMinorAvailable> <nextMajorAvailable>1</nextMajorAvailable> </summary> <dependencyManagements> </dependencyManagements> <dependencies> <dependency> <groupId>com.github.stefanbirkner</groupId> <artifactId>system-rules</artifactId> <scope>test</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>1.19.0</currentVersion> <status>no new available</status> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>1.4</currentVersion> <status>no new available</status> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>4.12</currentVersion> <nextVersion>4.13-beta-1</nextVersion> <incrementals> <incremental>4.13-beta-1</incremental> <incremental>4.13-beta-2</incremental> <incremental>4.13-beta-3</incremental> </incrementals> <status>incremental available</status> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>3.9</currentVersion> <status>no new available</status> </dependency> <dependency> <groupId>org.apache.maven</groupId> <artifactId>maven-model</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>3.6.0</currentVersion> <nextVersion>3.6.1</nextVersion> <incrementals> <incremental>3.6.1</incremental> </incrementals> <status>incremental available</status> </dependency> <dependency> <groupId>org.apache.maven.shared</groupId> <artifactId>maven-invoker</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>2.2</currentVersion> <nextVersion>3.0.0</nextVersion> <majors> <major>3.0.0</major> <major>3.0.1</major> </majors> <status>major available</status> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>1.1.4</currentVersion> <status>no new available</status> </dependency> <dependency> <groupId>org.hamcrest</groupId> <artifactId>hamcrest</artifactId> <scope>test</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>2.1</currentVersion> <status>no new available</status> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-all</artifactId> <scope>test</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>1.10.19</currentVersion> <nextVersion>2.0.0-beta</nextVersion> <minors> <minor>2.0.0-beta</minor> </minors> <majors> <major>2.0.1-beta</major> <major>2.0.2-beta</major> </majors> <status>minor available</status> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>1.7.28</currentVersion> <nextVersion>1.8.0-alpha0</nextVersion> <incrementals> <incremental>1.8.0-alpha0</incremental> <incremental>1.8.0-alpha1</incremental> <incremental>1.8.0-alpha2</incremental> <incremental>1.8.0-beta0</incremental> <incremental>1.8.0-beta1</incremental> <incremental>1.8.0-beta2</incremental> <incremental>1.8.0-beta4</incremental> </incrementals> <minors> <minor>2.0.0-alpha0</minor> </minors> <status>incremental available</status> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>1.7.28</currentVersion> <nextVersion>1.8.0-alpha0</nextVersion> <incrementals> <incremental>1.8.0-alpha0</incremental> <incremental>1.8.0-alpha1</incremental> <incremental>1.8.0-alpha2</incremental> <incremental>1.8.0-beta0</incremental> <incremental>1.8.0-beta1</incremental> <incremental>1.8.0-beta2</incremental> <incremental>1.8.0-beta4</incremental> </incrementals> <minors> <minor>2.0.0-alpha0</minor> </minors> <status>incremental available</status> </dependency> <dependency> <groupId>org.sonarsource.sonarqube</groupId> <artifactId>sonar-plugin-api</artifactId> <scope>provided</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>7.9.1</currentVersion> <status>no new available</status> </dependency> <dependency> <groupId>org.sonarsource.sonarqube</groupId> <artifactId>sonar-server</artifactId> <scope>provided</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>7.2.1</currentVersion> <status>no new available</status> </dependency> <dependency> <groupId>xpp3</groupId> <artifactId>xpp3</artifactId> <scope>compile</scope> <classifier>null</classifier> <type>jar</type> <currentVersion>1.1.4c</currentVersion> <status>no new available</status> </dependency> </dependencies> </DependencyUpdatesReport>

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.