Bump Apache Commons Lang to 3.8
[odlparent.git] / odlparent / pom.xml
index e7fa53ea009792334d2122363a1c82e6cf49b4e1..c30a62d13406f8ba3f65e90ccb28b199bb072631 100644 (file)
     <java.version.source>${maven.compiler.source}</java.version.source>
     <java.version.target>${maven.compiler.target}</java.version.target>
 
-    <!-- Maven plugin versions, in the 'canonical' format -->
-    <!-- Used in controller, didm, neutron, openflowplugin, persistence; see also affinity -->
-    <maven.bundle.version>3.3.0</maven.bundle.version>
-    <!-- Used in sxp -->
-    <maven.clean.plugin.version>2.6.1</maven.clean.plugin.version>
-    <!-- Used in controller, didm, l2switch, lacp, persistence; see also toolkit, tsdr, ttp -->
-    <maven.compile.plugin.version>3.7.0</maven.compile.plugin.version>
-    <!-- Used in controller, coretutorials, mdsal, snbi, yangtools -->
-    <maven.javadoc.version>3.0.0</maven.javadoc.version>
-    <!-- Used in snmp -->
-    <maven.plugin.version>3.5</maven.plugin.version>
-    <!-- Used in neutron, of-config, tsdr, yangtools -->
-    <!-- Later versions break tests in downstream projects -->
-    <maven.surefire.version>2.18.1</maven.surefire.version>
-
-    <!-- Maven plugin versions, in random formats -->
-    <!-- Used in aaa, alto, controller, didm, tsdr; see also affinity, snmp4sdn, toolkit, ttp -->
-    <bundle.plugin.version>${maven.bundle.version}</bundle.plugin.version>
-    <!-- TODO rename checkstyle.version to checkstyle.(maven.)plugin.version,
-         or just remove it, incl. all usages of it in a number of pom.xml; because normally,
-         as maven-checkstyle-plugin is in pluginManagement, this should not have to be repeated. -->
-    <!-- Used in alto, controller, lacp, netide, openflowjava, packetcable, snmp4sdn, ttp; see also affinity, opendove,
-         toolkit -->
-    <checkstyle.version>2.17</checkstyle.version>
-    <!-- Used in controller, packetcable -->
-    <odl.checkstyle.version>3.0.0-SNAPSHOT</odl.checkstyle.version>
-    <!-- Used in snmp4sdn; see also toolkit -->
-    <compiler.version>${maven.compile.plugin.version}</compiler.version>
-    <!-- Used in controller, l2switch, netide, openflowjava, openflowplugin, snbi, tsdr, ttp; see also toolkit -->
+    <!-- Used in openflowplugin -->
     <enforcer.version>3.0.0-M1</enforcer.version>
-    <!-- Used in affinity, controller, nemo, opendove, snmp4sdn -->
-    <enunciate.version>1.31</enunciate.version>
-    <!-- Used in affinity, coretutorials, netide -->
-    <exam.version>4.11.0</exam.version>
-    <!-- Used in affinity, controller, neutron, of-config; see also snmp4sdn -->
-    <failsafe.version>2.20.1</failsafe.version>
-    <!-- Used in controller, netvirt, neutron, of-config, ovsdb, persistence, snmp4sdn, vtn; see also usc -->
-    <jacoco.version>0.7.9</jacoco.version>
-    <!-- Used in aaa, controller, coretutorials, integration/distribution, l2switch, lacp, lispflowmapping, netide,
-         nic, openflowplugin, ovsdb, persistence, sfc, snbi, snmp4sdn?, sxp, topoprocessing, unimgr, vtn -->
-    <karaf.version>4.1.4</karaf.version>
-    <karaf.plugin.version>4.1.4</karaf.plugin.version>
-    <!-- Used in lispflowmapping, snmp4sdn, vtn -->
+    <!-- Used in controller, infrautils, openflowplugin -->
+    <exam.version>4.12.0</exam.version>
+    <!-- Used in neutron, ovsdb -->
+    <jacoco.version>0.8.1</jacoco.version>
+    <!-- Used in controller, genius, infrautils, netconf, netvirt, ovsdb, serviceutils -->
+    <karaf.version>4.2.0</karaf.version>
+    <!-- Used in bgpcep, lispflowmapping -->
     <projectinfo>2.8.1</projectinfo>
-    <!-- Used in of-config; see also snmp4sdn -->
-    <propertymavenplugin.version>1.0.0</propertymavenplugin.version>
-    <!-- Used in topoprocessing; see also defense4all, snmp4sdn, toolkit -->
-    <releaseplugin.version>2.5.3</releaseplugin.version>
 
     <!-- Supporting Libraries -->
-    <!-- Used by controller -->
-    <bouncycastle.version>1.58</bouncycastle.version>
-
-    <!-- Used by controller, snbi; see also centinel, dlux, toolkit -->
-    <osgi.core.version>5.0.0</osgi.core.version>
-
-    <akka.version>2.5.9</akka.version>
-    <leveldb.version>0.7</leveldb.version>
+    <!-- Only used internally -->
+    <bouncycastle.version>1.60</bouncycastle.version>
 
     <!-- Default Sonar configuration -->
     <sonar-jacoco-listeners.version>3.8</sonar-jacoco-listeners.version>
         <groupId>com.puppycrawl.tools</groupId>
         <artifactId>checkstyle</artifactId>
         <!-- This should match the plugin management on maven-checkstyle-plugin below -->
-        <version>8.4</version>
+        <version>8.12</version>
       </dependency>
 
       <!-- Testing Dependencies -->
       <dependency>
         <groupId>junit</groupId>
         <artifactId>junit</artifactId>
-        <version>4.11</version>
-        <scope>test</scope>
-      </dependency>
-      <dependency>
-        <groupId>junit</groupId>
-        <artifactId>junit-dep</artifactId>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
         <version>4.11</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.mockito</groupId>
         <artifactId>mockito-core</artifactId>
-        <version>1.10.19</version>
+        <version>2.20.1</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.hamcrest</groupId>
         <artifactId>hamcrest-core</artifactId>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
         <version>1.3</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>com.google.truth</groupId>
         <artifactId>truth</artifactId>
-        <version>0.36</version>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
+        <version>0.42</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>com.google.truth.extensions</groupId>
         <artifactId>truth-java8-extension</artifactId>
-        <version>0.36</version>
+        <version>0.42</version>
         <scope>test</scope>
       </dependency>
       <dependency>
       <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-api-mockito</artifactId>
-        <version>1.6.4</version>
+        <version>1.7.4</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-api-support</artifactId>
-        <version>1.6.4</version>
+        <version>1.7.4</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-core</artifactId>
-        <version>1.6.4</version>
+        <version>1.7.4</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-module-junit4</artifactId>
-        <version>1.6.4</version>
+        <version>1.7.4</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.powermock</groupId>
         <artifactId>powermock-reflect</artifactId>
-        <version>1.6.4</version>
+        <version>1.7.4</version>
         <scope>test</scope>
       </dependency>
 
         <!-- Generates immutable implementations, builders, the works -->
         <groupId>org.immutables</groupId>
         <artifactId>value</artifactId>
-        <version>2.5.6</version>
+        <version>2.6.3</version>
         <!-- Must be provided; scope=test here breaks APT in Eclipse :( -->
         <scope>provided</scope>
       </dependency>
         <!-- Generates META-INF/services entries for ServiceLoader -->
         <groupId>org.kohsuke.metainf-services</groupId>
         <artifactId>metainf-services</artifactId>
-        <version>1.7</version>
+        <version>1.8</version>
         <optional>true</optional>
         <scope>provided</scope>
       </dependency>
       <dependency>
         <groupId>com.google.guava</groupId>
         <artifactId>guava</artifactId>
-        <version>23.6-jre</version>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
+        <version>25.1-jre</version>
         <exclusions>
           <exclusion>
             <groupId>com.google.code.findbugs</groupId>
       <dependency>
         <groupId>com.google.guava</groupId>
         <artifactId>guava-testlib</artifactId>
-        <version>23.6-jre</version>
+        <version>25.1-jre</version>
         <scope>test</scope>
         <exclusions>
           <exclusion>
         <artifactId>mycila-guice-jsr250</artifactId>
         <!-- Make sure this version is in sync with the guice one below -->
         <version>4.0.rc1</version>
-        <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>com.google.inject</groupId>
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-lang3</artifactId>
-        <version>3.6</version>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
+        <version>3.8</version>
       </dependency>
       <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-text</artifactId>
-        <version>1.1</version>
+        <version>1.4</version>
       </dependency>
       <dependency>
         <groupId>commons-lang</groupId>
         <artifactId>commons-lang</artifactId>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
         <version>2.6</version>
       </dependency>
       <dependency>
         <artifactId>jersey-client</artifactId>
         <version>1.19.4</version>
       </dependency>
-      <dependency>
-        <groupId>org.opendaylight.controller.thirdparty</groupId>
-        <artifactId>com.sun.jersey.jersey-servlet</artifactId>
-        <version>1.17</version>
-      </dependency>
       <dependency>
         <groupId>org.apache.shiro</groupId>
         <artifactId>shiro-core</artifactId>
       <dependency>
         <groupId>com.fasterxml.jackson</groupId>
         <artifactId>jackson-bom</artifactId>
-        <version>2.8.9</version>
+        <version>2.9.6</version>
         <scope>import</scope>
         <type>pom</type>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jdt</groupId>
         <artifactId>org.eclipse.jdt.annotation</artifactId>
-        <version>2.1.0</version>
+        <version>2.2.0</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
         <groupId>com.google.code.gson</groupId>
         <artifactId>gson</artifactId>
-        <version>2.8.2</version>
+        <version>2.8.5</version>
       </dependency>
       <dependency>
         <groupId>commons-fileupload</groupId>
         <groupId>io.netty</groupId>
         <artifactId>netty-all</artifactId>
         <!-- If these are updated, the version in features.xml needs to be changed too -->
-        <version>4.1.20.Final</version>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
+        <version>4.1.28.Final</version>
       </dependency>
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-buffer</artifactId>
-        <version>4.1.20.Final</version>
+        <version>4.1.28.Final</version>
       </dependency>
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-codec</artifactId>
-        <version>4.1.20.Final</version>
+        <version>4.1.28.Final</version>
       </dependency>
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-codec-http</artifactId>
-        <version>4.1.20.Final</version>
+        <version>4.1.28.Final</version>
       </dependency>
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-common</artifactId>
-        <version>4.1.20.Final</version>
+        <version>4.1.28.Final</version>
       </dependency>
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-handler</artifactId>
-        <version>4.1.20.Final</version>
+        <version>4.1.28.Final</version>
       </dependency>
       <dependency>
         <groupId>io.netty</groupId>
         <artifactId>netty-transport</artifactId>
-        <version>4.1.20.Final</version>
+        <version>4.1.28.Final</version>
       </dependency>
       <!-- Here we need to define all available native epoll implementations; we can't limit ourselves to the build
       platform and we can't require the build platform to have an implementation (e.g. OS X) -->
         <groupId>io.netty</groupId>
         <artifactId>netty-transport-native-epoll</artifactId>
         <classifier>linux-x86_64</classifier>
-        <version>4.1.20.Final</version>
+        <version>4.1.28.Final</version>
       </dependency>
       <dependency>
         <groupId>javax.ws.rs</groupId>
       <dependency>
         <groupId>org.codehaus.enunciate</groupId>
         <artifactId>enunciate-core-annotations</artifactId>
-        <version>${enunciate.version}</version>
+        <!-- This must be aligned with the version of maven-enunciate-plugin specified below -->
+        <version>1.31</version>
+        <exclusions>
+          <exclusion>
+            <!-- JSR 250 API has 6 very old versions of javax.annotation @PreDestroy & Co.
+                 which are in core rt.jar since Java 6; it also has Java EE @DataSourceDefinition
+                 and @RunAs and @PermitAll & Co. which we do not require
+                 (or at least not from jsr250-api via enunciate) -->
+            <groupId>javax.annotation</groupId>
+            <artifactId>jsr250-api</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>com.webcohesion.enunciate</groupId>
         <artifactId>enunciate-core-annotations</artifactId>
-        <version>2.10.1</version>
+        <version>2.11.1</version>
+        <exclusions>
+          <exclusion>
+            <!-- see above -->
+            <groupId>javax.annotation</groupId>
+            <artifactId>jsr250-api</artifactId>
+          </exclusion>
+        </exclusions>
       </dependency>
       <dependency>
         <groupId>org.codehaus.jettison</groupId>
         <artifactId>jettison</artifactId>
-        <version>1.3.8</version>
+        <version>1.4.0</version>
       </dependency>
       <!-- To upgrade org.eclipse.persistence dependencies to 2.6.0+, we need to ensure all downstreams consumers
          pull in javax.validation first:
       <dependency>
         <groupId>org.eclipse.persistence</groupId>
         <artifactId>org.eclipse.persistence.antlr</artifactId>
-        <version>2.6.2</version>
+        <version>2.7.1</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.persistence</groupId>
         <artifactId>org.eclipse.persistence.core</artifactId>
-        <version>2.6.2</version>
+        <version>2.7.1</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.persistence</groupId>
         <artifactId>org.eclipse.persistence.moxy</artifactId>
-        <version>2.6.2</version>
+        <version>2.7.1</version>
       </dependency>
       <dependency>
         <groupId>javax.validation</groupId>
       <dependency>
         <groupId>org.javassist</groupId>
         <artifactId>javassist</artifactId>
-        <version>3.21.0-GA</version>
+        <version>3.23.1-GA</version>
       </dependency>
       <dependency>
         <groupId>org.jboss.spec.javax.transaction</groupId>
       <dependency>
         <groupId>org.jolokia</groupId>
         <artifactId>jolokia-osgi</artifactId>
-        <version>1.3.7</version>
+        <version>1.6.0</version>
       </dependency>
       <dependency>
         <groupId>org.json</groupId>
       <dependency>
         <groupId>org.osgi</groupId>
         <artifactId>org.osgi.compendium</artifactId>
-        <version>${osgi.core.version}</version>
+        <version>5.0.0</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
         <groupId>org.osgi</groupId>
         <artifactId>org.osgi.core</artifactId>
-        <version>${osgi.core.version}</version>
+        <version>5.0.0</version>
         <scope>provided</scope>
       </dependency>
       <dependency>
       </dependency>
       <dependency>
         <groupId>org.ow2.asm</groupId>
-        <artifactId>asm-all</artifactId>
-        <version>5.1</version>
+        <artifactId>asm</artifactId>
+        <version>6.0</version>
       </dependency>
 
       <!-- Configuration library -->
       <dependency>
         <groupId>com.typesafe</groupId>
         <artifactId>ssl-config-core_2.12</artifactId>
-        <version>0.2.2</version>
+        <version>0.2.4</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-actor_2.12</artifactId>
-        <version>${akka.version}</version>
+        <!-- When bumping this version, remember to also change the JavaDoc link in odlparent-lite -->
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-cluster_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-osgi_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-persistence_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-persistence-tck_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-protobuf_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-remote_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-slf4j_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-stream_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
       </dependency>
       <dependency>
         <groupId>com.typesafe.akka</groupId>
         <artifactId>akka-testkit_2.12</artifactId>
-        <version>${akka.version}</version>
+        <version>2.5.14</version>
         <scope>test</scope>
       </dependency>
       <dependency>
       <dependency>
         <groupId>org.scala-lang.modules</groupId>
         <artifactId>scala-parser-combinators_2.12</artifactId>
-        <version>1.0.6</version>
-      </dependency>
-      <dependency>
-        <groupId>org.iq80.leveldb</groupId>
-        <artifactId>leveldb</artifactId>
-        <version>${leveldb.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.fusesource.leveldbjni</groupId>
-        <artifactId>leveldbjni-all</artifactId>
-        <version>1.8-odl</version>
+        <version>1.1.1</version>
       </dependency>
       <dependency>
         <groupId>org.uncommons.maths</groupId>
       <dependency>
         <groupId>org.agrona</groupId>
         <artifactId>agrona</artifactId>
-        <version>0.9.12</version>
+        <version>0.9.21</version>
       </dependency>
       <dependency>
         <groupId>io.aeron</groupId>
         <artifactId>aeron-client</artifactId>
-        <version>1.7.0</version>
+        <version>1.9.3</version>
       </dependency>
       <dependency>
         <groupId>io.aeron</groupId>
         <artifactId>aeron-driver</artifactId>
-        <version>1.7.0</version>
+        <version>1.9.3</version>
       </dependency>
 
       <!-- Scala -->
       <dependency>
         <groupId>org.scala-lang</groupId>
         <artifactId>scala-library</artifactId>
-        <version>2.12.4</version>
+        <version>2.12.6</version>
       </dependency>
       <dependency>
         <groupId>org.scala-lang</groupId>
         <artifactId>scala-reflect</artifactId>
-        <version>2.12.4</version>
+        <version>2.12.6</version>
       </dependency>
 
       <!-- LMAX Disruptor -->
       <dependency>
         <groupId>com.lmax</groupId>
         <artifactId>disruptor</artifactId>
-        <version>3.3.7</version>
+        <version>3.4.1</version>
       </dependency>
 
       <!-- Add Pax Exam -->
       <dependency>
         <groupId>org.ops4j.pax.url</groupId>
         <artifactId>pax-url-link</artifactId>
-        <version>2.5.3</version>
+        <version>2.5.4</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.ops4j.pax.url</groupId>
         <artifactId>pax-url-aether</artifactId>
-        <version>2.5.3</version>
+        <version>2.5.4</version>
         <scope>test</scope>
       </dependency>
       <dependency>
         <groupId>org.ops4j.pax.url</groupId>
         <artifactId>pax-url-wrap</artifactId>
-        <version>2.5.3</version>
+        <version>2.5.4</version>
       </dependency>
 
       <dependency>
         <version>1.2.1</version>
         <scope>test</scope>
       </dependency>
+
+      <dependency>
+        <groupId>org.xmlunit</groupId>
+        <artifactId>xmlunit-core</artifactId>
+        <version>2.6.0</version>
+        <scope>test</scope>
+      </dependency>
+      <dependency>
+        <groupId>org.xmlunit</groupId>
+        <artifactId>xmlunit-matchers</artifactId>
+        <version>2.6.0</version>
+        <scope>test</scope>
+      </dependency>
+      <!-- FIXME: remove this once we have migrated over -->
       <dependency>
-        <groupId>xmlunit</groupId>
-        <artifactId>xmlunit</artifactId>
-        <version>1.6</version>
+        <groupId>org.xmlunit</groupId>
+        <artifactId>xmlunit-legacy</artifactId>
+        <version>2.6.0</version>
         <scope>test</scope>
       </dependency>
 
       <dependency>
           <groupId>org.eclipse.xtend</groupId>
           <artifactId>org.eclipse.xtend.lib</artifactId>
-          <version>2.13.0</version>
+          <version>2.14.0</version>
       </dependency>
       <dependency>
           <groupId>org.eclipse.xtend</groupId>
           <artifactId>org.eclipse.xtend.lib.macro</artifactId>
-          <version>2.13.0</version>
+          <version>2.14.0</version>
       </dependency>
       <dependency>
           <groupId>org.eclipse.xtext</groupId>
           <artifactId>org.eclipse.xtext.xbase.lib</artifactId>
-          <version>2.13.0</version>
+          <version>2.14.0</version>
       </dependency>
 
       <!-- Annotations -->
         <version>${karaf.version}</version>
       </dependency>
 
+      <!-- ThreeTen-Extra, date/time complements -->
+      <dependency>
+        <groupId>org.threeten</groupId>
+        <artifactId>threeten-extra</artifactId>
+        <version>1.3.2</version>
+      </dependency>
+
       <!-- When updating this version, consider antl4-maven-plugin below -->
       <dependency>
         <groupId>org.antlr</groupId>
         <artifactId>antlr4-runtime</artifactId>
-        <version>4.7</version>
+        <version>4.7.1</version>
       </dependency>
       <!-- Aries' Blueprint version should be kept in sync to the version actually
            used by our ${karaf[4].version} ... please bump this when increasing that.
       <dependency>
         <groupId>org.apache.aries.blueprint</groupId>
         <artifactId>org.apache.aries.blueprint.core</artifactId>
-        <version>1.7.1</version>
+        <version>1.9.0</version>
       </dependency>
 
     </dependencies>
   </dependencyManagement>
 
   <dependencies>
-    <!-- Karaf provides SL4FJ encapsulation -->
+    <!--
+         We expect slf4j-api to be provided by the platform.
+         Karaf provides it, other containers need to provide it themselves.
+    -->
     <dependency>
       <groupId>org.slf4j</groupId>
       <artifactId>slf4j-api</artifactId>
       <scope>provided</scope>
     </dependency>
 
-    <dependency>
-      <groupId>org.slf4j</groupId>
-      <artifactId>slf4j-simple</artifactId>
-      <scope>test</scope>
-    </dependency>
-
-    <!-- Enable useful code quality annotations everywhere -->
+    <!--
+          Enable useful code quality annotations everywhere. Since these annotations
+          are not required at runtime.
+    -->
     <dependency>
       <groupId>com.google.code.findbugs</groupId>
       <artifactId>annotations</artifactId>
       <artifactId>org.eclipse.jdt.annotation</artifactId>
       <scope>provided</scope>
     </dependency>
+
+    <!--
+          Testing output should be routed through slf4j-simple.
+    -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
+
+    <!--
+          Unit tests can use JUnit + Mockito + Hamcrest by default.
+    -->
+    <dependency>
+      <groupId>junit</groupId>
+      <artifactId>junit</artifactId>
+      <scope>test</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-core</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
         </plugin>
         <plugin>
           <artifactId>maven-checkstyle-plugin</artifactId>
-          <version>${checkstyle.version}</version>
+          <version>3.0.0</version>
           <dependencies>
             <dependency>
               <groupId>com.puppycrawl.tools</groupId>
               <artifactId>checkstyle</artifactId>
               <!-- This should match the dependency management on com.puppycrawl.tools:checkstyle above -->
-              <version>8.4</version>
+              <version>8.12</version>
             </dependency>
             <dependency>
               <groupId>org.opendaylight.odlparent</groupId>
             <dependency>
               <groupId>com.github.sevntu-checkstyle</groupId>
               <artifactId>sevntu-checkstyle-maven-plugin</artifactId>
-              <version>1.24.2</version>
+              <version>1.32.0</version>
             </dependency>
           </dependencies>
           <configuration>
             <configLocation>odl_checks.xml</configLocation>
             <suppressionsLocation>checkstyle-suppressions.xml</suppressionsLocation>
-            <!-- <sourceDirectory> is needed so that checkstyle ignores the
+            <!-- <sourceDirectories> are needed so that checkstyle ignores the
                  generated sources directory -->
-            <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
+            <sourceDirectories>
+              <directory>${project.build.sourceDirectory}</directory>
+            </sourceDirectories>
             <includeResources>true</includeResources>
             <includeTestSourceDirectory>true</includeTestSourceDirectory>
             <includeTestResources>true</includeTestResources>
                 <includeResources>false</includeResources>
                 <includeTestSourceDirectory>true</includeTestSourceDirectory>
                 <includeTestResources>false</includeTestResources>
-                <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
+                <sourceDirectories>
+                  <directory>${project.build.sourceDirectory}</directory>
+                </sourceDirectories>
                 <excludes>
                   org/opendaylight/yang/gen/**,
                   **/protobuff/messages/**,
         <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-pmd-plugin</artifactId>
-          <version>3.8</version>
+          <version>3.10.0</version>
           <executions>
             <execution>
               <id>cpd</id>
         </plugin>
         <plugin>
           <artifactId>maven-compiler-plugin</artifactId>
-          <version>${maven.compile.plugin.version}</version>
+          <version>3.7.0</version>
           <configuration>
             <source>1.8</source>
             <target>1.8</target>
         </plugin>
         <plugin>
           <artifactId>maven-failsafe-plugin</artifactId>
-          <version>${failsafe.version}</version>
+          <version>2.20.1</version>
         </plugin>
         <plugin>
           <artifactId>maven-invoker-plugin</artifactId>
 
         <plugin>
           <artifactId>maven-plugin-plugin</artifactId>
-          <version>${maven.plugin.version}</version>
+          <version>3.5</version>
         </plugin>
 
         <plugin>
         </plugin>
         <plugin>
           <artifactId>maven-surefire-plugin</artifactId>
-          <version>${maven.surefire.version}</version>
+          <version>2.18.1</version>
           <configuration>
             <redirectTestOutputToFile>true</redirectTestOutputToFile>
             <trimStackTrace>false</trimStackTrace>
           <!-- Support Blueprint XML construction using annotations -->
           <groupId>org.apache.aries.blueprint</groupId>
           <artifactId>blueprint-maven-plugin</artifactId>
-          <version>1.4.0</version>
+          <version>1.10.0</version>
           <configuration>
             <scanPaths>
               <scanPath>org.opendaylight</scanPath>
             </scanPaths>
+            <generatedDir>org/opendaylight/blueprint/</generatedDir>
           </configuration>
-          <dependencies>
-            <dependency>
-              <!-- See https://issues.apache.org/jira/browse/ARIES-1596 -->
-              <!-- This shouldn't be necessary with plugin version 1.5.0 -->
-              <groupId>org.apache.xbean</groupId>
-              <artifactId>xbean-finder-shaded</artifactId>
-              <version>4.5</version>
-            </dependency>
-          </dependencies>
           <executions>
             <execution>
               <goals>
         <plugin>
           <groupId>org.apache.felix</groupId>
           <artifactId>maven-bundle-plugin</artifactId>
-          <version>${maven.bundle.version}</version>
+          <version>3.5.0</version>
           <extensions>true</extensions>
           <configuration>
             <instructions>
         <plugin>
           <groupId>org.codehaus.enunciate</groupId>
           <artifactId>maven-enunciate-plugin</artifactId>
-          <version>${enunciate.version}</version>
+          <!-- This must be aligned with the version of enunciate-core-annotations specified above -->
+          <version>1.31</version>
         </plugin>
         <plugin>
           <groupId>org.codehaus.groovy.maven</groupId>
         <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>build-helper-maven-plugin</artifactId>
-          <version>1.12</version>
+          <version>3.0.0</version>
         </plugin>
         <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>findbugs-maven-plugin</artifactId>
-          <version>3.0.4</version>
+          <version>3.0.5</version>
           <dependencies>
             <dependency>
               <groupId>org.opendaylight.odlparent</groupId>
             </dependency>
           </dependencies>
           <configuration>
+            <plugins>
+              <plugin>
+                <groupId>jp.skypencil.findbugs.slf4j</groupId>
+                <artifactId>bug-pattern</artifactId>
+                <!-- NOTE: This version SHOULD be kept in sync with the same version in the new spotbugs-maven-plugin below,
+                     but 1.4.1 broke compability with (the version we use of) FindBugs, so must keep this at 1.4.0. -->
+                <version>1.4.0</version>
+              </plugin>
+            </plugins>
             <!--
               Enables analysis which takes more memory but finds more bugs.
               If you run out of memory, changes the value of the effort element
             <xmlOutput>true</xmlOutput>
             <!-- Configures the directory in which the XML report is created -->
             <findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory>
-            </configuration>
-            <executions>
+          </configuration>
+          <executions>
               <!--
                 Ensures that FindBugs inspects source code when project is compiled.
               -->
                   <goal>check</goal>
                 </goals>
               </execution>
-            </executions>
+          </executions>
         </plugin>
         <plugin>
           <groupId>com.github.spotbugs</groupId>
           <artifactId>spotbugs-maven-plugin</artifactId>
-          <version>3.1.1</version>
+          <version>3.1.6</version>
           <dependencies>
             <dependency>
               <groupId>com.github.spotbugs</groupId>
               <artifactId>spotbugs</artifactId>
-              <version>3.1.1</version>
+              <version>3.1.6</version>
             </dependency>
             <dependency>
               <groupId>org.opendaylight.odlparent</groupId>
-              <artifactId>findbugs</artifactId>
+              <artifactId>spotbugs</artifactId>
               <version>4.0.0-SNAPSHOT</version>
             </dependency>
           </dependencies>
           <configuration>
+            <plugins>
+              <plugin>
+                <groupId>jp.skypencil.findbugs.slf4j</groupId>
+                <artifactId>bug-pattern</artifactId>
+                <!-- NOTE: This version MUST be kept in sync with the same version in the old findbugs-maven-plugin above, if possible -->
+                <version>1.4.1</version>
+              </plugin>
+            </plugins>
             <!--
               Enables analysis which takes more memory but finds more bugs.
               If you run out of memory, changes the value of the effort element
             <!-- Build doesn't fail if problems are found -->
             <failOnError>false</failOnError>
             <!-- References the excluded rules -->
-            <excludeFilterFile>findbugs-exclude.xml</excludeFilterFile>
+            <excludeFilterFile>spotbugs-exclude.xml</excludeFilterFile>
             <!-- Produces XML report -->
             <xmlOutput>true</xmlOutput>
             <!-- Configures the directory in which the XML report is created -->
-            <findbugsXmlOutputDirectory>${project.build.directory}/findbugs</findbugsXmlOutputDirectory>
+            <findbugsXmlOutputDirectory>${project.build.directory}/spotbugs</findbugsXmlOutputDirectory>
           </configuration>
           <executions>
             <!--
         <plugin>
           <groupId>org.codehaus.mojo</groupId>
           <artifactId>properties-maven-plugin</artifactId>
-          <version>${propertymavenplugin.version}</version>
+          <version>1.0.0</version>
         </plugin>
         <plugin>
           <groupId>org.eclipse.xtend</groupId>
           <artifactId>xtend-maven-plugin</artifactId>
           <!-- NOTE: This version MUST be kept in sync with the Xtend version in <dependencyManagement> -->
-          <version>2.13.0</version>
+          <version>2.14.0</version>
           <executions>
             <execution>
               <goals>
               </configuration>
             </execution>
           </executions>
+
+          <!-- This is needed because upstream got broken by their inconsistency: pulling in old core,
+               but using ranges for other components. No wonder it blew up. -->
+          <dependencies>
+            <dependency>
+              <groupId>org.eclipse.platform</groupId>
+              <artifactId>org.eclipse.equinox.common</artifactId>
+              <version>3.10.0</version>
+            </dependency>
+          </dependencies>
         </plugin>
         <plugin>
           <groupId>org.eclipse.m2e</groupId>
         <plugin>
           <groupId>org.antlr</groupId>
           <artifactId>antlr4-maven-plugin</artifactId>
-          <version>4.7</version>
+          <version>4.7.1</version>
         </plugin>
       </plugins>
     </pluginManagement>
       <plugin>
         <groupId>org.basepom.maven</groupId>
         <artifactId>duplicate-finder-maven-plugin</artifactId>
-        <version>1.2.1</version>
+        <version>1.3.0</version>
         <executions>
           <execution>
             <id>find-duplicate-classpath-entries</id>
                  we use resources not dependencies (see https://github.com/basepom/duplicate-finder-maven-plugin/wiki/Classpath%20Exceptions)
                  also ignore: -->
             <ignoredResourcePatterns>
-              <ignoredResourcePattern>org/opendaylight/blueprint/autowire.xml$</ignoredResourcePattern>
+              <ignoredResourcePattern>org/opendaylight/blueprint/.*\.xml$</ignoredResourcePattern>
               <ignoredResourcePattern>OSGI-OPT/bnd.bnd$</ignoredResourcePattern>
+              <ignoredResourcePattern>WEB-INF/web.xml</ignoredResourcePattern>
               <ignoredResourcePattern>README.*$</ignoredResourcePattern>
               <ignoredResourcePattern>.*\.html$</ignoredResourcePattern>
               <ignoredResourcePattern>reference.conf</ignoredResourcePattern>
            </dependency>
          </dependencies>
       </plugin>
-
-      <!-- Blueprint dependency injection -->
-      <!-- Remove when upgrading to plugin 1.5.0, and use
-           <configuration><generatedDir>org/opendaylight/blueprint/</...></...>
-           See https://issues.apache.org/jira/browse/ARIES-1597
-           BUT beware that the directory is now conditional... -->
-      <plugin>
-        <artifactId>maven-antrun-plugin</artifactId>
-        <executions>
-          <!-- This should only run once, in the process-classes phase; but we need it to run after
-               process-classes in child projects. Attaching to process-test-classes and prepare-package
-               ensures that the file will be moved whether tests are skipped or not. -->
-          <execution>
-            <id>move-autowire-test</id>
-            <phase>process-test-classes</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
-                <if>
-                  <available file="${project.basedir}/src/main/resources/org/opendaylight/blueprint" type="dir"/>
-                  <then>
-                    <echo>Moving autowire.xml to org/opendaylight/blueprint</echo>
-                    <move file="${project.build.directory}/generated-resources/OSGI-INF/blueprint/autowire.xml"
-                          todir="${project.build.directory}/generated-resources/org/opendaylight/blueprint"
-                          failonerror="false" quiet="true" />
-                  </then>
-                  <else>
-                    <echo>NOT moving autowire.xml (to org/opendaylight/blueprint)</echo>
-                  </else>
-                </if>
-              </target>
-            </configuration>
-          </execution>
-          <execution>
-            <id>move-autowire-package</id>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>run</goal>
-            </goals>
-            <configuration>
-              <target>
-                <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>
-                <if>
-                  <available file="${project.basedir}/src/main/resources/org/opendaylight/blueprint" type="dir"/>
-                  <then>
-                    <echo>Moving autowire.xml to org/opendaylight/blueprint</echo>
-                    <move file="${project.build.directory}/generated-resources/OSGI-INF/blueprint/autowire.xml"
-                          todir="${project.build.directory}/generated-resources/org/opendaylight/blueprint"
-                          failonerror="false" quiet="true" />
-                  </then>
-                  <else>
-                    <echo>NOT moving autowire.xml (to org/opendaylight/blueprint)</echo>
-                  </else>
-                </if>
-              </target>
-            </configuration>
-          </execution>
-        </executions>
-        <dependencies>
-          <dependency>
-            <groupId>ant-contrib</groupId>
-            <artifactId>ant-contrib</artifactId>
-            <version>1.0b3</version>
-            <exclusions>
-              <exclusion>
-                <groupId>ant</groupId>
-                <artifactId>ant</artifactId>
-              </exclusion>
-            </exclusions>
-          </dependency>
-          <dependency>
-            <groupId>org.apache.ant</groupId>
-            <artifactId>ant-nodeps</artifactId>
-            <version>1.8.1</version>
-          </dependency>
-        </dependencies>
-      </plugin>
     </plugins>
   </build>
 
     <plugins>
       <plugin>
         <artifactId>maven-checkstyle-plugin</artifactId>
-        <version>${checkstyle.version}</version>
+        <version>3.0.0</version>
       </plugin>
 
       <!-- FIXME: activate this