diff --git a/.buckconfig b/.buckconfig
deleted file mode 100644
index 3c88483..0000000
--- a/.buckconfig
+++ /dev/null
@@ -1,23 +0,0 @@
-[buildfile]
-  includes = //buck-tools/default.defs
-
-[plugins]
-  directory = //bin/plugins
-
-[java]
-  source_level = 8
-  target_level = 8
-
-[alias]
-    onos = //tools/package:onos-package
-    onos-local = //tools/package:onos-run
-
-[download]
-  in_build = true
-
-[maven_repositories]
-  central = https://repo1.maven.org/maven2
-
-[project]
-  ide = intellij
-  ignore = .git, bazel-bin, bazel-genfiles, bazel-onos-next, bazel-out, bazel-testlogs
diff --git a/.dockerignore b/.dockerignore
index 05151e2..bd28f8b 100644
--- a/.dockerignore
+++ b/.dockerignore
@@ -5,11 +5,6 @@
 **/.idea
 .javacp*
 
-.buckd
-buck-out
-bucklets/plugins
-bin
-
 web/gui/src/main/webapp/tests/node_modules
 web/gui/src/test/_karma/node_modules
 web/gui/src/main/webapp/node_modules
diff --git a/.gitignore b/.gitignore
index eef0a5e..da1e74c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,16 +13,10 @@
 dependency-reduced-pom.xml
 .idea
 *.DS_Store
-.buckd
-buck-out
-.buckconfig.local
-.buckjavaargs*
-bucklets/plugins/
 .watchmanconfig
 .vscode
 *.fxs
 
-/bin/
 lib/yang
 /tools/gui/bin
 /tools/gui/node_modules
diff --git a/BUCK b/BUCK
deleted file mode 100644
index 9b02eb6..0000000
--- a/BUCK
+++ /dev/null
@@ -1,75 +0,0 @@
-java_library(
-    name = 'core',
-    visibility = ['PUBLIC'],
-    deps = CORE,
-)
-
-java_library(
-    name = 'apps',
-    visibility = ['PUBLIC'],
-    deps = APPS + APP_JARS,
-)
-
-java_library(
-    name = 'onos',
-    visibility = ['PUBLIC'],
-    deps = [ ':core', ':apps' ]
-)
-
-INSTALL = [
-    '//utils/misc:onlab-misc-install',
-    '//utils/osgi:onlab-osgi-install',
-    '//utils/rest:onlab-rest-install',
-
-    '//core/api:onos-api-install',
-    '//incubator/api:onos-incubator-api-install',
-
-    '//core/net:onos-core-net-install',
-    '//core/common:onos-core-common-install',
-    '//core/store/dist:onos-core-dist-install',
-    '//core/store/primitives:onos-core-primitives-install',
-    '//core/store/persistence:onos-core-persistence-install',
-    '//core/store/serializers:onos-core-serializers-install',
-
-    '//incubator/net:onos-incubator-net-install',
-    '//incubator/store:onos-incubator-store-install',
-    '//incubator/rpc:onos-incubator-rpc-install',
-
-    '//core/security:onos-security-install',
-
-    '//web/api:onos-rest-install',
-    '//web/gui:onos-gui-install',
-    '//cli:onos-cli-install',
-]
-java_library(
-    name = 'install',
-    visibility = ['PUBLIC'],
-    deps = INSTALL
-)
-
-tar_file(
-    name = 'onos-test',
-    root = 'onos-test-%s' % ONOS_VERSION,
-    srcs = glob(['tools/test/**/*']) + [
-               'tools/dev/bash_profile',
-               'tools/dev/bin/onos-create-app',
-               'tools/build/envDefaults'
-           ],
-    other_tars = [ '//tools/package:onos-package-runtime' ],
-)
-
-tar_file(
-    name = 'onos-admin',
-    root = 'onos-admin-%s' % ONOS_VERSION,
-    srcs = [
-        'tools/dev/bin/onos-create-app',
-        'tools/test/bin/onos',
-    ],
-    other_tars = [ '//tools/package:onos-package-runtime' ],
-    flat = True,
-)
-
-
-
-
-
diff --git a/Jenkinsfile b/Jenkinsfile
deleted file mode 100644
index 11b889a..0000000
--- a/Jenkinsfile
+++ /dev/null
@@ -1,54 +0,0 @@
-#!groovy
-
-pipeline {
-
-    agent any
-
-    stages {
-        stage('pull') {
-            steps {
-                git url: 'https://gerrit.onosproject.org/onos'
-            }
-        }
-
-        stage('build') {
-            steps {
-                sh '''#!/bin/bash -l
-                    ONOS_ROOT=`pwd`
-                    source tools/build/envDefaults
-                    onos-buck build onos
-                '''
-            }
-        }
-
-        stage('test') {
-            steps {
-                parallel (
-                    "unit-tests": {
-                        sh '''#!/bin/bash -l
-                            ONOS_ROOT=`pwd`
-                            source tools/build/envDefaults
-                            onos-buck test
-                        '''
-                    },
-                    "javadocs": {
-                        sh '''#!/bin/bash -l
-                            ONOS_ROOT=`pwd`
-                            source tools/build/envDefaults
-                            onos-buck build //docs:external //docs:internal --show-output
-                        '''
-                    },
-                    "docker-image": {
-                        sh '''#!/bin/bash -l
-                            ONOS_ROOT=`pwd`
-                            source tools/build/envDefaults
-                            docker build -t onosproject/onos-test-docker .
-                        '''
-                    },
-                )
-            }
-        }
-    }
-
-}
-
diff --git a/apps/acl/BUCK b/apps/acl/BUCK
deleted file mode 100644
index bbe0f16..0000000
--- a/apps/acl/BUCK
+++ /dev/null
@@ -1,30 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//lib:jersey-server',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/v1/acl',
-    api_title = 'ACL API',
-    api_version = '1.0',
-    api_description = 'REST API for ACL app',
-    api_package = 'org.onosproject.acl',
-)
-
-onos_app (
-    title = 'Access Control Lists',
-    category = 'Security',
-    url = 'http://onosproject.org',
-    description = 'ONOS ACL application.',
-)
diff --git a/apps/actn-mdsc/BUCK b/apps/actn-mdsc/BUCK
deleted file mode 100644
index 0961e47..0000000
--- a/apps/actn-mdsc/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-BUNDLES = [
-    '//apps/tetunnel/api:onos-apps-tetunnel-api',
-    '//apps/tetopology/api:onos-apps-tetopology-api',
-    '//apps/actn-mdsc/tetunnel-ctl:onos-apps-actn-mdsc-tetunnel-ctl',
-    '//apps/actn-mdsc/tetunnel-pce:onos-apps-actn-mdsc-tetunnel-pce',
-]
-
-onos_app (
-    title = 'ACTN MDSC',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'ACTN MDSC APP.',
-)
-
diff --git a/apps/actn-mdsc/tetunnel-ctl/BUCK b/apps/actn-mdsc/tetunnel-ctl/BUCK
deleted file mode 100644
index 5cf5a66..0000000
--- a/apps/actn-mdsc/tetunnel-ctl/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//apps/tetunnel/api:onos-apps-tetunnel-api',
-    '//apps/actn-mdsc/tetunnel-pce:onos-apps-actn-mdsc-tetunnel-pce',
-    '//apps/tetopology/api:onos-apps-tetopology-api',
-    '//incubator/api:onos-incubator-api'
- ]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/apps/actn-mdsc/tetunnel-pce/BUCK b/apps/actn-mdsc/tetunnel-pce/BUCK
deleted file mode 100644
index a040010..0000000
--- a/apps/actn-mdsc/tetunnel-pce/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//apps/tetunnel/api:onos-apps-tetunnel-api',
-
- ]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/apps/artemis/BUCK b/apps/artemis/BUCK
deleted file mode 100755
index 450f73e..0000000
--- a/apps/artemis/BUCK
+++ /dev/null
@@ -1,100 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:NETTY',
-    '//lib:io_netty_netty',
-    '//lib:io_netty_netty_transport',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/routing/common:onos-apps-routing-common',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//apps/intentsync:onos-apps-intentsync',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//lib:okhttp',
-    '//lib:okio',
-    ':commons-net',
-    ':io.socket-client',
-    ':json',
-    ':engine.io-client'
- ]
-
-BUNDLES = [
-    '//apps/artemis:onos-apps-artemis',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/routing/common:onos-apps-routing-common',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS'
-]
-
-EXCLUDED_BUNDLES = [
-    '//lib:okhttp',
-    '//lib:okio',
-    ':commons-net',
-    ':io.socket-client',
-    ':json',
-    ':engine.io-client'
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.artemis',
-    title = 'Artemis',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Artemis',
-    included_bundles = BUNDLES,
-    excluded_bundles = EXCLUDED_BUNDLES,
-    required_apps = [
-        'org.onosproject.sdnip',
-        'org.onosproject.openflow',
-        'org.onosproject.ovsdb',
-        'org.onosproject.drivers.ovsdb'
-    ],
-)
-
-remote_jar (
-  name = 'commons-net',
-  out = 'commons-net-3.5.jar',
-  url = 'mvn:commons-net:commons-net:jar:3.5',
-  sha1 = '342fc284019f590e1308056990fdb24a08f06318',
-  maven_coords = 'commons-net:commons-net:3.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io.socket-client',
-  out = 'socket.io-client-0.8.3.jar',
-  url = 'mvn:io.socket:socket.io-client:jar:0.8.3',
-  sha1 = 'b30500232ff0668a47c9f91f02e6935457a52fb5',
-  maven_coords = 'io.socket:socket.io-client:jar:NON-OSGI:0.8.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'json',
-  out = 'json-20090211.jar',
-  url = 'mvn:org.json:json:jar:20090211',
-  sha1 = 'c183aa3a2a6250293808bba12262c8920ce5a51c',
-  maven_coords = 'org.json:json:jar:NON-OSGI:20090211',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'engine.io-client',
-  out = 'engine.io-client-0.8.3.jar',
-  url = 'mvn:io.socket:engine.io-client:jar:0.8.3',
-  sha1 = '854b49396e1e9f9bb0ab025062ddb49c4ed65ca1',
-  maven_coords = 'io.socket:engine.io-client:jar:NON-OSGI:0.8.3',
-  visibility = [ 'PUBLIC' ],
-)
\ No newline at end of file
diff --git a/apps/bgprouter/BUCK b/apps/bgprouter/BUCK
deleted file mode 100644
index 436c6b6..0000000
--- a/apps/bgprouter/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-]
-
-BUNDLES = [
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/routing/common:onos-apps-routing-common',
-    '//apps/bgprouter:onos-apps-bgprouter',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'BGP Router',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'BGP router application.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.fibinstaller', 'org.onosproject.route-service' ],
-)
diff --git a/apps/castor/BUCK b/apps/castor/BUCK
deleted file mode 100644
index 9b305ec..0000000
--- a/apps/castor/BUCK
+++ /dev/null
@@ -1,44 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:JACKSON',
-  '//lib:KRYO',
-  '//core/api:onos-api',
-  '//lib:javax.ws.rs-api',
-  '//lib:jersey-server',
-  '//utils/rest:onlab-rest',
-  '//core/store/serializers:onos-core-serializers',
-  '//incubator/api:onos-incubator-api',
-  '//apps/routing-api:onos-apps-routing-api',
-  '//apps/intentsync:onos-apps-intentsync',
-]
-
-BUNDLES = [
-  '//apps/castor:onos-apps-castor',
-  '//apps/routing-api:onos-apps-routing-api',
-  '//apps/routing/common:onos-apps-routing-common',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-  '//incubator/api:onos-incubator-api-tests',
-  '//apps/routing-api:onos-apps-routing-api-tests',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-  web_context = '/onos/castor',
-  api_title = 'Castor',
-  api_version = '1.0',
-  api_description = 'REST API for Castor',
-  api_package = 'org.onosproject.castor',
-)
-
-onos_app (
-  title = 'Castor',
-  category = 'Utility',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-  description = 'Castor application',
-  required_apps = [ 'org.onosproject.intentsynchronizer' ],
-)
diff --git a/apps/cfm/BUCK b/apps/cfm/BUCK
deleted file mode 100644
index 17e3059..0000000
--- a/apps/cfm/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-BUNDLES = [
-    '//apps/cfm/api:onos-apps-cfm-api',
-    '//apps/cfm/app:onos-apps-cfm-app',
-    '//apps/cfm/nbi:onos-apps-cfm-nbi',
-]
-
-onos_app (
-    title = 'Layer 2 Monitoring CFM Application',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Layer 2 Monitoring Connectivity Fault Management App',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/cfm/api/BUCK b/apps/cfm/api/BUCK
deleted file mode 100644
index ab6251e..0000000
--- a/apps/cfm/api/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
-
diff --git a/apps/cfm/app/BUCK b/apps/cfm/app/BUCK
deleted file mode 100644
index 93d3d70..0000000
--- a/apps/cfm/app/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/cfm/api:onos-apps-cfm-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/apps/cfm/nbi/BUCK b/apps/cfm/nbi/BUCK
deleted file mode 100644
index fd493f4..0000000
--- a/apps/cfm/nbi/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//lib:JACKSON',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-    '//apps/cfm/api:onos-apps-cfm-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//utils/osgi:onlab-osgi-tests',
-    '//web/api:onos-rest-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/cfm',
-    api_title = 'L2 Monitoring CFM',
-    api_version = '1.0',
-    api_description = 'REST API for L2 Monitoring CFM',
-    api_package = 'org.onosproject.soam.rest',
-)
diff --git a/apps/cip/BUCK b/apps/cip/BUCK
deleted file mode 100644
index a7590d9..0000000
--- a/apps/cip/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Cluster IP Alias',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'ONOS Cluster IP alias application.',
-)
diff --git a/apps/config/BUCK b/apps/config/BUCK
deleted file mode 100644
index dac73d6..0000000
--- a/apps/config/BUCK
+++ /dev/null
@@ -1,28 +0,0 @@
-APPS = [
-    'org.onosproject.yang',
-]
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:onos-yang-model',
-    '//core/store/serializers:onos-core-serializers',
-    '//cli:onos-cli',
-    '//lib:commons-text',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Dynamic Configuration',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Provides means to track and distribute service and device configuration data ' +
-        'throughout the ONOS cluster. It works with the YANG runtime to ensure that the tracked ' +
-        'data adheres to the registered YANG models. Applications can traverse and access this ' +
-        'data which is organized in a logically unified tree.<p/>(Under development)',
-    required_apps = APPS,
-)
diff --git a/apps/configsync-netconf/BUCK b/apps/configsync-netconf/BUCK
deleted file mode 100644
index 2fc0e10..0000000
--- a/apps/configsync-netconf/BUCK
+++ /dev/null
@@ -1,31 +0,0 @@
-APPS = [
-    'org.onosproject.configsync',
-    'org.onosproject.yang',
-    'org.onosproject.netconf',
-]
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-runtime',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//apps/config:onos-apps-config',
-    '//apps/configsync:onos-apps-configsync',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    title = 'Dynamic Configuration Synchronizer for NETCONF',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Application to support the Dynamic configuration service.',
-    required_apps = APPS,
-)
diff --git a/apps/configsync/BUCK b/apps/configsync/BUCK
deleted file mode 100644
index aa9caf1..0000000
--- a/apps/configsync/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-APPS = [
-    # dynamic config
-    'org.onosproject.config',
-]
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//apps/config:onos-apps-config',
-    '//lib:onos-yang-model',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Dynamic Configuration Synchronizer',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Application to support the Dynamic configuration service.',
-    required_apps = APPS,
-)
diff --git a/apps/cord-support/BUCK b/apps/cord-support/BUCK
deleted file mode 100644
index 2caced2..0000000
--- a/apps/cord-support/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:JACKSON',
-  '//lib:javax.ws.rs-api',
-  '//utils/rest:onlab-rest',
-  '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_REST',
-  '//lib:jersey-server',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-  web_context = '/onos/cord-support',
-  api_title = 'CORD Support',
-  api_version = '1.0',
-  api_description = 'REST API for CORD inquiry to ONOS topology',
-  api_package = 'org.onosproject.cordsupport',
-)
-
-onos_app (
-  title = 'CORD Support',
-  category = 'Integration',
-  url = 'http://onosproject.org',
-  description = 'CORD Support application.',
-)
diff --git a/apps/cpman/api/BUCK b/apps/cpman/api/BUCK
deleted file mode 100644
index 4cb1ba0..0000000
--- a/apps/cpman/api/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//core/store/serializers:onos-core-serializers',
- ]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/apps/cpman/app/BUCK b/apps/cpman/app/BUCK
deleted file mode 100644
index ea4dda7..0000000
--- a/apps/cpman/app/BUCK
+++ /dev/null
@@ -1,48 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:javax.ws.rs-api',
-    '//lib:rrd4j',
-    '//apps/cpman/api:onos-apps-cpman-api',
-    '//utils/rest:onlab-rest',
-    '//cli:onos-cli',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//web/api:onos-rest-tests',
-]
-
-BUNDLES = [
-    '//apps/cpman/api:onos-apps-cpman-api',
-    ':onos-apps-cpman-app',
-]
-
-EXCLUDED_BUNDLES = [
-    '//lib:rrd4j',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/cpman',
-    api_title = 'Control Plane Manager API',
-    api_version = '1.0',
-    api_description = 'REST API for Control Plane Manager',
-    api_package = 'org.onosproject.cpman.rest',
-)
-
-onos_app (
-    app_name = 'org.onosproject.cpman',
-    title = 'Control Plane Manager',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Control Plane Management application for monitoring the health of the ONOS cluster',
-    included_bundles = BUNDLES,
-    excluded_bundles = EXCLUDED_BUNDLES,
-    required_apps = [ 'org.onosproject.openflow-message' ],
-)
diff --git a/apps/dhcp/BUCK b/apps/dhcp/BUCK
deleted file mode 100644
index fbbb126..0000000
--- a/apps/dhcp/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-BUNDLES = [
-    '//apps/dhcp/api:onos-apps-dhcp-api',
-    '//apps/dhcp/app:onos-apps-dhcp-app',
-]
-
-onos_app (
-  title = 'DHCP Server',
-  category = 'Utility',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-)
diff --git a/apps/dhcp/api/BUCK b/apps/dhcp/api/BUCK
deleted file mode 100644
index ee55792..0000000
--- a/apps/dhcp/api/BUCK
+++ /dev/null
@@ -1,7 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/apps/dhcp/app/BUCK b/apps/dhcp/app/BUCK
deleted file mode 100644
index 7dd3a0e..0000000
--- a/apps/dhcp/app/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:javax.ws.rs-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//apps/dhcp/api:onos-apps-dhcp-api',
-    '//utils/rest:onlab-rest',
-    '//core/store/serializers:onos-core-serializers',
-    '//cli:onos-cli',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/dhcp',
-    api_title = 'DHCP Server',
-    api_version = '1.0',
-    api_description = 'REST API for DHCP Server',
-    api_package = 'org.onosproject.dhcp.rest',
-)
diff --git a/apps/dhcprelay/BUCK b/apps/dhcprelay/BUCK
deleted file mode 100644
index a2bfb70..0000000
--- a/apps/dhcprelay/BUCK
+++ /dev/null
@@ -1,36 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//apps/routing/fpm/api:onos-apps-routing-fpm-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//apps/route-service/api:onos-apps-route-service-api-tests',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    '//apps/dhcprelay:onos-apps-dhcprelay',
-    '//apps/routing/fpm/api:onos-apps-routing-fpm-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.dhcprelay',
-    title = 'DHCP Relay Agent',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'DHCP Relay Agent Application.',
-    required_apps = [ 'org.onosproject.route-service' ],
-    included_bundles = BUNDLES,
-)
diff --git a/apps/drivermatrix/BUCK b/apps/drivermatrix/BUCK
deleted file mode 100644
index fa94a8b..0000000
--- a/apps/drivermatrix/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'Driver Support Matrix',
-    category = 'GUI',
-    url = 'http://onosproject.org',
-    description = 'Extends the ONOS GUI with a view that allows the operator to visualize ' +
-        'the currently loaded drivers.',
-)
-
diff --git a/apps/events/BUCK b/apps/events/BUCK
deleted file mode 100644
index 12e888b..0000000
--- a/apps/events/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'Event History',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Allows recording and tracking of otherwise ephemeral ONOS core events. ' +
-        'It is primarily aimed for supporting various system tests and to assure that expected ' +
-        'events are raised and broadcast to applications that have requested them.',
-)
diff --git a/apps/evpn-route-service/BUCK b/apps/evpn-route-service/BUCK
deleted file mode 100644
index c571d1f..0000000
--- a/apps/evpn-route-service/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-BUNDLES = [
-    '//apps/evpn-route-service/api:onos-apps-evpn-route-service-api',
-    '//apps/evpn-route-service/app:onos-apps-evpn-route-service-app',
-]
-
-onos_app (
-    title = 'EVPN Routing',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/evpn-route-service/api/BUCK b/apps/evpn-route-service/api/BUCK
deleted file mode 100644
index 68eeacf..0000000
--- a/apps/evpn-route-service/api/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/evpn-route-service/app/BUCK b/apps/evpn-route-service/app/BUCK
deleted file mode 100644
index 0f7b609..0000000
--- a/apps/evpn-route-service/app/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//utils/misc:onlab-misc',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/evpn-route-service/api:onos-apps-evpn-route-service-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/evpnopenflow/BUCK b/apps/evpnopenflow/BUCK
deleted file mode 100644
index 47f66a5..0000000
--- a/apps/evpnopenflow/BUCK
+++ /dev/null
@@ -1,33 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:JACKSON',
-  '//lib:KRYO',
-  '//lib:org.apache.karaf.shell.console',
-  '//cli:onos-cli',
-  '//incubator/api:onos-incubator-api',
-  '//core/store/serializers:onos-core-serializers',
-  '//apps/gluon:onos-apps-gluon',
-  '//apps/vtn/vtnrsc:onos-apps-vtn-vtnrsc',
-  '//apps/route-service/api:onos-apps-route-service-api',
-  '//apps/evpn-route-service/api:onos-apps-evpn-route-service-api',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-  '//lib:TEST',
-]
-
-osgi_jar_with_tests(
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-)
-
-onos_app(
-  title = 'EVPN OpenFlow',
-  category = 'Traffic Engineering',
-  url = 'http://onosproject.org',
-  description = 'Ethernet VPN (EVPN) introduces a new model for Ethernet services delivery.' +
-  'It enables integrated Layer 2 service over Ethernet with multihoming.',
-  required_apps = [ 'org.onosproject.route-service', 'org.onosproject.evpn-route-service',
-                    'org.onosproject.gluon', 'org.onosproject.vtn' ],
-)
diff --git a/apps/faultmanagement/BUCK b/apps/faultmanagement/BUCK
deleted file mode 100644
index ce1199c..0000000
--- a/apps/faultmanagement/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-BUNDLES = [
-    '//apps/faultmanagement/fmcli:onos-apps-faultmanagement-fmcli',
-    '//apps/faultmanagement/fmgui:onos-apps-faultmanagement-fmgui',
-    '//apps/faultmanagement/fmmgr:onos-apps-faultmanagement-fmmgr',
-    '//apps/faultmanagement/fmweb:onos-apps-faultmanagement-fmweb',
-]
-
-onos_app(
-    title = 'Fault Management',
-    origin = 'BTI Systems',
-    description = 'Provides managements of alarms. Stores retrieved alarms from devices. ' +
-        'Offers CLI, UI and REST integration to obtain and display them from ONOS.',
-    category = 'Monitoring',
-    url = 'https://wiki.onosproject.org/display/ONOS/Fault+Management',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/faultmanagement/fmcli/BUCK b/apps/faultmanagement/fmcli/BUCK
deleted file mode 100644
index 37b1da6..0000000
--- a/apps/faultmanagement/fmcli/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//incubator/api:onos-incubator-api',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//utils/osgi:onlab-osgi',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/faultmanagement/fmmgr:onos-apps-faultmanagement-fmmgr'
-]
-
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    import_packages = '*,org.onosproject.cli.net',
-)
diff --git a/apps/faultmanagement/fmgui/BUCK b/apps/faultmanagement/fmgui/BUCK
deleted file mode 100644
index 96c7835..0000000
--- a/apps/faultmanagement/fmgui/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//incubator/api:onos-incubator-api',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/faultmanagement/fmmgr/BUCK b/apps/faultmanagement/fmmgr/BUCK
deleted file mode 100644
index b9c59f8..0000000
--- a/apps/faultmanagement/fmmgr/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//incubator/api:onos-incubator-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-    '//incubator/api:onos-incubator-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/faultmanagement/fmweb/BUCK b/apps/faultmanagement/fmweb/BUCK
deleted file mode 100644
index 3a20d8e..0000000
--- a/apps/faultmanagement/fmweb/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//lib:jersey-test-framework-core',
-    '//lib:jersey-test-framework-jetty',
-    '//utils/osgi:onlab-osgi-tests',
-    '//web/api:onos-rest-tests',
-    '//incubator/api:onos-incubator-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/v1/fm',
-    api_title = 'Fault Management Rest API',
-    api_version = '1.0',
-    api_description = 'REST API for Fault Management',
-    api_package = 'org.onosproject.faultmanagement'
-)
diff --git a/apps/flowanalyzer/BUCK b/apps/flowanalyzer/BUCK
deleted file mode 100644
index 2f5461f..0000000
--- a/apps/flowanalyzer/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'Flow Space Analysis',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Simple flow space analyzer.',
-)
diff --git a/apps/flowspec-api/BUCK b/apps/flowspec-api/BUCK
deleted file mode 100644
index 01efc7a..0000000
--- a/apps/flowspec-api/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-BUNDLES = [
-    '//apps/flowspec-api/flowapi:onos-apps-flowspec-api-flowapi',
-
-]
-
-onos_app (
-  title = 'Flowspec API',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-  description = 'ONOS framework applications',
-)
diff --git a/apps/flowspec-api/flowapi/BUCK b/apps/flowspec-api/flowapi/BUCK
deleted file mode 100644
index 835b939..0000000
--- a/apps/flowspec-api/flowapi/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//utils/osgi:onlab-osgi',
-    '//utils/misc:onlab-misc',
-    '//lib:commons-io',
-    '//lib:com_google_guava_guava',
-    '//lib:kryo',
-    '//lib:slf4j-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/apps/fwd/BUCK b/apps/fwd/BUCK
deleted file mode 100644
index 6a877fd..0000000
--- a/apps/fwd/BUCK
+++ /dev/null
@@ -1,27 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//core/store/primitives:onos-core-primitives',
-    '//core/api:onos-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Reactive Forwarding',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Provisions traffic between end-stations using hop-by-hop flow programming by ' +
-        'intercepting packets for which there are currently no matching flow objectives on the ' +
-        'data plane. The paths paved in this manner are short-lived, i.e. they expire a few ' +
-        'seconds after the flow on whose behalf they were programmed stops.\n\n' +
-        'The application relies on the ONOS path service to compute the shortest paths. ' +
-        'In the event of negative topology events (link loss, device disconnect, etc.), ' +
-        'the application will proactively invalidate any paths that it had programmed to lead ' +
-        'through the resources that are no longer available.',
-)
diff --git a/apps/gangliametrics/BUCK b/apps/gangliametrics/BUCK
deleted file mode 100644
index 3dc67f4..0000000
--- a/apps/gangliametrics/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:METRICS',
-    '//lib:gmetric4j',
-    '//lib:metrics-ganglia',
-    '//lib:remotetea-oncrpc',
-]
-
-EXCLUDED_BUNDLES = [
-    '//lib:gmetric4j',
-    '//lib:metrics-ganglia',
-    '//lib:remotetea-oncrpc',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Ganglia Report and Query',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Performance metric service reporter',
-    excluded_bundles = EXCLUDED_BUNDLES,
-)
diff --git a/apps/gluon/BUCK b/apps/gluon/BUCK
deleted file mode 100644
index a11d2b6..0000000
--- a/apps/gluon/BUCK
+++ /dev/null
@@ -1,37 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//cli:onos-cli',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-    '//lib:org.apache.httpcomponents.httpasyncclient-osgi',
-    '//lib:org.apache.httpcomponents.httpcore-nio',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:org.apache.karaf.jaas',
-
-]
-TEST_DEPS = [
-  '//lib:TEST',
-]
-
-BUNDLES = [
-  ':onos-apps-gluon',
-  '//lib:httpclient-osgi',
-  '//lib:httpcore-osgi',
-  '//lib:org.apache.httpcomponents.httpasyncclient-osgi',
-  '//lib:org.apache.httpcomponents.httpcore-nio',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.gluon',
-    title = 'Gluon Shim',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'To fetch data from Gluon Server over Http session.',
-)
diff --git a/apps/graphitemetrics/BUCK b/apps/graphitemetrics/BUCK
deleted file mode 100644
index d8e4441..0000000
--- a/apps/graphitemetrics/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:METRICS',
-    '//lib:gmetric4j',
-    '//lib:metrics-graphite',
-]
-
-EXCLUDED_BUNDLES = [
-    '//lib:gmetric4j',
-    '//lib:metrics-graphite',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    title = 'Graphite Report and Query',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Performance metric service reporter and retriever for graphite',
-    excluded_bundles = EXCLUDED_BUNDLES,
-)
diff --git a/apps/imr/BUCK b/apps/imr/BUCK
deleted file mode 100644
index ffd56b2..0000000
--- a/apps/imr/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-BUNDLES = [
-    '//apps/imr/api:onos-apps-imr-api',
-    '//apps/imr/app:onos-apps-imr-app',
-]
-
-onos_app (
-    title = 'Intent Monitoring and Rerouting',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org', # link alla wiki su wiki.onosproject.org
-    description = 'Intent Monitoring and Rerouting application.',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/imr/api/BUCK b/apps/imr/api/BUCK
deleted file mode 100644
index a6a3885..0000000
--- a/apps/imr/api/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//lib:jersey-server',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/imr/app:onos-apps-imr-app',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-]
-
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    web_context = '/onos/v1/imr',
-    api_title = 'IMR REST API',
-    api_version = '1.0',
-    api_description = 'REST API for IMR Application',
-    api_package = 'org.onosproject.imr.rest',
-)
-
diff --git a/apps/imr/app/BUCK b/apps/imr/app/BUCK
deleted file mode 100644
index 4f39ad8..0000000
--- a/apps/imr/app/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//core/store/dist:onos-core-dist',
-    '//core/store/serializers:onos-core-serializers',
-    '//incubator/api:onos-incubator-api',
-    '//lib:KRYO',
-    '//lib:JACKSON',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/inbandtelemetry/api/BUCK b/apps/inbandtelemetry/api/BUCK
deleted file mode 100644
index 97564d9..0000000
--- a/apps/inbandtelemetry/api/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/inbandtelemetry/app/BUCK b/apps/inbandtelemetry/app/BUCK
deleted file mode 100644
index a5d7b9e..0000000
--- a/apps/inbandtelemetry/app/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-BUNDLES = [
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-    '//apps/inbandtelemetry/impl:onos-apps-inbandtelemetry-impl',
-    '//apps/inbandtelemetry/app:onos-apps-inbandtelemetry-app',
-]
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:JACKSON',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.inbandtelemetry.app',
-    title = 'P4 In-band Network Telemetry Sample Application',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Provides managements of INT-capable devices. Specifies flows to enable INT and' +
-    'types of metadata to collect. Sets up INT-related information.',
-    included_bundles = BUNDLES,
-)
\ No newline at end of file
diff --git a/apps/inbandtelemetry/impl/BUCK b/apps/inbandtelemetry/impl/BUCK
deleted file mode 100644
index 9c87c92..0000000
--- a/apps/inbandtelemetry/impl/BUCK
+++ /dev/null
@@ -1,28 +0,0 @@
-BUNDLES = [
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-    ':onos-apps-inbandtelemetry-impl'
-]
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//pipelines/basic:onos-pipelines-basic',
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app(
-    title = 'P4 In-band Network Telemetry Service',
-    description = 'Provides managements of INT-capable devices. Specifies flows to enable INT and' +
-    'types of metadata to collect. Sets up INT-related information.',
-    category = 'Monitoring',
-    included_bundles = BUNDLES,
-)
\ No newline at end of file
diff --git a/apps/influxdbmetrics/BUCK b/apps/influxdbmetrics/BUCK
deleted file mode 100644
index ed47e12..0000000
--- a/apps/influxdbmetrics/BUCK
+++ /dev/null
@@ -1,46 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:METRICS',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:metrics-influxdb',
-    '//lib:influxdb-java',
-    '//lib:commons-codec',
-    '//lib:retrofit',
-    '//lib:okhttp',
-    '//lib:logging-interceptor',
-    '//lib:okio',
-    '//lib:moshi',
-    '//lib:converter-moshi',
-    '//lib:com_google_code_gson_gson',
-    '//cli:onos-cli',
-]
-
-EXCLUDED_BUNDLES = [
-    '//lib:metrics-influxdb',
-    '//lib:influxdb-java',
-    '//lib:commons-codec',
-    '//lib:retrofit',
-    '//lib:okhttp',
-    '//lib:logging-interceptor',
-    '//lib:com_google_code_gson_gson',
-    '//lib:okio',
-    '//lib:moshi',
-    '//lib:converter-moshi',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    title = 'InfluxDB Report and Query',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Performance metric service reporter and retriever for influxDB.',
-    excluded_bundles = EXCLUDED_BUNDLES,
-)
diff --git a/apps/intentsync/BUCK b/apps/intentsync/BUCK
deleted file mode 100644
index 685cd74..0000000
--- a/apps/intentsync/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-  app_name = 'org.onosproject.intentsynchronizer',
-  title = 'Intent Synchronizer',
-  category = 'Utility',
-  url = 'http://onosproject.org',
-  description = 'Synchronizes intents to the intent framework from a single instance',
-)
diff --git a/apps/iptopology-api/BUCK b/apps/iptopology-api/BUCK
deleted file mode 100644
index 3cc9301..0000000
--- a/apps/iptopology-api/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/apps/kafka-integration/BUCK b/apps/kafka-integration/BUCK
deleted file mode 100644
index ecb06ff..0000000
--- a/apps/kafka-integration/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-BUNDLES = [
-    '//lib:kafka-clients',
-    '//lib:protobuf-java-3.2.0',
-    '//incubator/protobuf/models:onos-incubator-protobuf-models',
-    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
-    '//apps/kafka-integration/api:onos-apps-kafka-integration-api',
-    '//apps/kafka-integration/app:onos-apps-kafka-integration-app',
-]
-
-onos_app (
-  title = 'Kafka Integration',
-  category = 'Integration',
-  url = 'http://onosproject.org',
-  description = 'Provides integration of ONOS and Kafka message bus so that internal ONOS events ' +
-    'can be broadcast over the Kafka message bus to off-platform applications.',
-  included_bundles = BUNDLES,
-)
diff --git a/apps/kafka-integration/api/BUCK b/apps/kafka-integration/api/BUCK
deleted file mode 100644
index 4609fe9..0000000
--- a/apps/kafka-integration/api/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:kafka-clients',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/apps/kafka-integration/app/BUCK b/apps/kafka-integration/app/BUCK
deleted file mode 100644
index 46cc863..0000000
--- a/apps/kafka-integration/app/BUCK
+++ /dev/null
@@ -1,30 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:javax.ws.rs-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//apps/kafka-integration/api:onos-apps-kafka-integration-api',
-    '//utils/rest:onlab-rest',
-    '//core/store/serializers:onos-core-serializers',
-    '//cli:onos-cli',
-    '//lib:kafka-clients',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:GRPC_1.3',
-    '//incubator/protobuf/models:onos-incubator-protobuf-models',
-    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/kafka-integration',
-    api_title = 'Kafka Integration',
-    api_version = '1.0',
-    api_description = 'REST API for Kafka Integration',
-    api_package = 'org.onosproject.kafkaintegration.rest',
-)
diff --git a/apps/l3vpn/BUCK b/apps/l3vpn/BUCK
deleted file mode 100644
index d663a65..0000000
--- a/apps/l3vpn/BUCK
+++ /dev/null
@@ -1,46 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//models/l3vpn:onos-models-l3vpn',
-    '//apps/config:onos-apps-config',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-runtime',
-    '//apps/yang:onos-apps-yang',
-    '//apps/pce/app:onos-apps-pce-app',
-    '//incubator/api:onos-incubator-api',
-    '//models/common:onos-models-common',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-APPS = [
-    'org.onosproject.yang',
-    'org.onosproject.yang-gui',
-    'org.onosproject.config',
-    'org.onosproject.restconf',
-    'org.onosproject.protocols.restconfserver',
-    'org.onosproject.netconf',
-    'org.onosproject.netconfsb',
-    'org.onosproject.models.common',
-    'org.onosproject.models.l3vpn',
-    'org.onosproject.bgpcep',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app(
-    app_name = 'org.onosproject.l3vpn',
-    title = 'YANG L3VPN',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'L3VPN YANG Application',
-    required_apps = APPS,
-)
-
diff --git a/apps/layout/BUCK b/apps/layout/BUCK
deleted file mode 100644
index a24c4ea..0000000
--- a/apps/layout/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//core/common:onos-core-common',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'UI Auto-Layout',
-    category = 'GUI',
-    url = 'http://onosproject.org',
-    description = 'Automatically lays out the network topology using roles assigned to each ' +
-        'network element via the network configuration. Supports multiple layout variants.',
-)
diff --git a/apps/learning-switch/BUCK b/apps/learning-switch/BUCK
deleted file mode 100644
index 61399c3..0000000
--- a/apps/learning-switch/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:slf4j-api',
-    '//lib:org.apache.felix.scr.annotations',
-    '//lib:junit',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Learning Switch Tutorial',
-    category = 'Tutorial',
-    url = 'http://onosproject.org',
-    description = 'Tutorial to help user create a learning switch',
-)
\ No newline at end of file
diff --git a/apps/linkprops/BUCK b/apps/linkprops/BUCK
deleted file mode 100644
index 324bd22..0000000
--- a/apps/linkprops/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api'
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-  title = 'Link Properties',
-  description = 'Shows more link properties',
-  category = 'Monitoring',
-  url = 'https://onosproject.org/',
-)
diff --git a/apps/mappingmanagement/BUCK b/apps/mappingmanagement/BUCK
deleted file mode 100644
index 529962b..0000000
--- a/apps/mappingmanagement/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-BUNDLES = [
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-    '//apps/mappingmanagement/cli:onos-apps-mappingmanagement-cli',
-    '//apps/mappingmanagement/mgr:onos-apps-mappingmanagement-mgr',
-    '//apps/mappingmanagement/web:onos-apps-mappingmanagement-web',
-]
-
-onos_app (
-  title = 'Mapping Management',
-  description = 'ONOS mapping management application',
-  category = 'Monitoring',
-  url = 'https://onosproject.org/',
-  included_bundles = BUNDLES,
-)
diff --git a/apps/mappingmanagement/api/BUCK b/apps/mappingmanagement/api/BUCK
deleted file mode 100644
index 0e5b8c5..0000000
--- a/apps/mappingmanagement/api/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
- ]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/mappingmanagement/cli/BUCK b/apps/mappingmanagement/cli/BUCK
deleted file mode 100644
index 7fcbd24..0000000
--- a/apps/mappingmanagement/cli/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//incubator/api:onos-incubator-api',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//utils/osgi:onlab-osgi',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    import_packages = '*,org.onosproject.cli.net',
-)
diff --git a/apps/mappingmanagement/mgr/BUCK b/apps/mappingmanagement/mgr/BUCK
deleted file mode 100644
index 5be1e7d..0000000
--- a/apps/mappingmanagement/mgr/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/mappingmanagement/web/BUCK b/apps/mappingmanagement/web/BUCK
deleted file mode 100644
index 24eba23..0000000
--- a/apps/mappingmanagement/web/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//web/api:onos-rest-tests',
-    '//lib:minimal-json',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/mappingmanagement',
-    api_title = 'Mapping Management API',
-    api_version = '1.0',
-    api_description = 'REST API for ONOS Mapping Management',
-    api_package = 'org.onosproject.mapping.web.api',
-)
diff --git a/apps/mcast/BUCK b/apps/mcast/BUCK
deleted file mode 100644
index 58f3dd7..0000000
--- a/apps/mcast/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-BUNDLES = [
-    '//apps/mcast/cli:onos-apps-mcast-cli',
-    '//apps/mcast/impl:onos-apps-mcast-impl',
-    '//apps/mcast/web:onos-apps-mcast-web',
-    '//apps/mcast/api:onos-apps-mcast-api',
-]
-
-onos_app(
-    title = 'Multicast traffic control',
-    origin = 'ONF',
-    description = 'Provides handling of multicast traffic.',
-    category = 'Traffic Engineering',
-    url = 'https://wiki.onosproject.org/',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/mcast/api/BUCK b/apps/mcast/api/BUCK
deleted file mode 100644
index db499cc..0000000
--- a/apps/mcast/api/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/mcast/cli/BUCK b/apps/mcast/cli/BUCK
deleted file mode 100644
index df9991a..0000000
--- a/apps/mcast/cli/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//utils/osgi:onlab-osgi',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/mcast/api:onos-apps-mcast-api'
-]
-
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    import_packages = '*,org.onosproject.cli.net',
-)
diff --git a/apps/mcast/impl/BUCK b/apps/mcast/impl/BUCK
deleted file mode 100644
index c3d67ff..0000000
--- a/apps/mcast/impl/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/mcast/api:onos-apps-mcast-api'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/mcast/web/BUCK b/apps/mcast/web/BUCK
deleted file mode 100644
index 7fdc057..0000000
--- a/apps/mcast/web/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//apps/mcast/api:onos-apps-mcast-api'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//lib:jersey-test-framework-core',
-    '//lib:jersey-test-framework-jetty',
-    '//utils/osgi:onlab-osgi-tests',
-    '//web/api:onos-rest-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/mcast',
-    api_title = 'Multicast API',
-    api_version = '1.0',
-    api_description = 'REST API for Multicast',
-    api_package = 'org.onosproject.mcast.web',
-)
diff --git a/apps/metrics/BUCK b/apps/metrics/BUCK
deleted file mode 100644
index 81ee918..0000000
--- a/apps/metrics/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Topology &amp; Intent Metrics',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'Monitoring of various metrics related to topology mutation and intent programming.',
-)
diff --git a/apps/mfwd/BUCK b/apps/mfwd/BUCK
deleted file mode 100644
index a2ed151..0000000
--- a/apps/mfwd/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Multicast Forwarding',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Multicast forwarding application.',
-)
diff --git a/apps/mlb/BUCK b/apps/mlb/BUCK
deleted file mode 100644
index eec3405..0000000
--- a/apps/mlb/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Mastership Load Balancer',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Monitors distribution of mastership of network devices between the ONOS cluster ' +
-        'nodes and periodically re-assigns the mastership to achieve balanced distribution when ' +
-        'necessary and possible.',
-)
diff --git a/apps/mobility/BUCK b/apps/mobility/BUCK
deleted file mode 100644
index 38b0228..0000000
--- a/apps/mobility/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Host Mobility',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Host mobility application.',
-)
diff --git a/apps/netconf/client/BUCK b/apps/netconf/client/BUCK
deleted file mode 100644
index 035b0b5..0000000
--- a/apps/netconf/client/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-APPS = [
-    'org.onosproject.yang',
-    'org.onosproject.config',
-    'org.onosproject.netconf',
-]
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-runtime',
-    '//apps/config:onos-apps-config',
-    '//utils/misc:onlab-misc',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//utils/osgi:onlab-osgi',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-)
-
-onos_app(
-    app_name = 'org.onosproject.netconfsb',
-    title = 'NETCONF Protocol Subsystem',
-    category = 'Protocol',
-    url = 'http://onosproject.org',
-    description = 'Exposes APIs to establish NETCONF connections to devices and to send and receive ' +
-        'messages and asynchronous notifications over such connection.',
-    required_apps = APPS,
-)
diff --git a/apps/network-troubleshoot/BUCK b/apps/network-troubleshoot/BUCK
deleted file mode 100644
index 66b12f4..0000000
--- a/apps/network-troubleshoot/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-BUNDLES = [
-  '//apps/network-troubleshoot/api:onos-apps-network-troubleshoot-api',
-  '//apps/network-troubleshoot/cli:onos-apps-network-troubleshoot-cli',
-  '//apps/network-troubleshoot/core:onos-apps-network-troubleshoot-core',
-]
-
-onos_app (
-  title = 'Network Troubleshooter',
-  description = 'Provides various network troubleshooting utilities.',
-  category = 'Utility',
-  url = 'https://wiki.onosproject.org/display/ONOS/Network+TroubleShooting+Module',
-  included_bundles = BUNDLES,
-)
diff --git a/apps/network-troubleshoot/api/BUCK b/apps/network-troubleshoot/api/BUCK
deleted file mode 100644
index b6fdc64..0000000
--- a/apps/network-troubleshoot/api/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-)
diff --git a/apps/network-troubleshoot/cli/BUCK b/apps/network-troubleshoot/cli/BUCK
deleted file mode 100644
index 8f3fe1e..0000000
--- a/apps/network-troubleshoot/cli/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-#     '//lib:org.apache.karaf.shell.console',
-#     '//incubator/api:onos-incubator-api',
-#     '//cli:onos-cli',
-#     '//utils/rest:onlab-rest',
-#     '//lib:javax.ws.rs-api',
-#     '//utils/osgi:onlab-osgi',
-#     '//core/store/serializers:onos-core-serializers',
-    '//apps/network-troubleshoot/api:onos-apps-network-troubleshoot-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    import_packages = '*,org.onosproject.cli.net',
-)
diff --git a/apps/network-troubleshoot/core/BUCK b/apps/network-troubleshoot/core/BUCK
deleted file mode 100644
index 1174519..0000000
--- a/apps/network-troubleshoot/core/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//incubator/api:onos-incubator-api',
-#   '//core/store/serializers:onos-core-serializers',
-  '//apps/network-troubleshoot/api:onos-apps-network-troubleshoot-api',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-  '//utils/osgi:onlab-osgi-tests',
-  '//incubator/api:onos-incubator-api-tests',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-)
diff --git a/apps/newoptical/BUCK b/apps/newoptical/BUCK
deleted file mode 100644
index 8a1345b..0000000
--- a/apps/newoptical/BUCK
+++ /dev/null
@@ -1,27 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:JACKSON',
-  '//lib:KRYO',
-  '//core/store/serializers:onos-core-serializers',
-  '//lib:org.apache.karaf.shell.console',
-  '//cli:onos-cli',
-  '//apps/optical-model:onos-apps-optical-model',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-  '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-)
-
-onos_app (
-  title = 'Packet/Optical Use-Case',
-  category = 'Optical',
-  url = 'http://onosproject.org',
-  description = 'Packet/Optical use-case application.',
-  required_apps = [ 'org.onosproject.optical-model' ],
-)
diff --git a/apps/nodemetrics/BUCK b/apps/nodemetrics/BUCK
deleted file mode 100644
index de9c07e..0000000
--- a/apps/nodemetrics/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-BUNDLES = [
-    '//apps/nodemetrics/api:onos-apps-nodemetrics-api',
-    '//apps/nodemetrics/mgr:onos-apps-nodemetrics-mgr',
-]
-
-onos_app(
-    app_name = 'org.onosproject.nodemetrics',
-    title = 'Controller Monitor Application',
-    description = '1.Nodemetrics Application uses, sigar library to fetch Controller information.'+
-    '2. The Sigar library uses Native libraries and currently It supports Windows, Linux and MacOs platform.'+
-    '3. The Native libraries like .so, .dll and .dylib are packed as jar along with sigar libs.'+
-    '4. If the Native libraries are corrupted because of any reason,'+
-    'so, the controller is vulnerable to crash of the entire JVM',
-    category = 'Monitoring',
-    url = 'http://samsung.com',
-    included_bundles = BUNDLES
-)
\ No newline at end of file
diff --git a/apps/nodemetrics/api/BUCK b/apps/nodemetrics/api/BUCK
deleted file mode 100644
index 42b99a6..0000000
--- a/apps/nodemetrics/api/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:sigar',
-
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/apps/nodemetrics/mgr/BUCK b/apps/nodemetrics/mgr/BUCK
deleted file mode 100644
index 35d3657..0000000
--- a/apps/nodemetrics/mgr/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:sigar',
-    '//lib:org.apache.karaf.shell.console',
-    '//apps/nodemetrics/api:onos-apps-nodemetrics-api',
-    '//core/store/serializers:onos-core-serializers',
-    '//cli:onos-cli',
-    '//lib:KRYO',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/apps/odtn/api/BUCK b/apps/odtn/api/BUCK
deleted file mode 100644
index 23ac161..0000000
--- a/apps/odtn/api/BUCK
+++ /dev/null
@@ -1,35 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-runtime',
-    '//models/tapi:onos-models-tapi',
-    '//models/openconfig:onos-models-openconfig',
-    '//apps/yang:onos-apps-yang',
-    '//apps/config:onos-apps-config',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-APPS = [
-    'org.onosproject.yang',
-    'org.onosproject.models.tapi',
-    'org.onosproject.models.openconfig',
-]
-
-# TODO probably bucklet, etc. should escape title & description
-onos_app (
-    app_name = 'org.onosproject.odtn-api',
-    title = 'ODTN API &amp; Utilities Application',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'ODTN API &amp; Utilities Application',
-    required_apps = APPS,
-)
diff --git a/apps/odtn/service/BUCK b/apps/odtn/service/BUCK
deleted file mode 100644
index e85e574..0000000
--- a/apps/odtn/service/BUCK
+++ /dev/null
@@ -1,50 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//apps/odtn/api:onos-apps-odtn-api',
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-runtime',
-    '//apps/config:onos-apps-config',
-    '//models/tapi:onos-models-tapi',
-    '//models/openconfig:onos-models-openconfig',
-    '//apps/yang:onos-apps-yang',
-    '//incubator/api:onos-incubator-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//lib:JACKSON',
-    '//protocols/netconf/api:onos-protocols-netconf-api'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-APPS = [
-    'org.onosproject.yang',
-    'org.onosproject.config',
-    'org.onosproject.configsync',
-    'org.onosproject.models.tapi',
-    'org.onosproject.models.openconfig',
-    'org.onosproject.odtn-api',
-
-    # strictly speaking following are not mandatory
-    'org.onosproject.restconf',
-    'org.onosproject.drivers.netconf',# will need if using TemplateManager
-    'org.onosproject.drivers.odtn-driver',
-    'org.onosproject.netconf',
-    'org.onosproject.configsync-netconf',
-    'org.onosproject.protocols.restconfserver',
-]
-
-onos_app (
-    app_name = 'org.onosproject.odtn-service',
-    title = 'ODTN Service Application',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'ODTN Service Application',
-    required_apps = APPS,
-)
diff --git a/apps/ofagent/BUCK b/apps/ofagent/BUCK
deleted file mode 100644
index 1283bad..0000000
--- a/apps/ofagent/BUCK
+++ /dev/null
@@ -1,54 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//core/common:onos-core-common',
-    '//incubator/api:onos-incubator-api',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_handler',
-    '//lib:openflowj',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//providers/openflow/flow:onos-providers-openflow-flow',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-BUNDLES = [
-    '//apps/ofagent:onos-apps-ofagent',
-    '//providers/openflow/flow:onos-providers-openflow-flow',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//lib:TEST_REST',
-    '//lib:jersey-server',
-    '//web/api:onos-rest-tests',
-    '//lib:minimal-json',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/ofagent',
-    api_title = 'OFAgent API',
-    api_version = '1.0',
-    api_description = 'REST API for OFAgent',
-    api_package = 'org.onosproject.ofagent.rest',
-)
-
-onos_app (
-    title = 'OpenFlow Agent',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'OpenFlow agent application for virtualization subsystem.',
-)
diff --git a/apps/openroadm/BUCK b/apps/openroadm/BUCK
deleted file mode 100644
index d529c3b..0000000
--- a/apps/openroadm/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-APPS = [
-  'org.onosproject.yang',
-  'org.onosproject.yang-gui',
-  'org.onosproject.config',
-  'org.onosproject.restconf',
-  'org.onosproject.protocols.restconfserver',
-  'org.onosproject.netconf',
-  'org.onosproject.netconfsb',
-  'org.onosproject.models.openroadm',
-]
-
-BUNDLES = [
-  '//apps/openroadm/service:onos-apps-openroadm-service',
-  '//apps/openroadm/network:onos-apps-openroadm-network',
-]
-
-onos_app(
-  app_name = 'org.onosproject.openroadm',
-  title = 'Open ROADM',
-  category = 'Optical',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-  description = 'Open ROADM Application',
-  required_apps = APPS,
-)
diff --git a/apps/openroadm/network/BUCK b/apps/openroadm/network/BUCK
deleted file mode 100644
index 7e8d0b2..0000000
--- a/apps/openroadm/network/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//models/openroadm:onos-models-openroadm',
-  '//core/store/serializers:onos-core-serializers',
-] + YANG_TOOLS
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/openroadm/service/BUCK b/apps/openroadm/service/BUCK
deleted file mode 100644
index 7e8d0b2..0000000
--- a/apps/openroadm/service/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//models/openroadm:onos-models-openroadm',
-  '//core/store/serializers:onos-core-serializers',
-] + YANG_TOOLS
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/openstacknetworking/BUCK b/apps/openstacknetworking/BUCK
deleted file mode 100644
index 01778ea..0000000
--- a/apps/openstacknetworking/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-BUNDLES = [
-    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
-    '//apps/openstacknetworking/app:onos-apps-openstacknetworking-app',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-    '//lib:commons-codec',
-    '//lib:sshd-core',
-]
-
-onos_app (
-    title = 'OpenStack Networking Application',
-    category = 'Integration',
-    url = 'https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization',
-    included_bundles = BUNDLES,
-    description = 'SONA Openstack Networking Application.',
-    required_apps = [
-        'org.onosproject.openstacknode'
-    ]
-)
diff --git a/apps/openstacknetworking/api/BUCK b/apps/openstacknetworking/api/BUCK
deleted file mode 100644
index 61b333d..0000000
--- a/apps/openstacknetworking/api/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-include_defs('//apps/openstacknode/openstack4j.bucklet')
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:openstack4j-core',
-    "//apps/openstacknode/api:onos-apps-openstacknode-api",
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-
-    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
-)
diff --git a/apps/openstacknetworking/app/BUCK b/apps/openstacknetworking/app/BUCK
deleted file mode 100644
index a227e74..0000000
--- a/apps/openstacknetworking/app/BUCK
+++ /dev/null
@@ -1,55 +0,0 @@
-include_defs('//apps/openstacknode/openstack4j.bucklet')
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//cli:onos-cli',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api',
-    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-    '//lib:commons-codec',
-    '//lib:openstack4j-core',
-    '//lib:openstack4j-http-connector',
-    '//lib:openstack4j-httpclient',
-    '//lib:json-patch',
-    '//lib:jackson-coreutils',
-    '//lib:btf',
-    '//lib:msg-simple',
-    '//lib:snakeyaml',
-    '//lib:sshd-core',
-]
-
-EXCLUDED_BUNDLES = [
-  '//lib:sshd-core',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//web/api:onos-rest-tests',
-    '//lib:TEST_REST',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/openstacknetworking',
-    api_title = 'OpenStack Networking API',
-    api_version = '1.0',
-    api_description = 'REST API for OpenStack Networking',
-    api_package = 'org.onosproject.openstacknetworking.web',
-
-    # dependency embedding
-    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
-    bundle_classpath = get_openstack4j_deps_path() + get_jackson_deps_path()
-)
\ No newline at end of file
diff --git a/apps/openstacknetworkingui/BUCK b/apps/openstacknetworkingui/BUCK
deleted file mode 100644
index 2f2fe68..0000000
--- a/apps/openstacknetworkingui/BUCK
+++ /dev/null
@@ -1,42 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:JACKSON',
-  '//core/store/serializers:onos-core-serializers',
-  '//lib:javax.ws.rs-api',
-  '//utils/rest:onlab-rest',
-  '//lib:jersey-client',
-  '//cli:onos-cli',
-  '//lib:org.apache.karaf.shell.console',
-  '//lib:sshd-core',
-  '//apps/openstacknode/api:onos-apps-openstacknode-api',
-  '//apps/openstacktelemetry/api:onos-apps-openstacktelemetry-api',
-  '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
-  '//apps/openstacknetworking/app:onos-apps-openstacknetworking-app',
-]
-
-EXCLUDED_BUNDLES = [
-  '//lib:sshd-core',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-)
-
-onos_app (
-  app_name = 'org.onosproject.openstacknetworkingui',
-  title = 'Openstack Networking UI',
-  category = 'GUI',
-  url = 'http://onosproject.org',
-  description = 'Openstack Networking UI Service',
-  excluded_bundles = EXCLUDED_BUNDLES,
-  required_apps = [
-      'org.onosproject.openstacknetworking',
-  ]
-)
diff --git a/apps/openstacknode/BUCK b/apps/openstacknode/BUCK
deleted file mode 100644
index 6abc695..0000000
--- a/apps/openstacknode/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-BUNDLES = [
-    '//apps/openstacknode/api:onos-apps-openstacknode-api',
-    '//apps/openstacknode/app:onos-apps-openstacknode-app',
-]
-
-onos_app (
-    title = 'OpenStack Node Bootstrap',
-    category = 'Integration',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'SONA Openstack Node Bootstrap Application.',
-    required_apps = [ 'org.onosproject.ovsdb-base', 'org.onosproject.drivers.ovsdb' ]
-)
diff --git a/apps/openstacknode/api/BUCK b/apps/openstacknode/api/BUCK
deleted file mode 100644
index 02cd049..0000000
--- a/apps/openstacknode/api/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-include_defs('//apps/openstacknode/openstack4j.bucklet')
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-
-    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
-)
diff --git a/apps/openstacknode/app/BUCK b/apps/openstacknode/app/BUCK
deleted file mode 100644
index d670b42..0000000
--- a/apps/openstacknode/app/BUCK
+++ /dev/null
@@ -1,47 +0,0 @@
-include_defs('//apps/openstacknode/openstack4j.bucklet')
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api',
-    '//lib:openstack4j-core',
-    '//lib:openstack4j-http-connector',
-    '//lib:openstack4j-httpclient',
-    '//lib:json-patch',
-    '//lib:jackson-coreutils',
-    '//lib:btf',
-    '//lib:msg-simple',
-    '//lib:snakeyaml',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//web/api:onos-rest-tests',
-    '//lib:TEST_REST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/openstacknode',
-    api_title = 'OpenStack Node API',
-    api_version = '1.0',
-    api_description = 'REST API for OpenStack Node',
-    api_package = 'org.onosproject.openstacknode.web',
-
-    # dependency embedding
-    import_packages = INCLUDE_PACKAGES + ',' + EXCLUDE_PACKAGES  + ',' + ALL_PACKAGES,
-    bundle_classpath = get_openstack4j_deps_path() + get_jackson_deps_path()
-)
-
diff --git a/apps/openstacknode/openstack4j.bucklet b/apps/openstacknode/openstack4j.bucklet
deleted file mode 100644
index d9e16f4..0000000
--- a/apps/openstacknode/openstack4j.bucklet
+++ /dev/null
@@ -1,41 +0,0 @@
-INCLUDE_PACKAGES = 'com.google.common.net,com.google.common.io,com.fasterxml.jackson.annotation'
-EXCLUDE_PACKAGES = '!org.openstack4j,!org.openstack4j.*,!org.openstack4j.model.network'
-ALL_PACKAGES = '*'
-
-def get_openstack4j_deps_path():
-
-    WEB_INF_PATH = 'WEB-INF/classes/deps/'
-    OPENSTACK4J_DEPS = [
-        'openstack4j-core',
-        'openstack4j-http-connector',
-        'openstack4j-httpclient',
-    ]
-    OPENSTACK4J_VER = '3.1.0'
-
-    openstack_deps_path = ''
-
-    for dep in OPENSTACK4J_DEPS:
-        name = dep + '-' + OPENSTACK4J_VER + '.jar'
-        path = WEB_INF_PATH + name
-        openstack_deps_path = openstack_deps_path + path + ','
-
-    return openstack_deps_path
-
-def get_jackson_deps_path():
-
-    WEB_INF_PATH = 'WEB-INF/classes/deps/'
-    JACKSON_DEPS_WITH_VER = [
-        'json-patch-1.9.jar',
-        'jackson-coreutils-1.6.jar',
-        'msg-simple-1.1.jar',
-        'btf-1.2.jar',
-        'snakeyaml-1.15.jar'
-    ]
-
-    jackson_deps_path = ''
-
-    for dep in JACKSON_DEPS_WITH_VER:
-        path = WEB_INF_PATH + dep
-        jackson_deps_path = jackson_deps_path + path + ','
-
-    return jackson_deps_path
\ No newline at end of file
diff --git a/apps/openstacktelemetry/BUCK b/apps/openstacktelemetry/BUCK
deleted file mode 100644
index 3636bbb..0000000
--- a/apps/openstacktelemetry/BUCK
+++ /dev/null
@@ -1,43 +0,0 @@
-GRPC_VER = '1.3.1'
-
-BUNDLES = [
-    '//lib:kafka-clients',
-    '//lib:influxdb-java',
-    '//lib:simpleclient',
-    '//lib:simpleclient_common',
-    '//lib:simpleclient_hotspot',
-    '//lib:simpleclient_servlet',
-    '//lib:jetty-http',
-    '//lib:jetty-servlet',
-    '//lib:jetty-server',
-    '//lib:jetty-security',
-    '//lib:jetty-util',
-    '//lib:jetty-io',
-    '//lib:servlet-api',
-    '//lib:javax.ws.rs-api',
-    '//lib:jetty-websocket',
-    '//lib:commons-codec',
-    '//lib:retrofit',
-    '//lib:okhttp',
-    '//lib:logging-interceptor',
-    '//lib:com_google_code_gson_gson',
-    '//lib:okio',
-    '//lib:moshi',
-    '//lib:converter-moshi',
-    '//lib:protobuf-java-3.2.0',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:google-instrumentation-0.3.0',
-    '//apps/openstacktelemetry/api:onos-apps-openstacktelemetry-api',
-    '//apps/openstacktelemetry/app:onos-apps-openstacktelemetry-app',
-]
-
-onos_app (
-    title = 'OpenStack Telemetry Application',
-    category = 'Integration',
-    url = 'https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization',
-    included_bundles = BUNDLES,
-    description = 'SONA Openstack Telemetry Application.',
-    required_apps = [
-        'org.onosproject.openstacknetworking'
-    ]
-)
diff --git a/apps/openstacktelemetry/api/BUCK b/apps/openstacktelemetry/api/BUCK
deleted file mode 100644
index bd27fb6..0000000
--- a/apps/openstacktelemetry/api/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:kafka-clients',
-    '//lib:jersey-client',
-    '//lib:javax.ws.rs-api',
-    '//lib:influxdb-java',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/openstacktelemetry/app/BUCK b/apps/openstacktelemetry/app/BUCK
deleted file mode 100644
index 0d8faa4..0000000
--- a/apps/openstacktelemetry/app/BUCK
+++ /dev/null
@@ -1,52 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//lib:jersey-client',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api',
-    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
-    '//apps/openstacktelemetry/api:onos-apps-openstacktelemetry-api',
-    '//lib:kafka-clients',
-    '//lib:influxdb-java',
-    '//lib:simpleclient',
-    '//lib:simpleclient_common',
-    '//lib:simpleclient_hotspot',
-    '//lib:simpleclient_servlet',
-    '//lib:jetty-http',
-    '//lib:jetty-servlet',
-    '//lib:jetty-server',
-    '//lib:jetty-security',
-    '//lib:jetty-websocket',
-    '//lib:jetty-util',
-    '//lib:jetty-io',
-    '//lib:servlet-api',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:GRPC_1.3',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-protobuf-lite-' + GRPC_VER,
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//web/api:onos-rest-tests',
-    '//lib:TEST_REST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/openstacktelemetry',
-    api_title = 'OpenStack Network Telemetry REST API',
-    api_version = '1.0',
-    api_description = 'OpenStack Network Telemetry REST API',
-    api_package = 'org.onosproject.openstacktelemetry.web',
-)
diff --git a/apps/openstacktroubleshoot/BUCK b/apps/openstacktroubleshoot/BUCK
deleted file mode 100644
index b834c12..0000000
--- a/apps/openstacktroubleshoot/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-BUNDLES = [
-    '//apps/openstacktroubleshoot/api:onos-apps-openstacktroubleshoot-api',
-    '//apps/openstacktroubleshoot/app:onos-apps-openstacktroubleshoot-app',
-]
-
-onos_app (
-    title = 'OpenStack Troubleshoot',
-    category = 'Integration',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'SONA Openstack Troubleshoot Application.',
-    required_apps = [ 'org.onosproject.openstacknetworking' ]
-)
\ No newline at end of file
diff --git a/apps/openstacktroubleshoot/api/BUCK b/apps/openstacktroubleshoot/api/BUCK
deleted file mode 100644
index 27cd4a2..0000000
--- a/apps/openstacktroubleshoot/api/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/openstacktroubleshoot/app/BUCK b/apps/openstacktroubleshoot/app/BUCK
deleted file mode 100644
index b0c072c..0000000
--- a/apps/openstacktroubleshoot/app/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api',
-    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
-    '//apps/openstacktroubleshoot/api:onos-apps-openstacktroubleshoot-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//web/api:onos-rest-tests',
-    '//lib:TEST_REST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/openstacktroubleshoot',
-    api_title = 'OpenStack Troubleshoot API',
-    api_version = '1.0',
-    api_description = 'REST API for OpenStack Troubleshoot',
-    api_package = 'org.onosproject.openstacktroubleshoot.web',
-)
-
diff --git a/apps/openstackvtap/BUCK b/apps/openstackvtap/BUCK
deleted file mode 100644
index e124259..0000000
--- a/apps/openstackvtap/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-BUNDLES = [
-    '//apps/openstackvtap/api:onos-apps-openstackvtap-api',
-    '//apps/openstackvtap/app:onos-apps-openstackvtap-app',
-]
-
-onos_app (
-    title = 'Openstack Vtap Application',
-    category = 'Integration',
-    url = 'https://wiki.onosproject.org/display/ONOS/SONA%3A+DC+Network+Virtualization',
-    included_bundles = BUNDLES,
-    description = 'SONA Openstack Vtap Application.',
-    required_apps = [
-        'org.onosproject.openstacknetworking',
-    ]
-)
diff --git a/apps/openstackvtap/api/BUCK b/apps/openstackvtap/api/BUCK
deleted file mode 100644
index 9fde222..0000000
--- a/apps/openstackvtap/api/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS
-)
diff --git a/apps/openstackvtap/app/BUCK b/apps/openstackvtap/app/BUCK
deleted file mode 100644
index 3656f6c..0000000
--- a/apps/openstackvtap/app/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//lib:jersey-client',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-    '//apps/openstacknetworking/api:onos-apps-openstacknetworking-api',
-    '//apps/openstacknode/api:onos-apps-openstacknode-api',
-    '//apps/openstackvtap/api:onos-apps-openstackvtap-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//web/api:onos-rest-tests',
-    '//lib:TEST_REST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/openstackvtap',
-    api_title = 'OpenStack Vtap REST API',
-    api_version = '1.0',
-    api_description = 'OpenStack Vtap REST API',
-    api_package = 'org.onosproject.openstackvtap.web',
-)
diff --git a/apps/optical-model/BUCK b/apps/optical-model/BUCK
deleted file mode 100644
index de3def8..0000000
--- a/apps/optical-model/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.optical-model',
-    # Is there a way to change BUCK target name properly?
-    #name = 'onos-optical-model',
-    feature_coords = 'org.onosproject:onos-optical-model:%s' % (ONOS_VERSION),
-    title = 'Optical Network Model',
-    category = 'Optical',
-    url = 'https://wiki.onosproject.org/x/C4m',
-    description = 'ONOS optical information model.',
-    required_apps = [ ],
-)
diff --git a/apps/optical-rest/BUCK b/apps/optical-rest/BUCK
deleted file mode 100644
index 9c47cb8..0000000
--- a/apps/optical-rest/BUCK
+++ /dev/null
@@ -1,35 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//apps/optical-model:onos-apps-optical-model'
-]
-
-APPS = [
-    'org.onosproject.optical-model',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//utils/osgi:onlab-osgi-tests',
-    '//web/api:onos-rest-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/optical',
-    api_title = 'Optical Network Model REST API',
-    api_version = '1.0',
-    api_description = 'REST API for Optical Model',
-    api_package = 'org.onosproject.net.optical.rest'
-)
-
-onos_app (
-    title = 'Optical Network Model REST API',
-    category = 'Optical',
-    url = 'http://onosproject.org',
-    description = 'This application provides REST support for optical network model.',
-    required_apps = APPS
-)
diff --git a/apps/p4-tutorial/mytunnel/BUCK b/apps/p4-tutorial/mytunnel/BUCK
deleted file mode 100644
index 7945c93..0000000
--- a/apps/p4-tutorial/mytunnel/BUCK
+++ /dev/null
@@ -1,24 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//apps/p4-tutorial/pipeconf:onos-apps-p4-tutorial-pipeconf',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-BUNDLES = [
-    '//apps/p4-tutorial/mytunnel:onos-apps-p4-tutorial-mytunnel',
-]
-
-onos_app (
-    app_name = 'org.onosproject.p4tutorial.mytunnel',
-    title = 'MyTunnel Demo App',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Provides forwarding between each pair of hosts via MyTunnel protocol',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.p4tutorial.pipeconf',
-    ]
-)
diff --git a/apps/p4-tutorial/pipeconf/BUCK b/apps/p4-tutorial/pipeconf/BUCK
deleted file mode 100644
index 6bdb389..0000000
--- a/apps/p4-tutorial/pipeconf/BUCK
+++ /dev/null
@@ -1,27 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:minimal-json',
-    '//protocols/p4runtime/model:onos-protocols-p4runtime-model',
-    '//drivers/default:onos-drivers-default',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-BUNDLES = [
-    '//apps/p4-tutorial/pipeconf:onos-apps-p4-tutorial-pipeconf',
-]
-
-onos_app (
-    app_name = 'org.onosproject.p4tutorial.pipeconf',
-    title = 'P4 Tutorial Pipeconf',
-    category = 'Pipeconf',
-    url = 'http://onosproject.org',
-    description = 'Provides pipeconf for the ONOS-P4 Tutorial',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.drivers.p4runtime',
-    ]
-)
diff --git a/apps/packet-stats/BUCK b/apps/packet-stats/BUCK
deleted file mode 100644
index e7c77b1..0000000
--- a/apps/packet-stats/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//core/store/serializers:onos-core-serializers',
-    '//core/store/primitives:onos-core-primitives',
-    '//core/api:onos-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Packet Statistics',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Application to calculate the number of packets of different types',
-)
diff --git a/apps/pathpainter/BUCK b/apps/pathpainter/BUCK
deleted file mode 100644
index bbb142a..0000000
--- a/apps/pathpainter/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'Path Visualization',
-    category = 'GUI',
-    url = 'http://onosproject.org',
-    description = 'Extends the GUI topology view by adding an overlay that allows the operator ' +
-        'to visualize topology paths using various forms of path-finding algorithms such as ' +
-        'the Dijkstra shortest path using default link metric (ONOS default), using geographic ' +
-        'distances, disjoint paths, etc.',
-)
diff --git a/apps/pce/BUCK b/apps/pce/BUCK
deleted file mode 100644
index cd306b8..0000000
--- a/apps/pce/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-BUNDLES = [
-    '//apps/pce/bandwidthmgmt:onos-apps-pce-bandwidthmgmt',
-    '//apps/pce/app:onos-apps-pce-app',
-    '//apps/pce/pcerest:onos-apps-pce-pcerest',
-    '//apps/pce/pceweb:onos-apps-pce-pceweb',
-]
-
-onos_app (
-  app_name='org.onosproject.pce',
-    title = 'PCE APP',
-    category = 'PCE',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'PCE Service App.',
-)
\ No newline at end of file
diff --git a/apps/pce/app/BUCK b/apps/pce/app/BUCK
deleted file mode 100644
index 7f3869f..0000000
--- a/apps/pce/app/BUCK
+++ /dev/null
@@ -1,35 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:COMPILE',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:org.osgi.compendium',
-    '//cli:onos-cli',
-    '//core/store/serializers:onos-core-serializers',
-    '//utils/rest:onlab-rest',
-    '//incubator/api:onos-incubator-api',
-    '//apps/pcep-api:onos-apps-pcep-api',
-    '//utils/misc:onlab-misc',
-    '//core/api:onos-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:javax.ws.rs-api',
-    '//apps/pce/bandwidthmgmt:onos-apps-pce-bandwidthmgmt',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//incubator/api:onos-incubator-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS
-)
-
-onos_app (
-    app_name='org.onosproject.pce.app',
-    title = 'PCE',
-    category = 'default',
-    url = 'http://onosproject.org',
-    description = 'PCE as centeral controller App.',
-)
diff --git a/apps/pce/bandwidthmgmt/BUCK b/apps/pce/bandwidthmgmt/BUCK
deleted file mode 100644
index c5f0b25..0000000
--- a/apps/pce/bandwidthmgmt/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/pcep-api:onos-apps-pcep-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS
-)
-
-onos_app (
-    app_name = 'org.onosproject.bandwidthmgmt',
-    title = 'PCE Bandwidth Management',
-    category = 'default',
-    url = 'http://onosproject.org',
-    description = 'PCE Bandwidth Management.',
-)
diff --git a/apps/pce/pcerest/BUCK b/apps/pce/pcerest/BUCK
deleted file mode 100644
index bed98d2..0000000
--- a/apps/pce/pcerest/BUCK
+++ /dev/null
@@ -1,27 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//apps/pce/app:onos-apps-pce-app',
-    '//core/store/serializers:onos-core-serializers',
-    '//core/api:onos-api',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//lib:minimal-json',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS
-)
-
-onos_app (
-    title = 'PCE REST API',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Tunnel Service between network devices via REST interface',
-)
diff --git a/apps/pce/pceweb/BUCK b/apps/pce/pceweb/BUCK
deleted file mode 100644
index a4a9a34..0000000
--- a/apps/pce/pceweb/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//apps/pce/app:onos-apps-pce-app',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-    '//core/api:onos-api',
-    '//incubator/api:onos-incubator-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'PCE REST API',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Allows the user to visualize different types of paths between network entities',
-)
diff --git a/apps/pcep-api/BUCK b/apps/pcep-api/BUCK
deleted file mode 100644
index 5751b06..0000000
--- a/apps/pcep-api/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'PCEP Protocol API',
-    category = 'Protocol',
-    url = 'http://onosproject.org',
-    description = 'PCEP protocol API.',
-)
diff --git a/apps/pi-demo/common/BUCK b/apps/pi-demo/common/BUCK
deleted file mode 100644
index 132086c..0000000
--- a/apps/pi-demo/common/BUCK
+++ /dev/null
@@ -1,7 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/apps/pi-demo/ecmp/BUCK b/apps/pi-demo/ecmp/BUCK
deleted file mode 100644
index 71dcc31..0000000
--- a/apps/pi-demo/ecmp/BUCK
+++ /dev/null
@@ -1,27 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:minimal-json',
-    '//apps/pi-demo/common:onos-apps-pi-demo-common',
-    '//pipelines/basic:onos-pipelines-basic',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-BUNDLES = [
-    '//apps/pi-demo/common:onos-apps-pi-demo-common',
-    '//apps/pi-demo/ecmp:onos-apps-pi-demo-ecmp',
-]
-
-onos_app (
-    app_name = 'org.onosproject.pi-ecmp',
-    title = 'PI Demo ECMP Fabric',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Provides ECMP support for a 2-stage clos fabric topology of PI-enabled devices',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.pipelines.basic'
-    ]
-)
diff --git a/apps/pim/BUCK b/apps/pim/BUCK
deleted file mode 100644
index 3eab5a8..0000000
--- a/apps/pim/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/route-service/api:onos-apps-route-service-api',
-]
-
-BUNDLES = [
-    '//apps/routing-api:onos-apps-routing-api',
-    ':onos-apps-pim',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'Protocol Independent Multicast Emulation',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Protocol independent multicast emulation.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.route-service' ],
-)
diff --git a/apps/powermanagement/BUCK b/apps/powermanagement/BUCK
deleted file mode 100644
index 41d7956..0000000
--- a/apps/powermanagement/BUCK
+++ /dev/null
@@ -1,30 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//core/store/serializers:onos-core-serializers',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/powermanagement',
-    api_title = 'Power Management API',
-    api_version = '1.0',
-    api_description = 'REST API for Power Management',
-    api_package = 'org.onosproject.powermanagement',
-)
-
-onos_app (
-    title = 'Power Management',
-    category = 'Monitoring',
-    url = 'http://onosproject.org',
-    description = 'This application provides northbound interfaces for monitoring and ' +
-        'configuring power.',
-)
diff --git a/apps/proxyarp/BUCK b/apps/proxyarp/BUCK
deleted file mode 100644
index 6923d0d..0000000
--- a/apps/proxyarp/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Proxy ARP/NDP',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Proxy ARP/NDP application.',
-)
diff --git a/apps/rabbitmq/BUCK b/apps/rabbitmq/BUCK
deleted file mode 100644
index c283951..0000000
--- a/apps/rabbitmq/BUCK
+++ /dev/null
@@ -1,33 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-    '//lib:com_google_guava_guava',
-    '//lib:com_google_code_gson_gson',
-    '//lib:amqp-client',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-BUNDLES = [
-    '//lib:com_google_code_gson_gson',
-    '//lib:amqp-client',
-    '//apps/rabbitmq:onos-apps-rabbitmq',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'Rabbit MQ Integration',
-    category = 'Integration',
-    url = 'http://onosproject.org',
-    description = 'Rabbit MQ application.',
-    required_apps = [ 'org.onosproject.proxyarp' ],
-    included_bundles = BUNDLES,
-)
diff --git a/apps/reactive-routing/BUCK b/apps/reactive-routing/BUCK
deleted file mode 100644
index 4157a55..0000000
--- a/apps/reactive-routing/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:concurrent-trees',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/intentsync:onos-apps-intentsync',
-    '//apps/route-service/api:onos-apps-route-service-api',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'SDN-IP Reactive Routing',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'SDN-IP reactive routing application.',
-    required_apps = [ 'org.onosproject.intentsynchronizer', 'org.onosproject.sdnip', 'org.onosproject.route-service'],
-)
diff --git a/apps/restconf/BUCK b/apps/restconf/BUCK
deleted file mode 100644
index 2ce6c79..0000000
--- a/apps/restconf/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-BUNDLES = [
-    '//apps/restconf/api:onos-apps-restconf-api',
-    '//apps/restconf/utils:onos-apps-restconf-utils',
-    '//apps/restconf/restconfmgr:onos-apps-restconf-restconfmgr',
-]
-
-APPS = [
-    'org.onosproject.yang',
-    'org.onosproject.config',
-]
-
-onos_app (
-    app_name = 'org.onosproject.restconf',
-    title = 'RESTCONF Application Module',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    required_apps = APPS,
-)
diff --git a/apps/restconf/api/BUCK b/apps/restconf/api/BUCK
deleted file mode 100644
index 39a3872..0000000
--- a/apps/restconf/api/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:jersey-client',
-    '//lib:javax.ws.rs-api',
-    '//lib:jersey-server',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/restconf/restconfmgr/BUCK b/apps/restconf/restconfmgr/BUCK
deleted file mode 100644
index 742d1cc..0000000
--- a/apps/restconf/restconfmgr/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:ONOS_YANG',
-    '//lib:JACKSON',
-    '//lib:jersey-client',
-    '//lib:jersey-server',
-    '//lib:javax.ws.rs-api',
-    '//incubator/api:onos-incubator-api',
-    '//lib:COMPILE',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/restconf/api:onos-apps-restconf-api',
-    '//apps/restconf/utils:onos-apps-restconf-utils',
-    '//apps/config:onos-apps-config',
-    '//lib:onos-yang-runtime',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/restconf/utils/BUCK b/apps/restconf/utils/BUCK
deleted file mode 100644
index 8ebc904..0000000
--- a/apps/restconf/utils/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:jersey-client',
-    '//lib:jersey-server',
-    '//lib:javax.ws.rs-api',
-    '//lib:easymock',
-    '//utils/rest:onlab-rest',
-    '//apps/restconf/api:onos-apps-restconf-api',
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-compiler-api',
-    '//lib:onos-yang-runtime',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/roadm/BUCK b/apps/roadm/BUCK
deleted file mode 100644
index 042bd52..0000000
--- a/apps/roadm/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/optical-model:onos-apps-optical-model',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    title = 'ROADM',
-    category = 'Optical',
-    url = 'http://onosproject.org',
-    description = 'This application provides an interface and web GUI for monitoring and ' +
-        'configuring power on ROADM devices.',
-    required_apps = [ 'org.onosproject.optical-model' ],
-)
diff --git a/apps/route-service/BUCK b/apps/route-service/BUCK
deleted file mode 100644
index d7ebe99..0000000
--- a/apps/route-service/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-BUNDLES = [
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//apps/route-service/app:onos-apps-route-service-app',
-]
-
-onos_app (
-    title = 'Route Service Server',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/route-service/api/BUCK b/apps/route-service/api/BUCK
deleted file mode 100644
index 3b7812b..0000000
--- a/apps/route-service/api/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/route-service/app/BUCK b/apps/route-service/app/BUCK
deleted file mode 100644
index f9233bb..0000000
--- a/apps/route-service/app/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:concurrent-trees',
-    '//lib:javax.ws.rs-api',
-    '//lib:jersey-server',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-    '//utils/rest:onlab-rest',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//apps/route-service/api:onos-apps-route-service-api-tests',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/routeservice',
-    api_title = 'Route Service App',
-    api_version = '1.0',
-    api_description = 'REST API for Route Service App',
-    api_package = 'org.onosproject.routeservice.rest',
-)
diff --git a/apps/routeradvertisement/BUCK b/apps/routeradvertisement/BUCK
deleted file mode 100644
index c414ec3..0000000
--- a/apps/routeradvertisement/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    title = 'IPv6 RA Generator',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Application for generating IPv6 RAs',
-)
diff --git a/apps/routing-api/BUCK b/apps/routing-api/BUCK
deleted file mode 100644
index 8db5219..0000000
--- a/apps/routing-api/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/apps/routing/common/BUCK b/apps/routing/common/BUCK
deleted file mode 100644
index 2bd6aec..0000000
--- a/apps/routing/common/BUCK
+++ /dev/null
@@ -1,24 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:concurrent-trees',
-    '//cli:onos-cli',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//core/common:onos-core-common',
-    '//lib:io_netty_netty',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//incubator/api:onos-incubator-api-tests',
-    '//apps/routing-api:onos-apps-routing-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/routing/cpr/BUCK b/apps/routing/cpr/BUCK
deleted file mode 100644
index 90d8634..0000000
--- a/apps/routing/cpr/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//incubator/api:onos-incubator-api-tests',
-    '//apps/routing-api:onos-apps-routing-api-tests',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-BUNDLES = [
-    '//apps/routing/common:onos-apps-routing-common',
-    '//apps/routing/cpr:onos-apps-routing-cpr',
-    '//apps/routing-api:onos-apps-routing-api',
-]
-
-onos_app (
-    app_name = 'org.onosproject.cpr',
-    title = 'Control Plane Redirect',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Redirects routing control traffic to a control plane',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/routing/fibinstaller/BUCK b/apps/routing/fibinstaller/BUCK
deleted file mode 100644
index 94bcab2..0000000
--- a/apps/routing/fibinstaller/BUCK
+++ /dev/null
@@ -1,33 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/route-service/api:onos-apps-route-service-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//incubator/api:onos-incubator-api-tests',
-    '//apps/routing-api:onos-apps-routing-api-tests',
-    '//apps/route-service/api:onos-apps-route-service-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-BUNDLES = [
-    '//apps/routing/fibinstaller:onos-apps-routing-fibinstaller',
-    '//apps/routing-api:onos-apps-routing-api',
-]
-
-onos_app (
-    app_name = 'org.onosproject.fibinstaller',
-    title = 'FIB Installer',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Installs routing rules into switches',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.route-service' ],
-)
diff --git a/apps/routing/fpm/BUCK b/apps/routing/fpm/BUCK
deleted file mode 100644
index c11818b..0000000
--- a/apps/routing/fpm/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-BUNDLES = [
-    '//apps/routing/common:onos-apps-routing-common',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/routing/fpm/api:onos-apps-routing-fpm-api',
-    '//apps/routing/fpm/app:onos-apps-routing-fpm-app',
-]
-
-onos_app (
-    app_name = 'org.onosproject.fpm',
-    title = 'FIB Push Manager (FPM) Route Receiver',
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Receives/Transmits routes from external routing daemon over FPM protocol',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.route-service' ],
-)
\ No newline at end of file
diff --git a/apps/routing/fpm/api/BUCK b/apps/routing/fpm/api/BUCK
deleted file mode 100644
index f5a98fc..0000000
--- a/apps/routing/fpm/api/BUCK
+++ /dev/null
@@ -1,7 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/routing/fpm/app/BUCK b/apps/routing/fpm/app/BUCK
deleted file mode 100644
index adf50c3..0000000
--- a/apps/routing/fpm/app/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/routing/fpm/api:onos-apps-routing-fpm-api',
-    '//lib:io_netty_netty',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/scalablegateway/BUCK b/apps/scalablegateway/BUCK
deleted file mode 100644
index a7a6d74..0000000
--- a/apps/scalablegateway/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-  title = 'Scalable Gateway',
-  category = 'Traffic Engineering',
-  url = 'http://onosproject.org',
-  description = 'Scalable gateway service',
-)
diff --git a/apps/sdnip/BUCK b/apps/sdnip/BUCK
deleted file mode 100644
index 4a807cf..0000000
--- a/apps/sdnip/BUCK
+++ /dev/null
@@ -1,36 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//apps/intentsync:onos-apps-intentsync',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli'
-]
-
-BUNDLES = [
-    '//apps/sdnip:onos-apps-sdnip',
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/routing/common:onos-apps-routing-common',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//apps/routing-api:onos-apps-routing-api-tests',
-    '//apps/route-service/api:onos-apps-route-service-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-  title = 'SDN-IP',
-  category = 'Traffic Engineering',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-  description = 'SDN-IP peering application',
-  required_apps = [ 'org.onosproject.intentsynchronizer', 'org.onosproject.route-service' ],
-)
diff --git a/apps/segmentrouting/BUCK b/apps/segmentrouting/BUCK
deleted file mode 100644
index 1b3990f..0000000
--- a/apps/segmentrouting/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-BUNDLES = [
-    '//apps/segmentrouting/app:onos-apps-segmentrouting-app',
-    '//apps/segmentrouting/web:onos-apps-segmentrouting-web',
-]
-
-onos_app (
-    title = 'Segment Routing',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'Segment routing application.',
-    required_apps = [ 'org.onosproject.route-service', 'org.onosproject.mcast' ],
-)
diff --git a/apps/segmentrouting/app/BUCK b/apps/segmentrouting/app/BUCK
deleted file mode 100644
index 7deda13..0000000
--- a/apps/segmentrouting/app/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//core/common:onos-core-common',
-    '//core/store/serializers:onos-core-serializers',
-    '//incubator/api:onos-incubator-api',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//apps/mcast/api:onos-apps-mcast-api',
-    '//apps/mcast/cli:onos-apps-mcast-cli',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/net:onos-core-net',
-    '//incubator/api:onos-incubator-api-tests',
-    '//apps/route-service/api:onos-apps-route-service-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/segmentrouting/web/BUCK b/apps/segmentrouting/web/BUCK
deleted file mode 100644
index 9706438..0000000
--- a/apps/segmentrouting/web/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//apps/segmentrouting/app:onos-apps-segmentrouting-app',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    web_context = '/onos/segmentrouting',
-    api_title = 'Segment Routing REST API',
-    api_version = '1.0',
-    api_description = 'REST API for Segment Routing Application',
-    api_package = 'org.onosproject.segmentrouting.web',
-)
diff --git a/apps/simplefabric/BUCK b/apps/simplefabric/BUCK
deleted file mode 100644
index 177b953..0000000
--- a/apps/simplefabric/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:concurrent-trees',
-    '//lib:javax.ws.rs-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-]
-
-BUNDLES = [
-    '//apps/simplefabric:onos-apps-simplefabric',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/v1/simplefabric',
-)
-
-onos_app (
-  title = 'SimpleFabric',
-  category = 'Traffic Engineering',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-  description = 'Simple Fabric application',
-  required_apps = [ 'org.onosproject.openflow-base', 'org.onosproject.lldpprovider', 'org.onosproject.hostprovider' ],
-)
diff --git a/apps/t3/BUCK b/apps/t3/BUCK
deleted file mode 100644
index c06bf7c..0000000
--- a/apps/t3/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-BUNDLES = [
-    '//apps/t3/web:onos-apps-t3-web',
-    '//apps/t3/app:onos-apps-t3-app',
-]
-
-onos_app (
-   title = 'Trellis Troubleshooting Toolkit',
-   category = 'Utilities',
-   url = 'https://wiki.opencord.org/pages/viewpage.action?pageId=4456974',
-   description = 'Provides static analysis of flows and groups ' +
-   'to determine the possible paths a packet may take.',
-   required_apps = [
-           'org.onosproject.segmentrouting',
-           'org.onosproject.route-service',
-           'org.onosproject.mcast',
-   ],
-   included_bundles = BUNDLES,
-   app_name = 'org.onosproject.t3'
-)
diff --git a/apps/t3/app/BUCK b/apps/t3/app/BUCK
deleted file mode 100644
index 55092ea..0000000
--- a/apps/t3/app/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//core/store/primitives:onos-core-primitives',
-    '//lib:JACKSON',
-    '//lib:jackson-databind',
-    '//core/api:onos-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//drivers/default:onos-drivers-default',
-    '//apps/segmentrouting/app:onos-apps-segmentrouting-app',
-    '//apps/route-service/api:onos-apps-route-service-api',
-    '//apps/mcast/api:onos-apps-mcast-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/misc:onlab-misc',
-    '//apps/route-service/api:onos-apps-route-service-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/t3/web/BUCK b/apps/t3/web/BUCK
deleted file mode 100644
index fb837c4..0000000
--- a/apps/t3/web/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-   '//lib:CORE_DEPS',
-   '//lib:KRYO',
-   '//core/api:onos-api',
-   '//lib:org.apache.karaf.shell.console',
-   '//utils/rest:onlab-rest',
-   '//lib:JACKSON',
-   '//lib:javax.ws.rs-api',
-   '//lib:jersey-server',
-   '//apps/t3/app:onos-apps-t3-app',
-]
-osgi_jar (
-   deps = COMPILE_DEPS,
-   web_context = '/onos/v1/t3',
-   api_title = 'T3 REST API',
-   api_version = '1.0',
-   api_description = 'REST API for T3',
-   api_package = 'org.onosproject.t3.rest',
-)
diff --git a/apps/test/cluster-ha/BUCK b/apps/test/cluster-ha/BUCK
deleted file mode 100644
index d1ebbc9..0000000
--- a/apps/test/cluster-ha/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:KRYO',
-]
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-onos_app (
-    title = 'Cluster HA Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Test for ONOS Cluster HA',
-)
diff --git a/apps/test/demo/BUCK b/apps/test/demo/BUCK
deleted file mode 100644
index 5623e04..0000000
--- a/apps/test/demo/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    web_context = '/onos/demo',
-    api_title = 'Flow Throughput Demo',
-    api_version = '1.0',
-    api_description = 'REST API for Demo',
-    api_package = 'org.onosproject.demo',
-)
-
-onos_app (
-    title = 'Flow Throughput Demo',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'APIs for interacting with the flow throughput test application.',
-)
diff --git a/apps/test/distributed-primitives/BUCK b/apps/test/distributed-primitives/BUCK
deleted file mode 100644
index eed561a..0000000
--- a/apps/test/distributed-primitives/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.distributedprimitives',
-    title = 'Distributed Primitives Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'ONOS app to test distributed primitives.',
-)
diff --git a/apps/test/election/BUCK b/apps/test/election/BUCK
deleted file mode 100644
index 67077c9..0000000
--- a/apps/test/election/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Master Election Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Master election test application.',
-)
diff --git a/apps/test/flow-perf/BUCK b/apps/test/flow-perf/BUCK
deleted file mode 100644
index 522647b..0000000
--- a/apps/test/flow-perf/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Flow Performance Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Messaging performance test application.',
-)
diff --git a/apps/test/intent-perf/BUCK b/apps/test/intent-perf/BUCK
deleted file mode 100644
index 6187b8c..0000000
--- a/apps/test/intent-perf/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.intentperf',
-    title = 'Intent Performance Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Intent performance test application.',
-)
diff --git a/apps/test/loadtest/BUCK b/apps/test/loadtest/BUCK
deleted file mode 100644
index 93f15ff..0000000
--- a/apps/test/loadtest/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Distributed Load Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Distributed consensus load test application.',
-)
diff --git a/apps/test/messaging-perf/BUCK b/apps/test/messaging-perf/BUCK
deleted file mode 100644
index 9b12fd2..0000000
--- a/apps/test/messaging-perf/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Messaging Performance Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Messaging performance test application.',
-)
diff --git a/apps/test/netcfg-monitor/BUCK b/apps/test/netcfg-monitor/BUCK
deleted file mode 100644
index f6051d9..0000000
--- a/apps/test/netcfg-monitor/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Network Configuration Monitor Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Network configuration monitor test application.',
-)
diff --git a/apps/test/primitive-perf/BUCK b/apps/test/primitive-perf/BUCK
deleted file mode 100644
index be70e00..0000000
--- a/apps/test/primitive-perf/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.primitiveperf',
-    title = 'Primitive Performance Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Primitive performance test application.',
-)
diff --git a/apps/test/proxy/BUCK b/apps/test/proxy/BUCK
deleted file mode 100644
index 4b443d3..0000000
--- a/apps/test/proxy/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.proxytest',
-    title = 'Proxy Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Proxy test application.',
-)
diff --git a/apps/test/route-scale/BUCK b/apps/test/route-scale/BUCK
deleted file mode 100644
index d0853d4..0000000
--- a/apps/test/route-scale/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//apps/route-service/api:onos-apps-route-service-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.routescale',
-    title = 'Route and Flow Scalability Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Route and flow scalability test facility.',
-    required_apps = [ 'org.onosproject.route-service' ],
-)
diff --git a/apps/test/transaction-perf/BUCK b/apps/test/transaction-perf/BUCK
deleted file mode 100644
index 0caa955..0000000
--- a/apps/test/transaction-perf/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//lib:javax.ws.rs-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Transaction Performance Test',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Transaction performance test application.',
-)
diff --git a/apps/tetopology/BUCK b/apps/tetopology/BUCK
deleted file mode 100644
index 0d91b2d..0000000
--- a/apps/tetopology/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-BUNDLES = [
-  '//apps/tetopology/api:onos-apps-tetopology-api',
-  '//apps/tetopology/app:onos-apps-tetopology-app',
-]
-
-onos_app (
-    app_name = 'org.onosproject.tetopology',
-    title = 'TE Topology Core',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Application to create and manage hierarchical TE topologies.',
-    included_bundles = BUNDLES,
-)
diff --git a/apps/tetopology/api/BUCK b/apps/tetopology/api/BUCK
deleted file mode 100644
index 2b27800..0000000
--- a/apps/tetopology/api/BUCK
+++ /dev/null
@@ -1,7 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/tetopology/app/BUCK b/apps/tetopology/app/BUCK
deleted file mode 100644
index eb92dc7..0000000
--- a/apps/tetopology/app/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//apps/tetopology/api:onos-apps-tetopology-api',
-    '//incubator/api:onos-incubator-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-    '//incubator/api:onos-incubator-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/tetunnel/BUCK b/apps/tetunnel/BUCK
deleted file mode 100644
index 73065c2..0000000
--- a/apps/tetunnel/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-BUNDLES = [
-  '//apps/tetunnel/api:onos-apps-tetunnel-api',
-  '//apps/tetunnel/app:onos-apps-tetunnel-app',
-]
-
-onos_app (
-    app_name = 'org.onosproject.tetunnel',
-    title = 'TE Tunnel Core',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Application to create and manage TE tunnels.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.tetopology' ],
-)
diff --git a/apps/tetunnel/api/BUCK b/apps/tetunnel/api/BUCK
deleted file mode 100644
index eea4ec2..0000000
--- a/apps/tetunnel/api/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//apps/tetopology/api:onos-apps-tetopology-api',
-    '//incubator/api:onos-incubator-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/tetunnel/app/BUCK b/apps/tetunnel/app/BUCK
deleted file mode 100644
index aef55f0..0000000
--- a/apps/tetunnel/app/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//apps/tetopology/api:onos-apps-tetopology-api',
-    '//apps/tetunnel/api:onos-apps-tetunnel-api',
-    '//incubator/api:onos-incubator-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-    '//incubator/api:onos-incubator-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/virtualbng/BUCK b/apps/virtualbng/BUCK
deleted file mode 100644
index 036ce08..0000000
--- a/apps/virtualbng/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:jersey-client',
-    '//lib:javax.ws.rs-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'Virtual Broadband Gateway',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'A virtual Broadband Network Gateway(BNG) application.',
-)
diff --git a/apps/vpls/BUCK b/apps/vpls/BUCK
deleted file mode 100644
index d07376f..0000000
--- a/apps/vpls/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:jersey-client',
-    '//lib:javax.ws.rs-api',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//utils/rest:onlab-rest',
-    '//incubator/api:onos-incubator-api',
-    '//core/store/serializers:onos-core-serializers'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    title = 'VLAN L2 Broadcast Network',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    description = 'Application to create L2 broadcast network using VLAN.',
-    required_apps = [ 'org.onosproject.intentsynchronizer' ],
-)
diff --git a/apps/vrouter/BUCK b/apps/vrouter/BUCK
deleted file mode 100644
index bc51d54..0000000
--- a/apps/vrouter/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-]
-
-BUNDLES = [
-    '//apps/routing-api:onos-apps-routing-api',
-    '//apps/routing/common:onos-apps-routing-common',
-    '//apps/vrouter:onos-apps-vrouter',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Virtual Router',
-    category = 'Traffic Engineering',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'Virtual router (vRouter) application.',
-    required_apps = [ 'org.onosproject.fibinstaller', 'org.onosproject.cpr', 'org.onosproject.fpm' ],
-)
diff --git a/apps/vtn/BUCK b/apps/vtn/BUCK
deleted file mode 100644
index 3afd56d..0000000
--- a/apps/vtn/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-BUNDLES = [
-    '//apps/vtn/vtnrsc:onos-apps-vtn-vtnrsc',
-    '//apps/vtn/sfcmgr:onos-apps-vtn-sfcmgr',
-    '//apps/vtn/vtnmgr:onos-apps-vtn-vtnmgr',
-    '//apps/vtn/vtnweb:onos-apps-vtn-vtnweb',
-]
-
-onos_app (
-  title = 'OPNFV',
-  url = 'http://onosproject.org',
-  category = 'Integration',
-  included_bundles = BUNDLES,
-  description = 'ONOS framework applications',
-)
diff --git a/apps/vtn/sfcmgr/BUCK b/apps/vtn/sfcmgr/BUCK
deleted file mode 100644
index 9941797..0000000
--- a/apps/vtn/sfcmgr/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/vtn/vtnrsc:onos-apps-vtn-vtnrsc',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/vtn/vtnmgr/BUCK b/apps/vtn/vtnmgr/BUCK
deleted file mode 100644
index fdaf355..0000000
--- a/apps/vtn/vtnmgr/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//core/store/serializers:onos-core-serializers',
-    '//cli:onos-cli',
-    '//apps/vtn/vtnrsc:onos-apps-vtn-vtnrsc',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
diff --git a/apps/vtn/vtnrsc/BUCK b/apps/vtn/vtnrsc/BUCK
deleted file mode 100644
index c4d5920..0000000
--- a/apps/vtn/vtnrsc/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/apps/vtn/vtnweb/BUCK b/apps/vtn/vtnweb/BUCK
deleted file mode 100644
index 53a640e..0000000
--- a/apps/vtn/vtnweb/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-    '//apps/vtn/vtnrsc:onos-apps-vtn-vtnrsc',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//utils/osgi:onlab-osgi-tests',
-    '//web/api:onos-rest-tests',
-    '//lib:minimal-json',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/vtn',
-)
diff --git a/apps/workflow/BUCK b/apps/workflow/BUCK
deleted file mode 100644
index d7e5d1b..0000000
--- a/apps/workflow/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-BUNDLES = [
-    '//apps/workflow/api:onos-apps-workflow-api',
-    '//apps/workflow/app:onos-apps-workflow-app',
-]
-
-onos_app (
-    category = 'Utility',
-    description = "Workflow application",
-    included_bundles = BUNDLES,
-    title = 'Workflow',
-    url = 'http://onosproject.org',
-)
diff --git a/apps/workflow/api/BUCK b/apps/workflow/api/BUCK
deleted file mode 100644
index f9461af..0000000
--- a/apps/workflow/api/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:jackson-core',
-    '//lib:jackson-annotations',
-    '//lib:jackson-databind',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/workflow/app/BUCK b/apps/workflow/app/BUCK
deleted file mode 100644
index aa0e62a..0000000
--- a/apps/workflow/app/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:jsch',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:jackson-core',
-    '//lib:jackson-annotations',
-    '//lib:jackson-databind',
-    '//cli:onos-cli',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/workflow/api:onos-apps-workflow-api',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-)
diff --git a/apps/yang-gui/BUCK b/apps/yang-gui/BUCK
deleted file mode 100644
index 7e971f4..0000000
--- a/apps/yang-gui/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:ONOS_YANG',
-    '//lib:onos-yang-runtime',
-    '//apps/yang:onos-apps-yang',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    title = 'YANG Runtime GUI',
-    category = 'GUI',
-    url = 'http://onosproject.org',
-    description = 'Adds GUI extension that allows the operator to view the list of currently ' +
-        'registered YANG models, and their YANG sources. It also provides means for compiling ' +
-        'source YANG files (*.yang, *.zip, *.jar) on the fly and directly from the GUI using ' +
-        'drag-n-drop.<p/>User can simply compress a set of YANG source files and drop it on the ' +
-        'YANG Models GUI view to automatically compile and then register the compiled YANG models.',
-    required_apps = [ 'org.onosproject.yang' ],
-)
diff --git a/apps/yang/BUCK b/apps/yang/BUCK
deleted file mode 100644
index a7319ea..0000000
--- a/apps/yang/BUCK
+++ /dev/null
@@ -1,53 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:JACKSON',
-  '//core/api:onos-api',
-  '//core/common:onos-core-common',
-  '//cli:onos-cli',
-  '//lib:org.apache.karaf.shell.console',
-  '//lib:jackson-core',
-  '//lib:onos-yang-model',
-  '//lib:onos-yang-compiler-api',
-  '//lib:onos-yang-runtime',
-  '//lib:onos-yang-serializers-json',
-  '//lib:onos-yang-serializers-xml',
-  '//lib:onos-yang-serializers-utils',
-  '//lib:org.apache.servicemix.bundles.dom4j',
-]
-
-BUNDLES = [
-  '//lib:onos-yang-model',
-  '//lib:onos-yang-compiler-api',
-  '//lib:onos-yang-runtime',
-  '//lib:onos-yang-serializers-json',
-  '//lib:onos-yang-serializers-xml',
-  '//lib:onos-yang-serializers-utils',
-  '//apps/yang:onos-apps-yang',
-  '//apps/yang/web:onos-apps-yang-web',
-]
-
-EXCLUDED_BUNDLES = [
-  '//lib:org.apache.servicemix.bundles.dom4j',
-]
-
-TEST_DEPS = [
-  '//lib:TEST_ADAPTERS',
-  '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests(
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-)
-
-onos_app(
-  title = 'YANG Compiler and Runtime',
-  category = 'Utility',
-  url = 'http://onosproject.org',
-  description = 'Provides ability to register compiled YANG models or even to compile YANG source ' +
-    'files on the fly. Registering YANG models allows other ONOS subsystems to interact with ' +
-    'orchestrators or individual network devices using XML or JSON data structured in accordance ' +
-    'with those models.',
-  included_bundles = BUNDLES,
-  excluded_bundles = EXCLUDED_BUNDLES,
-)
diff --git a/apps/yang/web/BUCK b/apps/yang/web/BUCK
deleted file mode 100644
index b988cc6..0000000
--- a/apps/yang/web/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:JACKSON',
-  '//lib:javax.ws.rs-api',
-  '//utils/rest:onlab-rest',
-  '//lib:jersey-media-multipart',
-  '//lib:onos-yang-model',
-  '//lib:onos-yang-compiler-api',
-  '//lib:onos-yang-runtime',
-  '//apps/yang:onos-apps-yang'
-]
-
-TEST_DEPS = [
-  '//lib:TEST_REST',
-  '//utils/osgi:onlab-osgi-tests',
-  '//web/api:onos-rest-tests',
-]
-
-osgi_jar_with_tests(
-  deps = COMPILE_DEPS,
-  test_deps = TEST_DEPS,
-  web_context = '/onos/yang',
-)
diff --git a/buck-tools/BUCK b/buck-tools/BUCK
deleted file mode 100644
index 9548e41..0000000
--- a/buck-tools/BUCK
+++ /dev/null
@@ -1,60 +0,0 @@
-python_binary(
-  name = 'onos-app-writer',
-  main = 'onos_app.py',
-  deps = [],
-  visibility = ['PUBLIC'],
-)
-
-python_binary(
-  name = 'onos-app-oar',
-  main = 'onos_oar.py',
-  deps = [],
-  visibility = ['PUBLIC'],
-)
-
-python_binary(
-  name = 'onos-stage',
-  main = 'onos_stage.py',
-  deps = [],
-  visibility = ['PUBLIC'],
-)
-
-python_binary(
-  name = 'onos-feature',
-  main = 'onos_feature.py',
-  deps = [],
-  visibility = ['PUBLIC'],
-)
-
-def shquote(s):
-  return s.replace("'", "'\\''")
-
-def os_path():
-  from os import environ
-  return environ.get('PATH')
-
-genrule(
-  name = 'buck',
-  cmd = 'echo buck=`which buck`>$OUT;' +
-    ("echo PATH=\''%s'\' >>$OUT;" % shquote(os_path())),
-  out = 'buck.properties',
-  visibility = ['PUBLIC'],
-)
-
-export_file(
-  name = 'yang-registrator',
-  src = 'yang-registrator',
-  visibility = [ 'PUBLIC' ],
-)
-
-export_file(
-  name = 'yang-schema',
-  src = 'yang-schema',
-  visibility = [ 'PUBLIC' ],
-)
-
-export_file(
-  name = 'grpc',
-  src = 'grpc',
-  visibility = [ 'PUBLIC' ],
-)
diff --git a/buck-tools/default.defs b/buck-tools/default.defs
deleted file mode 100644
index 0e3ff13..0000000
--- a/buck-tools/default.defs
+++ /dev/null
@@ -1,15 +0,0 @@
-include_defs('//onos.defs')
-include_defs('//bucklets/maven_jar.bucklet')
-include_defs('//bucklets/onos.bucklet')
-include_defs('//bucklets/onos_app.bucklet')
-include_defs('//bucklets/yang.bucklet')
-include_defs('//bucklets/remote_jar.bucklet')
-include_defs('//bucklets/grpc.bucklet')
-include_defs('//bucklets/jaxb2.bucklet')
-
-BASE_DEPS = [
-    '//lib:junit',
-    '//lib:hamcrest-all',
-    '//lib:slf4j-api',
-    '//lib:guava-testlib',
-]
diff --git a/buck-tools/grpc b/buck-tools/grpc
deleted file mode 100755
index 9a8fa27..0000000
--- a/buck-tools/grpc
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash -e
-# -----------------------------------------------------------------------------
-# Generates the gRPC java artifacts from protobuf models.
-# -----------------------------------------------------------------------------
-out=$1
-shift
-proto_paths=$1
-shift
-protoc=$1
-shift
-plugin=$1
-shift
-
-#set -x
-
-dir=$(dirname $out)
-mkdir -p $dir
-
-$protoc \
-    --plugin=protoc-gen-grpc-java=$plugin \
-    --grpc-java_out=$dir \
-    --java_out=$dir \
-    $proto_paths \
-    $*
-
-cd $dir
-jar -cf $out *
diff --git a/buck-tools/java_sources.defs b/buck-tools/java_sources.defs
deleted file mode 100644
index 0b3974e..0000000
--- a/buck-tools/java_sources.defs
+++ /dev/null
@@ -1,10 +0,0 @@
-def java_sources(
-    name,
-    srcs,
-    visibility = []
-  ):
-  java_library(
-    name = name,
-    resources = srcs,
-    visibility = visibility,
-  )
diff --git a/buck-tools/onos_app.py b/buck-tools/onos_app.py
deleted file mode 100755
index bbb053c..0000000
--- a/buck-tools/onos_app.py
+++ /dev/null
@@ -1,219 +0,0 @@
-#!/usr/bin/env python
-#FIXME Add license
-
-##### Templates for features.xml
-FEATURES_HEADER = '''\
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
-          name="%(feature_repo_name)s">
-'''
-FEATURE_HEADER= '''\
-    <feature name="%(feature_name)s" version="%(version)s"
-             description="%(title)s">
-'''
-EXISTING_FEATURE = '        <feature>%s</feature>\n'
-BUNDLE = '        <bundle>%s</bundle>\n'
-FEATURE_FOOTER = '    </feature>\n'
-FEATURES_FOOTER = '</features>'
-
-##### Templates for app.xml
-APP_HEADER = '''\
-<?xml version="1.0" encoding="UTF-8"?>
-<app name="%(app_name)s" origin="%(origin)s" version="%(version)s"
-        title="%(title)s" category="%(category)s" url="%(url)s"
-        featuresRepo="%(feature_repo_name)s"
-        features="%(feature_name)s" apps="%(apps)s">
-    <description>%(description)s</description>
-'''
-ARTIFACT = '    <artifact>%s</artifact>\n'
-SECURITY = '''\
-    <security>
-%s
-    </security>\n'''
-APP_FOOTER = '</app>'
-
-NON_OSGI_TAG = 'NON-OSGI'
-
-def mvnUrl(bundle):
-    #mvn-uri := 'mvn:' [ repository-url '!' ] group-id '/' artifact-id [ '/' [version] [ '/' [type] [ '/' classifier ] ] ] ]
-    parts = bundle.split(':')
-    prefix = 'mvn:'
-    suffix = ''
-    if len(parts) > 3:
-        parts.insert(2, parts.pop()) # move version to the 3rd position
-    if len(parts) >= 5:
-        # check classifier for special non-OSGi tag
-        i = parts[4].find(NON_OSGI_TAG)
-        if i == 0:
-            prefix = 'wrap:' + prefix
-            suffix = '$Bundle-SymbolicName=%s.%s&amp;Bundle-Version=%s' % tuple(parts[0:3])
-            if len(parts[4]) == len(NON_OSGI_TAG):
-                parts.pop() # pop off empty classifier
-                if parts[3].lower() == 'jar':
-                    parts.pop() # pop off default extension: jar
-            else:
-                parts[4] = parts[4][len(NON_OSGI_TAG):]
-    return prefix + '/'.join(parts) + suffix
-
-def generateFeatureFile(feature_repo_name,
-                        features = [],
-                        **kwargs):
-    values = {
-        'feature_repo_name' : '-'.join(feature_repo_name.split(':')[1:3]),
-    }
-
-    output = FEATURES_HEADER % values
-
-    for feature in features:
-        output += feature
-
-    output += FEATURES_FOOTER
-    return output
-
-def generateFeature(feature_name,
-                    version,
-                    title,
-                    features = [],
-                    bundles = [],
-                    **kwargs):
-    values = {
-        'feature_name' : feature_name,
-        'version' : version,
-        'title' : title,
-    }
-
-    output = FEATURE_HEADER % values
-
-    if features:
-        for feature in features:
-            output += EXISTING_FEATURE % feature
-
-    if bundles:
-        for bundle in bundles:
-            output += BUNDLE % mvnUrl(bundle)
-
-    output += FEATURE_FOOTER
-    return output
-
-
-def generateAppFile(app_name,
-                    origin,
-                    version,
-                    title,
-                    category,
-                    url,
-                    feature_repo_name,
-                    feature_name,
-                    description = None,
-                    apps = [],
-                    artifacts = [],
-                    security= None,
-                    **kwargs):
-    values = {
-        'app_name' : app_name,
-        'origin' : origin,
-        'version' : version,
-        'title' : title,
-        'category' : category,
-        'url' : url,
-        'feature_repo_name' : mvnUrl(feature_repo_name) + '/xml/features',
-        'feature_name' : feature_name,
-    }
-
-    values['description'] = description if description else title
-    values['apps'] = ','.join(apps) if apps else ''
-
-    output = APP_HEADER % values
-
-    for artifact in artifacts:
-        output += ARTIFACT % mvnUrl(artifact)
-
-    if security is not None:
-        output += SECURITY % security
-
-    output += APP_FOOTER
-    return output
-
-
-if __name__ == '__main__':
-    import sys, optparse
-
-    parser = optparse.OptionParser()
-    parser.add_option("-n", "--name",     dest="feature_coords", help="Feature MVN Coords")
-    parser.add_option("-a", "--app",      dest="app_name",     help="App Name")
-    parser.add_option("-o", "--origin",   dest="origin",       help="Origin")
-    parser.add_option("-c", "--category", dest="category",     help="Category")
-    parser.add_option("-u", "--url",      dest="url",          help="URL")
-    parser.add_option("-v", "--version",  dest="version",      help="Version")
-    parser.add_option("-t", "--title",    dest="title",        help="Title")
-    parser.add_option("-r", "--repo",     dest="repo_name",    help="Repo Name")
-    parser.add_option('-D', '--desc',     dest='desc',         help='Application description')
-    parser.add_option('-s', '--security', dest='security',     help='Application security')
-
-    parser.add_option('-b', '--bundle',
-                      action="append", dest='included_bundles',
-                      metavar="BUNDLE", help='Included Bundle (multiple allowed)')
-    parser.add_option('-e', '--excluded-bundle',
-                      action="append", dest='excluded_bundles',
-                      metavar="BUNDLE", help='Excluded Bundle (multiple allowed)')
-    parser.add_option('-f', '--feature',
-                      action="append", dest='features',
-                      metavar="FEATURE", help='Existing Feature (multiple allowed)')
-    parser.add_option('-d', '--apps',
-                      action="append", dest='apps',
-                      metavar="FEATURE", help='Required App (multiple allowed)')
-
-    parser.add_option("-A", "--write-app", dest="write_app", action="store_true")
-    parser.add_option("-F", "--write-features", dest="write_features", action="store_true")
-    parser.add_option("-E", "--write-feature", dest="write_feature", action="store_true")
-
-    (options, args) = parser.parse_args()
-
-    values = {}
-    if options.feature_coords and options.version and options.title:
-        parts = options.feature_coords.split(':')
-        values['feature_name'] = parts[1] if len(parts) > 1 else parts[0]
-        values['version'] = options.version
-        values['title'] = options.title
-    else:
-        sys.stderr.write('ERROR: Feature Name, Version, and Title are required\n')
-        sys.stderr.flush()
-        sys.exit(1)
-
-    if options.app_name and options.origin and options.category and options.url:
-        values['app_name'] = options.app_name
-        values['origin'] = options.origin
-        values['category'] = options.category
-        values['url'] = options.url
-    elif options.write_app:
-        sys.stderr.write('ERROR: Feature Name, Version, and Title are required\n')
-        sys.stderr.flush()
-        sys.exit(1)
-
-    values['feature_repo_name'] = options.repo_name if options.repo_name \
-                                    else options.feature_coords
-
-    bundles = []
-    if options.included_bundles:
-        bundles += options.included_bundles
-    if options.excluded_bundles:
-        bundles += options.excluded_bundles
-    if options.desc:
-        values['description'] = options.desc
-
-    feature = generateFeature(bundles=bundles,
-                              features=options.features,
-                              **values)
-
-    if options.write_feature:
-        print feature
-
-    if options.write_features:
-        print generateFeatureFile(features=[ feature ],
-                                  **values)
-
-    if options.write_app:
-        print generateAppFile(artifacts=options.included_bundles,
-                              apps=options.apps,
-                              security=options.security,
-                              **values)
\ No newline at end of file
diff --git a/buck-tools/onos_feature.py b/buck-tools/onos_feature.py
deleted file mode 100755
index 731ce71..0000000
--- a/buck-tools/onos_feature.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-#FIXME Add license
-
-from zipfile import ZipFile
-
-def generateOar(output, files=[]):
-    # Note this is not a compressed zip
-    with ZipFile(output, 'w') as zip:
-        for file, mvnCoords in files:
-            filename = file.split('/')[-1]
-            if mvnCoords == 'NONE':
-                dest = filename
-            else:
-                parts = mvnCoords.split(':')
-                if len(parts) > 3:
-                    parts.insert(2, parts.pop()) # move version to the 3rd position
-                groupId, artifactId, version = parts[0:3]
-                groupId = groupId.replace('.', '/')
-                extension = filename.split('.')[-1]
-                if extension == 'jar':
-                    filename = '%s-%s.jar' % ( artifactId, version )
-                elif 'features.xml' in filename:
-                    filename = '%s-%s-features.xml' % ( artifactId, version )
-                dest = '%s/%s/%s/%s' % ( groupId, artifactId, version, filename )
-            zip.write(file, dest)
-
-if __name__ == '__main__':
-    import sys
-
-    if len(sys.argv) < 2:
-        print 'USAGE'
-        sys.exit(1)
-
-    output = sys.argv[1]
-    args = sys.argv[2:]
-
-    if len(args) % 2 != 0:
-        print 'There must be an even number of args: file mvn_coords'
-        sys.exit(2)
-
-    files = zip(*[iter(args)]*2)
-    generateOar(output, files)
diff --git a/buck-tools/onos_oar.py b/buck-tools/onos_oar.py
deleted file mode 100755
index 30f70f5..0000000
--- a/buck-tools/onos_oar.py
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/usr/bin/env python
-#FIXME Add license
-
-from zipfile import ZipFile
-
-def generateOar(output, files=[]):
-    # Note this is not a compressed zip
-    with ZipFile(output, 'w') as zip:
-        for file, mvnCoords in files:
-            filename = file.split('/')[-1]
-            if mvnCoords == 'NONE':
-                dest = filename
-            else:
-                parts = mvnCoords.split(':')
-                if len(parts) > 3:
-                    parts.insert(2, parts.pop()) # move version to the 3rd position
-                groupId, artifactId, version = parts[0:3]
-                groupId = groupId.replace('.', '/')
-                extension = filename.split('.')[-1]
-                if extension == 'jar':
-                    filename = '%s-%s.jar' % ( artifactId, version )
-                elif 'features.xml' in filename:
-                    filename = '%s-%s-features.xml' % ( artifactId, version )
-                dest = 'm2/%s/%s/%s/%s' % ( groupId, artifactId, version, filename )
-            zip.write(file, dest)
-
-if __name__ == '__main__':
-    import sys
-
-    if len(sys.argv) < 2:
-        print 'USAGE'
-        sys.exit(1)
-
-    output = sys.argv[1]
-    args = sys.argv[2:]
-
-    if len(args) % 2 != 0:
-        print 'There must be an even number of args: file mvn_coords'
-        sys.exit(2)
-
-    files = zip(*[iter(args)]*2)
-    generateOar(output, files)
diff --git a/buck-tools/onos_stage.py b/buck-tools/onos_stage.py
deleted file mode 100755
index 8991dfa..0000000
--- a/buck-tools/onos_stage.py
+++ /dev/null
@@ -1,94 +0,0 @@
-#!/usr/bin/env python
-#FIXME Add license
-
-import re
-import os
-from zipfile import ZipFile
-from tarfile import TarFile, TarInfo
-import tarfile
-import time
-from cStringIO import StringIO
-import subprocess
-
-
-written_files = set()
-now = time.time()
-
-def addFile(tar, dest, file, file_size):
-    if dest not in written_files:
-        info = TarInfo(dest)
-        info.size = file_size
-        info.mtime = now
-        info.mode = 0777
-        tar.addfile(info, fileobj=file)
-        written_files.add(dest)
-
-def addString(tar, dest, string):
-    if dest not in written_files:
-        print dest, string
-        info = TarInfo(dest)
-        info.size = len(string)
-        info.mtime = now
-        info.mode = 0777
-        file = StringIO(string)
-        tar.addfile(info, fileobj=file)
-        file.close()
-        written_files.add(dest)
-
-def getHash():
-    p = subprocess.Popen('git rev-parse --verify HEAD --short', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
-    (output, err) = p.communicate()
-    return output if p.wait() == 0 else '0000000000'
-
-def stageOnos(output, version, files=[]):
-    base = 'onos-%s/' % version
-
-    runtimeVersion = version
-    if version.endswith('-SNAPSHOT'):
-        runtimeVersion = version.replace('-SNAPSHOT', '.%s' % getHash())
-
-    # Note this is not a compressed zip
-    with tarfile.open(output, 'w:gz') as output:
-        for file in files:
-            if '.zip' in file:
-                with ZipFile(file, 'r') as zip_part:
-                    for f in zip_part.infolist():
-                        dest = f.filename
-                        if base not in dest:
-                            dest = base + 'apache-karaf-3.0.8/system/' + f.filename
-                        addFile(output, dest, zip_part.open(f), f.file_size)
-            elif '.oar' in file:
-                with ZipFile(file, 'r') as oar:
-                    app_xml = oar.open('app.xml').read()
-                    app_name = re.search('name="([^"]+)"', app_xml).group(1)
-                    dest = base + 'apps/%(name)s/%(name)s.oar' % { 'name': app_name}
-                    addFile(output, dest, open(file), os.stat(file).st_size)
-                    dest = base + 'apps/%s/app.xml' % app_name
-                    addString(output, dest, app_xml)
-                    for f in oar.infolist():
-                        filename = f.filename
-                        if 'm2' in filename:
-                            dest = base + 'apache-karaf-3.0.8/system/' + filename[3:]
-                            if dest not in written_files:
-                                addFile(output, dest, oar.open(f), f.file_size)
-                                written_files.add(dest)
-            elif 'features.xml' in file:
-                dest = base + 'apache-karaf-3.0.8/system/org/onosproject/onos-features/%s/' % version
-                dest += 'onos-features-%s-features.xml' % version
-                with open(file) as f:
-                    addFile(output, dest, f, os.stat(file).st_size)
-        addString(output, base + 'apps/org.onosproject.drivers/active', '')
-        addString(output, base + 'VERSION', runtimeVersion)
-
-if __name__ == '__main__':
-    import sys
-
-    if len(sys.argv) < 3:
-        print 'USAGE' #FIXME
-        sys.exit(1)
-
-    output = sys.argv[1]
-    version = sys.argv[2]
-    args = sys.argv[3:]
-
-    stageOnos(output, version, args)
diff --git a/buck-tools/yang-registrator b/buck-tools/yang-registrator
deleted file mode 100755
index 76f0cda..0000000
--- a/buck-tools/yang-registrator
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-# -----------------------------------------------------------------------------
-# Generates YANG Model registrator component.
-# -----------------------------------------------------------------------------
-
-output=$1
-package=$2
-shift 2
-
-aux=/tmp/yr-$$
-
-trap "rm -fr $aux" EXIT
-
-pkgDir=$aux/${package//./\/}
-rm -fr $aux $output
-mkdir -p $pkgDir
-cd $aux
-
-cat <<EOF >$output
-// Auto-generated code
-package $package;
-
-import org.onosproject.yang.AbstractYangModelRegistrator;
-import org.osgi.service.component.annotations.Component;
-
-@Component(immediate = true)
-public class YangModelRegistrator extends AbstractYangModelRegistrator {
-    public YangModelRegistrator() {
-        super(YangModelRegistrator.class);
-    }
-}
-EOF
diff --git a/buck-tools/yang-schema b/buck-tools/yang-schema
deleted file mode 100755
index bcb6e1b..0000000
--- a/buck-tools/yang-schema
+++ /dev/null
@@ -1,17 +0,0 @@
-#!/bin/bash
-# -----------------------------------------------------------------------------
-# Extracts YANG model schema and YANG sources from a YANG model jar.
-# -----------------------------------------------------------------------------
-
-output=$1
-jar=$2
-
-aux=/tmp/ys-$$
-trap "rm -fr $aux" EXIT
-
-rm -fr $aux
-mkdir -p $aux $output
-
-cd $aux
-jar xf $jar
-mv yang/* $output
\ No newline at end of file
diff --git a/bucklets/grpc.bucklet b/bucklets/grpc.bucklet
deleted file mode 100644
index 53ab5ef..0000000
--- a/bucklets/grpc.bucklet
+++ /dev/null
@@ -1,134 +0,0 @@
-include_defs('//onos.defs')
-include_defs('//bucklets/onos.bucklet')
-
-
-DEFAULT_PROTOC_VERSION = '3.2.0'
-DEFAULT_GRPC_PLUGIN_VERSION = '1.3.1'
-
-PROTOC_RELEASE_BASE_URL = "https://github.com/google/protobuf/releases/download"
-GRPC_PLUGIN_BASE_URL = "https://repo1.maven.org/maven2/io/grpc/protoc-gen-grpc-java"
-
-PROTOC_SHA1S = {
-    "protoc-3.0.2-linux-x86_64.zip":"779ed606f524eb2c8c116b0fce7a3bc6507769e7",
-    "protoc-3.0.2-osx-x86_64.zip":"f71d97affca4ffe32747772539c0bcbf76c9dc9b",
-    "protoc-3.2.0-linux-x86_64.zip":"f418d246d183a534d9bd749e614f639a55f6829b",
-    "protoc-3.2.0-osx-x86_64.zip":"81f4fac3200ba2cb12a98df0a9ee4d1c584e9210",
-}
-
-GRPC_JAVA_SHA1S = {
-    "protoc-gen-grpc-java-1.3.1-linux-x86_64.exe":"9598b00ad0f41a6bd6aeb01f647903dbc62792cc",
-    "protoc-gen-grpc-java-1.3.1-osx-x86_64.exe":"f4eccb96524b8b9f152024890550d9b88398b8cd"
-}
-
-#Returns the string for the OS and architecture of the system of the form 'OS-ARCH'
-def get_system_arch():
-    import platform
-    os = platform.system().lower()
-    arch = platform.machine()
-    if os == "darwin":
-        os = "osx"
-    return "%s-%s" % ( os, arch)
-
-def fetch_protoc(
-        version
-    ):
-    file_name = "protoc-%s-%s.zip" % (version, get_system_arch())
-    if file_name not in PROTOC_SHA1S:
-        raise Exception('Cannot download %s, architecture or version not supported' % file_name)
-    remote_file(
-        name = 'protoc-release-' + version,
-        url = PROTOC_RELEASE_BASE_URL + '/v' + version + '/' + file_name,
-        sha1 = PROTOC_SHA1S[file_name],
-    )
-    genrule(
-        name = 'protoc-exe-' + version,
-        bash = 'jar xf $(location :protoc-release-' + version + ') bin/protoc && ' +
-                'mv bin/protoc $OUT && ' +
-                'chmod +x $OUT',
-        out = 'protoc.exe',
-        executable = True,
-        visibility = [ "PUBLIC" ],
-    )
-    genrule(
-        name = 'protoc-lib-' + version,
-        bash = 'jar xf $(location :protoc-release-' + version + ') include && mv include $OUT',
-        out = 'include',
-        visibility = [ "PUBLIC" ],
-    )
-
-def fetch_grpc_plugin(
-        version
-):
-    file_name = "protoc-gen-grpc-java-%s-%s.exe" % (version, get_system_arch())
-    if file_name not in GRPC_JAVA_SHA1S:
-        raise Exception('Cannot download %s, architecture or version not supported' % file_name)
-    remote_file(
-        name = 'grpc-plugin-binary-' + version,
-        url = GRPC_PLUGIN_BASE_URL + '/' + version + '/' + file_name,
-        sha1 = GRPC_JAVA_SHA1S[file_name],
-    )
-    genrule(
-        name = 'grpc-plugin-exe-' + version,
-        bash = 'cp $(location :grpc-plugin-binary-' + version + ') $OUT && chmod +x $OUT',
-        executable = True,
-        visibility = [ "PUBLIC" ],
-        out = 'grpc-plugin.exe',
-    )
-
-def _get_name():
-    base_path = get_base_path()
-    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
-
-def grpc_jar(
-    name = None,
-    deps = [],
-    #NOTE: if targeting a directory also built with maven this path MUST end in
-    # /proto because maven plugin interprets imports relative to the proto
-    # directory and BUCK interprets imports relative to the last directory
-    # listed in the first listed proto_path which contains the specified
-    # file
-    proto_paths = [],
-    srcs = [],
-    src_string = '', # Useful to build proto files external to the ONOS sources, using BUCK's environment variables.
-    proto_match_patterns = [ "src/main/proto/**/*.proto" ],
-    protoc_version = DEFAULT_PROTOC_VERSION,
-    plugin_version = DEFAULT_GRPC_PLUGIN_VERSION,
-    include_std_lib = False,
-    **kwargs
-    ):
-
-    #Get the correct name for the protoc compilation call
-    if name is None:
-        name = _get_name()
-
-    # Create the string for the proto_path arguments (order matters, similar to classpath)
-
-    if include_std_lib:
-        # Add protoc standard lib to the includes
-        proto_paths = ['$(location //incubator/protobuf-dependencies:protoc-lib-' + protoc_version + ')'] + proto_paths
-
-    if len(proto_paths) != 0:
-        proto_paths_string = "-I=" + reduce(lambda a,b:  a +" -I=" + b, proto_paths)
-    else:
-        proto_paths_string = ""
-    protoc = name + '-protoc'
-
-    genrule(
-        name = protoc,
-        srcs = glob(proto_match_patterns),
-        out = 'grpc.src.zip',
-        cmd = '$(location //buck-tools:grpc) $OUT '
-              + '\"' + proto_paths_string + '\" '
-              + '$(location //incubator/protobuf-dependencies:protoc-exe-'+ protoc_version + ') '
-              + '$(location //incubator/grpc-dependencies:grpc-plugin-exe-' + plugin_version + ') '
-              + '$SRCS' + src_string,
-    )
-
-    osgi_jar(
-        name = name,
-        srcs = [ ':' + protoc ],
-        deps = deps + [ ':' + protoc ],
-        do_javadocs = False,
-        do_checkstyle = False,
-        **kwargs
-    )
diff --git a/bucklets/jaxb2.bucklet b/bucklets/jaxb2.bucklet
deleted file mode 100644
index f3bb9fb..0000000
--- a/bucklets/jaxb2.bucklet
+++ /dev/null
@@ -1,64 +0,0 @@
-#
-# Copyright 2017-present Open Networking Foundation
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Bucklet to create Java Code from XSD using the 'xjc' tool from the JAXB API v2.
-# The genrule() creates the Java code, zips it and puts it in the output of jaxb2-xjc
-# The osgi_jar_with_tests() takes the sources in this ZIP and adds them to what ever
-# sources were used in the call to this method, and compiles all of them and adds
-# them to a JAR file in the output folder
-
-include_defs('//onos.defs')
-include_defs('//bucklets/onos.bucklet')
-
-def _get_name():
-    base_path = get_base_path()
-    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
-
-def jaxb2_xjc_osgi_jar(
-    name,
-    srcs,
-    xsd,
-    bindinfo=None,
-    destdir='.',
-    deps=[],
-    test_deps=[],
-    visibility = [],
-    **kwargs
-    ):
-    if name is None:
-          name = _get_name()
-
-    cmd = 'xjc '+xsd
-    if bindinfo is not None:
-        cmd=cmd+' -b '+bindinfo
-        cmd=cmd+' -d '+destdir
-
-    genrule(
-        name = 'jaxb2-xjc',
-        srcs = glob(['src/main/resources/*.xsd','src/main/resources/*.xjb']),
-        bash = cmd + ' && zip $OUT -r *',
-        out = name+'.src.zip',
-        visibility = [ ],
-    )
-
-    osgi_jar_with_tests (
-        deps = [":jaxb2-xjc"] + deps,
-        srcs = [':jaxb2-xjc'] + srcs,
-        test_deps = test_deps,
-        do_javadocs = False,
-        do_checkstyle = False,
-        **kwargs
-    )
-
diff --git a/bucklets/maven_jar.bucklet b/bucklets/maven_jar.bucklet
deleted file mode 100644
index 35af13d..0000000
--- a/bucklets/maven_jar.bucklet
+++ /dev/null
@@ -1,202 +0,0 @@
-# Copyright (C) 2013 The Android Open Source Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-GERRIT = 'GERRIT:'
-GERRIT_API = 'GERRIT_API:'
-MAVEN_CENTRAL = 'MAVEN_CENTRAL:'
-MAVEN_LOCAL = 'MAVEN_LOCAL:'
-
-def define_license(name):
-  n = 'LICENSE-' + name
-  genrule(
-    name = n,
-    cmd = 'ln -s $SRCS $OUT',
-    srcs = [n],
-    out = n,
-    visibility = ['PUBLIC'],
-  )
-
-def maven_jar(
-    name,
-    id,
-    license,
-    exclude = [],
-    exclude_java_sources = False,
-    unsign = False,
-    deps = [],
-    exported_deps = [],
-    sha1 = '', bin_sha1 = '', src_sha1 = '',
-    repository = MAVEN_CENTRAL,
-    attach_source = True,
-    visibility = ['PUBLIC'],
-    local_license = False,
-    full_url = ''):
-
-  if not full_url:
-    groupId, artifactId, version = id.split(':')
-
-    prebuilt_jar(
-            name = name,
-            binary_jar = ':%s-jar' % name,
-            maven_coords = id,
-            visibility = [ 'PUBLIC' ]
-    )
-
-    remote_file(
-            name = name + '-jar',
-            out = '%s-%s.jar' % (artifactId, version),
-            url = 'mvn:%s:%s:%s:%s' % (groupId, artifactId, 'jar', version),
-            sha1 = sha1
-    )
-    return
-
-  from os import path
-
-  parts = id.split(':')
-  if len(parts) not in [3, 4]:
-    raise NameError('%s:\nexpected id="groupId:artifactId:version[:classifier]"'
-                    % id)
-  if len(parts) == 4:
-    group, artifact, version, classifier = parts
-  else:
-    group, artifact, version = parts
-    classifier = None
-
-  # SNAPSHOT artifacts are handled differently on Google storage bucket:
-  # 'SNAPSHOT' is discarded from the directory name. However on other
-  # Maven repositories, most notable local repository located in
-  # ~/.m2/repository (and is supported through MAVEN_LOCAL repository)
-  # it must be preserved, otherwise the artifact wouldn't be found.
-  # Atm the SNAPSHOT part is only discarded for Google storage bucket.
-  if 'SNAPSHOT' in version and repository.startswith(GERRIT):
-    file_version = version.replace('-SNAPSHOT', '')
-    version = version.split('-SNAPSHOT')[0] + '-SNAPSHOT'
-  else:
-    file_version = version
-
-  if classifier is not None:
-    file_version += '-' + classifier
-
-  jar = path.join(name, artifact.lower() + '-' + file_version)
-
-  url = '/'.join([
-    repository,
-    group.replace('.', '/'), artifact, version,
-    artifact + '-' + file_version])
-
-  if full_url != '':
-    url = full_url
-
-  binjar = jar + '.jar'
-  binurl = url + '.jar'
-
-  srcjar = jar + '-src.jar'
-  srcurl = url + '-sources.jar'
-
-  cmd = ['$(exe //buck-tools:download_file)', '-o', '$OUT', '-u', binurl]
-  if sha1:
-    cmd.extend(['-v', sha1])
-  elif bin_sha1:
-    cmd.extend(['-v', bin_sha1])
-  for x in exclude:
-    cmd.extend(['-x', x])
-  if exclude_java_sources:
-    cmd.append('--exclude_java_sources')
-  if unsign:
-    cmd.append('--unsign')
-
-  genrule(
-    name = '%s__download_bin' % name,
-    cmd = ' '.join(cmd),
-    out = binjar,
-  )
-  license = ':LICENSE-' + license
-  if not local_license:
-    license = '//lib' + license
-  license = [license]
-
-  if src_sha1 or attach_source:
-    cmd = ['$(exe //buck-tools:download_file)', '-o', '$OUT', '-u', srcurl]
-    if src_sha1:
-      cmd.extend(['-v', src_sha1])
-    genrule(
-      name = '%s__download_src' % name,
-      cmd = ' '.join(cmd),
-      out = srcjar,
-    )
-    prebuilt_jar(
-      name = '%s_src' % name,
-      binary_jar = ':%s__download_src' % name,
-      maven_coords = id,
-      deps = license,
-      visibility = visibility,
-    )
-  else:
-    srcjar = None
-    genrule(
-      name = '%s_src' % name,
-      cmd = ':>$OUT',
-      out = '__%s__no_src' % name,
-    )
-
-  if exported_deps:
-    prebuilt_jar(
-      name = '%s__jar' % name,
-      deps = deps + license,
-      binary_jar = ':%s__download_bin' % name,
-      source_jar = ':%s__download_src' % name if srcjar else None,
-      maven_coords = id,
-    )
-    java_library(
-      name = name,
-      exported_deps = exported_deps + [':' + name + '__jar'],
-      visibility = visibility,
-    )
-  else:
-    prebuilt_jar(
-      name = name,
-      deps = deps + license,
-      binary_jar = ':%s__download_bin' % name,
-      source_jar = ':%s__download_src' % name if srcjar else None,
-      visibility = visibility,
-      maven_coords = id,
-    )
-
-
-def merge_maven_jars(
-    name,
-    srcs,
-    visibility = []):
-
-  def cmd(jars):
-    return ('$(location //buck-tools:merge_jars) $OUT '
-            + ' '.join(['$(location %s)' % j for j in jars]))
-
-  genrule(
-    name = '%s__merged_bin' % name,
-    cmd = cmd(['%s__download_bin' % s for s in srcs]),
-    out = '%s__merged.jar' % name,
-  )
-  genrule(
-    name = '%s__merged_src' % name,
-    cmd = cmd(['%s__download_src' % s for s in srcs]),
-    # buck-tools/eclipse/project.py requires -src.jar suffix.
-    out = '%s__merged-src.jar' % name,
-  )
-  prebuilt_jar(
-    name = name,
-    binary_jar = ':%s__merged_bin' % name,
-    source_jar = ':%s__merged_src' % name,
-    visibility = visibility,
-  )
diff --git a/bucklets/node.bucklet b/bucklets/node.bucklet
deleted file mode 100644
index 15dfeb2..0000000
--- a/bucklets/node.bucklet
+++ /dev/null
@@ -1,35 +0,0 @@
-NODE_RELEASE_BASE_URL = "https://nodejs.org/dist/"
-
-NODE_SHA1S = {
-    "node-v8.1.2-linux-x64.tar.gz":"61a609c83e2d3458cc2301a63b212a97e6b9f809",
-    "node-v8.1.2-darwin-x64.tar.gz":"a8b31fd645480661a8a777d9b4466dca0e6deb33",
-    "node-v8.11.1-linux-x64.tar.gz":"ee0213f62185c36121c2daf8dcacd34ade90b10c",
-    "node-v8.11.1-darwin-x64.tar.gz":"01effb57fa711aa258d7aab26c6615e1f8a64b1a"
-}
-
-def get_system_arch():
-    import platform
-    os = platform.system().lower()
-    return os
-
-def fetch_node(version):
-    file_name = "node-%s-%s-x64" % (version, get_system_arch())
-    file_fullname = "node-%s-%s-x64.tar.gz" % (version, get_system_arch())
-    if file_fullname not in NODE_SHA1S:
-        raise Exception("Cannot download %s, architecture or version not supported" % file_name)
-
-    remote_file(
-        name = 'node-release-' + version,
-        url = NODE_RELEASE_BASE_URL + version + '/' + file_fullname,
-        sha1 = NODE_SHA1S[file_fullname],
-    )
-
-    genrule(
-        name = 'node-bin-' + version,
-        bash = 'tar --no-same-owner -xf $(location :node-release-' + version + ') && ' +
-               'mv ' + file_name + ' $OUT && ' +
-               'chmod +x $OUT',
-        out = 'node-binaries',
-        executable = False,
-        visibility = [ "PUBLIC" ],
-    )
diff --git a/bucklets/onos.bucklet b/bucklets/onos.bucklet
deleted file mode 100644
index f711d6f..0000000
--- a/bucklets/onos.bucklet
+++ /dev/null
@@ -1,390 +0,0 @@
-import random
-
-DEBUG_ARG='JAVA_TOOL_OPTIONS="-Xdebug -Xrunjdwp:server=y,transport=dt_socket,address=5005,suspend=y"'
-FORCE_INSTALL=True
-NONE='NONE'
-
-SRC = 'src/main/java/**/'
-TEST = 'src/test/java/**/'
-RESOURCES_ROOT = 'src/main/resources/'
-TEST_RESOURCES_ROOT = 'src/test/resources/'
-
-include_defs('//onos.defs')
-
-def _get_name():
-    base_path = get_base_path()
-    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
-
-def checkstyle(
-    name,
-    srcs = None,
-    jar_target = None,
-    ):
-
-    if srcs:
-        base = get_base_path()
-        # module name; base filepath; files (line-separated); empty line (to signify end of stream)
-        files = '%s\n%s\n' % (name, base) + '\n'.join(['%s/%s' % (base, s) for s in srcs]) + '\n\n'
-
-        genrule(
-                name = name + '-checkstyle-files',
-                bash = "echo '%s' > $OUT" % files,
-                srcs = srcs,
-                out = 'checkstyle-files.txt',
-        )
-
-        sh_test(
-                name = name + '-checkstyle',
-                test = '//tools/build/conf:start-buck-daemon',
-                deps = [ ':' + name + '-checkstyle-files',
-                         '//tools/build/conf:onos-java-header',
-                         '//tools/build/conf:onos-build-conf', ],
-                args = [
-                    '$(location //tools/build/conf:buck-daemon-jar)',
-                    'checkstyle',
-                    '$(location :' + name + '-checkstyle-files)',
-                    '$(location //tools/build/conf:checkstyle-xml)',
-                    '$(location //tools/build/conf:suppressions-xml)',
-                    ],
-                #TODO test_rule_timeout_ms seems to be ignored on Linux
-                test_rule_timeout_ms = 45000,
-                labels = [ 'checkstyle' ],
-        )
-
-def java_doc(
-    name,
-    title,
-    pkgs,
-    paths,
-    srcs = [],
-    deps = [],
-    visibility = [],
-    do_it_wrong = False,
-  ):
-  if do_it_wrong:
-    sourcepath = paths
-  else:
-    sourcepath = ['$SRCDIR/' + n for n in paths]
-
-  if len(srcs) != 0:
-    cmd = ' '.join([
-        'while ! test -f .buckconfig; do cd ..; done;',
-        'javadoc',
-        '-tag onos.rsModel:a:"onos model"',
-        '-quiet',
-        '-protected',
-        '-encoding UTF-8',
-        '-charset UTF-8',
-        '-notimestamp',
-        '-windowtitle "' + title + '"',
-        '-link http://docs.oracle.com/javase/8/docs/api',
-        '-subpackages ',
-        ':'.join(pkgs),
-        '-sourcepath ',
-        ':'.join(sourcepath),
-        ' -classpath ',
-        ':'.join(['$(classpath %s)' % n for n in deps]),
-        '-d $TMP',
-      ]) + ';jar cf $OUT -C $TMP .'
-
-    genrule(
-      name = name,
-      cmd = cmd,
-      srcs = srcs,
-      out = name + '.jar',
-      visibility = visibility,
-    )
-
-def sonar(
-    name,
-    test = False
-    ):
-
-  cmd = '; '.join([ 'rm -f $OUT',
-          'printf "%(src_base)s = " >> $OUT',
-          '%(srcs)s >> $OUT',
-          'echo "%(binary_base)s = %(classes)s" >> $OUT',
-          'printf "%(lib_base)s = " >> $OUT',
-          '%(libraries)s >> $OUT'
-        ]) % {
-          'srcs' : "echo $(srcs :%s) | sed 's/ /,/g'" % name,
-          'classes' : ("$(bin_dir :%s#non-osgi)" if not test else "$(bin_dir :%s)") % name,
-          'libraries' : "echo $(classpath :%s) | sed 's/:/,/g'" % name,
-          'src_base' : 'sonar.sources' if not test else 'sonar.tests',
-          'binary_base' : 'sonar.java.binaries' if not test else 'sonar.java.test.binaries',
-          'lib_base' : 'sonar.java.libraries' if not test else 'sonar.java.test.libraries'
-        }
-  # FIXME do we need to specify dep here or with the expander cover it?
-  genrule(
-      name = name + "-sonar",
-      cmd = cmd,
-      out = 'sonar-project.properties'
-  )
-
-def osgi_jar(
-    name = None,
-    srcs = None,
-    group_id = ONOS_GROUP_ID,
-    version = ONOS_VERSION,
-    deps = [],
-    visibility = ['PUBLIC'],
-    license = 'NONE',
-    description = '',
-    debug = False,
-    import_packages = '*',
-    dynamicimport_packages = '',
-    embedded_dependencies = '',
-    bundle_classpath = '',
-    export_packages = '!.,!*.impl.*,!*.internal.*,*',
-    package_name_root = 'org.onosproject',
-    include_resources = {},
-    web_context = NONE,
-    api_title = None,
-    api_version = NONE,
-    api_package = NONE,
-    api_description = NONE,
-    resources = NONE,
-    resources_root = None,
-    tests = None,
-    do_javadocs = True,
-    do_checkstyle = True,
-    **kwargs
-    ):
-
-  # if name and _get_name() != name:
-  #     print _get_name(), '!=', name
-  if name is None:
-      name = _get_name()
-
-  if srcs is None:
-      srcs = glob([SRC + '/*.java'])
-
-  if resources == NONE and resources_root is not None:
-      resources = glob([resources_root + '**'])
-  elif resources == NONE:
-      resources = glob([RESOURCES_ROOT + '**'])
-
-  if resources and not resources_root:
-      resources_root = RESOURCES_ROOT
-
-  mvn_coords = group_id + ':' + name + ':' + version
-
-  onos_jar(
-      name = name,
-      # FIXME webapp path hard coded here probably is not right
-      srcs = srcs + glob(['src/main/webapp/**'], excludes = ['src/main/webapp/tests/**']),
-      deps = deps,
-      visibility = visibility,
-      resources = resources,
-      resources_root = resources_root,
-      bundle_name = name,
-      group_id = group_id,
-      bundle_version = version,
-      bundle_license = license,
-      bundle_description = description,
-      import_packages = import_packages,
-      export_packages = export_packages,
-      include_resources = include_resources,
-      dynamicimport_packages = dynamicimport_packages,
-      embedded_dependencies = embedded_dependencies,
-      bundle_classpath = bundle_classpath,
-      web_context = web_context,
-      api_title = api_title,
-      api_version = api_version,
-      api_package = api_package,
-      api_description = api_description,
-      tests = tests,
-      maven_coords = mvn_coords,
-      **kwargs
-  )
-
-  ### Checkstyle
-  if do_checkstyle:
-      checkstyle(
-          name = name,
-          srcs = srcs,
-      )
-
-  if do_javadocs:
-      java_doc(
-           name = name + '-javadoc',
-           title = 'Java Docs',
-           pkgs = [ package_name_root ],
-           paths = [ 'src/main/java' ],
-           srcs = srcs,
-           deps = deps,
-           visibility = visibility,
-           do_it_wrong = False,
-      )
-
-  # TODO add project config for intellij
-  # project_config(
-  #   src_target = ':' + name,
-  #   src_roots = [ 'src/main/java' ],
-  #   test_target = ':' + name + '-tests',
-  #   test_roots = [ 'src/test/java' ],
-  # )
-
-  ### .m2 Install
-  mvn_cmd = ' '.join(( 'mvn install:install-file',
-                       '-Dfile=$(location :%s)' % name,
-                       '-DgroupId=%s' % group_id,
-                       '-DartifactId=%s' % name,
-                       '-Dversion=%s' % version,
-                       '-Dpackaging=jar' ))
-  cmd = mvn_cmd + ' > $OUT'
-  if FORCE_INSTALL:
-    # Add a random number to the command to force this rule to run.
-    # TODO We should make this configurable from CLI, perhaps with a flag.
-    cmd = 'FOO=%s ' % random.random() + cmd
-  genrule(
-    name = name + '-install',
-    bash = cmd,
-    out = 'install.log',
-    visibility = visibility,
-  )
-  sonar(
-    name = name,
-  )
-
-def osgi_jar_with_tests(
-        name = None,
-        deps = [],
-        group_id = ONOS_GROUP_ID,
-        version = ONOS_VERSION,
-        test_srcs = None,
-        test_deps = [ '//lib:TEST' ],
-        test_resources = None,
-        test_resources_root = None,
-        visibility = [ 'PUBLIC' ],
-        **kwargs
-    ):
-
-  if name is None:
-      name = _get_name()
-
-  if test_resources and not test_resources_root:
-      test_resources_root = TEST_RESOURCES_ROOT
-  if test_resources_root and not test_resources:
-      test_resources = glob([test_resources_root + '**'])
-  if not test_resources and not test_resources_root:
-      test_resources = glob([TEST_RESOURCES_ROOT + '**'])
-      if test_resources:
-        test_resources_root = TEST_RESOURCES_ROOT
-
-  if test_srcs is None:
-      test_srcs = glob([TEST + '/*.java'])
-
-  mvn_coords = group_id + ':' + name + ':jar:tests:' + version
-
-  if test_srcs:
-      java_test(
-        name = name + '-tests',
-        srcs = test_srcs,
-        deps = deps +
-               test_deps +
-               [':' + name + '#non-osgi'],
-        resources = test_resources,
-        resources_root = test_resources_root,
-        maven_coords = mvn_coords,
-        visibility = visibility,
-      )
-
-      checkstyle(
-          name = name + '-tests',
-          srcs = test_srcs,
-      )
-
-      sonar(
-          name = name + '-tests',
-          test = True
-      )
-
-      osgi_jar(name = name,
-               deps = deps,
-               group_id = group_id,
-               version = version,
-               visibility = visibility,
-               tests = [':' + name + '-tests'],
-               **kwargs)
-  else:
-      osgi_jar(name = name,
-               deps = deps,
-               group_id = group_id,
-               version = version,
-               visibility = visibility,
-               **kwargs)
-
-def tar_file(
-   name,
-   srcs,
-   other_tars = [],
-   flat = False,
-   root = None,
-   out = None,
-   visibility = [ 'PUBLIC' ],
-   ):
-
-   cmds = [ 'mkdir -p $TMP/%(root_dir)s',
-            'cp -R -L $SRCDIR/* $TMP/%(root_dir)s' ]
-   for t in other_tars:
-       cmds += [ 'tar -zxf $(location %s)' % t + ' -C $TMP/%(root_dir)s' ]
-
-   if flat:
-       cmds += [ 'find $TMP/%(root_dir)s -type f -exec mv {} $TMP/%(root_dir)s \;',
-                 'find $TMP/%(root_dir)s/* -type d -d -exec rmdir {} \;' ]
-
-   cmds += [ 'tar -C $TMP -zcf $OUT %(root_dir)s' ]
-
-   cmd = ' && '.join(cmds) % {
-           'root_dir': root if root is not None else name
-         }
-
-   genrule(
-       name = name,
-       srcs = srcs,
-       bash = cmd,
-       out = out if out is not None else ( root if root is not None else name ) + '.tar.gz',
-       visibility = visibility,
-   )
-
-def only_lib_dep_pom(
-    name,
-    src,
-    out,
-    version = ONOS_VERSION,
-    onosGroupId = ONOS_GROUP_ID,
-    visibility = [ 'PUBLIC' ],
-    ):
-
-    cmd = 'grep -v \<module\> ' + src + ' | sed "s#<modules>#<modules><module>lib</module>#" >$OUT'
-
-    genrule(
-        name = name,
-        srcs = [ src ],
-        bash = cmd,
-        out = out,
-        visibility = visibility,
-        maven_coords = onosGroupId + ':onos:pom:' + version,
-    )
-
-def pass_thru_pom(
-    name,
-    src,
-    out,
-    artifactId,
-    version = ONOS_VERSION,
-    onosGroupId = ONOS_GROUP_ID,
-    visibility = [ 'PUBLIC' ],
-    ):
-
-    cmd = 'cp ' + src + ' $OUT'
-
-    genrule(
-        name = name,
-        srcs = [ src ],
-        bash = cmd,
-        out = out,
-        visibility = visibility,
-        maven_coords = onosGroupId + ':' + artifactId + ':pom:' + version,
-    )
diff --git a/bucklets/onos_app.bucklet b/bucklets/onos_app.bucklet
deleted file mode 100644
index d0a0028..0000000
--- a/bucklets/onos_app.bucklet
+++ /dev/null
@@ -1,221 +0,0 @@
-include_defs('//onos.defs')
-
-DEFAULT_APP_CATEGORY = 'Utility'
-
-import os.path
-
-# FIXME Factor this into common place
-def _get_name():
-    base_path = get_base_path()
-    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
-
-def _get_app_name():
-    base_path = get_base_path()
-    return APP_PREFIX + os.path.basename(base_path)
-
-def osgi_feature(
-        name,
-        title,
-        feature_coords = None,
-        version = ONOS_VERSION,
-        required_features = [ 'onos-api' ],
-        required_apps = [],
-        included_bundles = None,
-        excluded_bundles = [],
-        generate_file = False,
-        visibility = [ 'PUBLIC' ],
-        stage_repo = True,
-        maven_coords = None,
-    ):
-
-    if not feature_coords:
-        feature_coords = name
-    args = [ '-n %s' % feature_coords,
-             '-v %s' % version,
-             '-t "%s"' % title,
-             ]
-    args += [ '-f %s' % f for f in required_features ]
-    args += [ '-b $(maven_coords %s)' % b for b in included_bundles ]
-    args += [ '-e $(maven_coords %s)' % b for b in excluded_bundles ]
-    args += [ '-d %s' % a for a in required_apps ]
-
-    feature_cmd = '-F' if generate_file else '-E'
-
-    cmd = '$(exe //buck-tools:onos-app-writer) %s ' % feature_cmd
-    cmd += ' '.join(args) + ' > $OUT'
-    genrule(
-            name = name + '-feature',
-            bash = cmd,
-            out = 'features.xml',
-            visibility = visibility,
-            maven_coords = maven_coords,
-    )
-
-    if stage_repo:
-        sources = ['$(location %s) $(maven_coords %s)' % (i, i) for i in included_bundles]
-        genrule(
-                name = name + '-repo',
-                out = name + '-repo.zip.part',
-                bash = '$(exe //buck-tools:onos-feature) $OUT ' + ' '.join(sources),
-                visibility = visibility,
-        )
-
-FEATURES_HEADER = '''\
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<features xmlns="http://karaf.apache.org/xmlns/features/v1.2.0"
-          name="onos-%s">
-    <repository>mvn:org.apache.karaf.features/standard/3.0.8/xml/features</repository>
-
-''' % ONOS_VERSION
-
-FEATURES_FOOTER = '</features>'
-
-def compile_features(
-        name,
-        features = [],
-        maven_coords = None,
-        visibility = [ 'PUBLIC' ],
-    ):
-
-    cmd = "(echo '%s'; " % FEATURES_HEADER
-    cmd += ''.join(['cat $(location %s-feature); ' % s for s in features])
-    cmd += "echo '%s') > $OUT" % FEATURES_FOOTER
-
-    genrule(
-            name = name,
-            bash = cmd,
-            visibility = visibility,
-            out = 'features.xml',
-            maven_coords = maven_coords,
-    )
-
-
-#TODO rename this
-def osgi_feature_group(
-        name,
-        description = 'TEST',
-        version = ONOS_VERSION,
-        exported_deps = [],
-        visibility = ['PUBLIC'],
-        maven_coords = None,
-        **kwargs
-    ):
-    java_library(
-            name = name,
-            exported_deps = exported_deps, #compile only
-            visibility = visibility,
-    )
-
-    osgi_feature(
-            name = name,
-            feature_coords = name,
-            version = version,
-            title = description,
-            required_features = [],
-            included_bundles = exported_deps,
-            generate_file = False,
-            visibility = visibility,
-            maven_coords = maven_coords,
-    )
-
-
-
-def onos_app(
-        app_name = None,
-        name = None,
-        title = None,
-        version = ONOS_VERSION,
-        origin = ONOS_ORIGIN,
-        category = DEFAULT_APP_CATEGORY,
-        url = None,
-        description = None, #TODO make this a file
-        #TODO icon,
-        feature_coords = None,
-        required_features = [ 'onos-api' ],
-        required_apps = [],
-        included_bundles = None,
-        excluded_bundles = [],
-        visibility = [ 'PUBLIC' ],
-        security = None,
-        **kwargs):
-    if name is None:
-        name = _get_name()
-
-    if app_name is None:
-        app_name = _get_app_name()
-
-    maven_coords = '%s:%s:oar:%s' % ( ONOS_GROUP_ID, name, ONOS_VERSION )
-    feature_xml_coords = '%s:%s:xml:features:%s' % ( ONOS_GROUP_ID, name, ONOS_VERSION )
-
-    if title is None:
-        print "Missing title for %s" % _get_name()
-        title = _get_app_name()
-
-    if included_bundles is None:
-        target = ':' + name
-        included_bundles = [ target ]
-
-    if not feature_coords and len(included_bundles) == 1:
-        feature_coords = '$(maven_coords %s)' % included_bundles[0]
-
-    if not feature_coords:
-        feature_coords = '%s:%s:%s' % ( ONOS_GROUP_ID, name, ONOS_VERSION )
-
-    args = [ '-n %s' % feature_coords,
-             '-v %s' % version,
-             '-t "%s"' % title,
-             '-o "%s"' % origin,
-             '-c "%s"' % category,
-             '-a "%s"' % app_name,
-             '-u %s' % url,
-             ]
-    args += [ '-f %s' % f for f in required_features ]
-    args += [ '-b $(maven_coords %s)' % b for b in included_bundles ]
-    args += [ '-e $(maven_coords %s)' % b for b in excluded_bundles ]
-    args += [ '-d %s' % a for a in required_apps ]
-    if description is not None:
-        args += [ '-D "%s"' % description ]
-    if security is not None:
-        args += [ '-s "%s"' % security ]
-
-    # cmd = '$(exe //buck-tools:onos-app-writer) -F ' + ' '.join(args) + ' > $OUT'
-    # genrule(
-    #     name = name + '-feature',
-    #     bash = cmd,
-    #     out = 'features.xml',
-    #     visibility = [],
-    # )
-    osgi_feature(
-        name = name,
-        feature_coords = feature_coords,
-        version = version,
-        title = title,
-        required_features = required_features,
-        included_bundles = included_bundles,
-        excluded_bundles = excluded_bundles,
-        generate_file = True,
-        visibility = [],
-        stage_repo = False,
-        maven_coords = feature_xml_coords,
-    )
-
-    cmd = '$(exe //buck-tools:onos-app-writer) -A ' + ' '.join(args) + ' > $OUT'
-    genrule(
-        name = name + '-app-xml',
-        bash = cmd,
-        out = 'app.xml',
-        visibility = [],
-    )
-
-    sources = [
-        '$(location :%s-feature) %s' % (name, feature_coords),
-        '$(location :%s-app-xml) NONE' % name,
-    ]
-    sources += ['$(location %s) $(maven_coords %s)' % (i, i) for i in included_bundles]
-    genrule(
-        name = name + '-oar',
-        out = 'app.oar',
-        bash = '$(exe //buck-tools:onos-app-oar) $OUT ' + ' '.join(sources),
-        maven_coords = maven_coords,
-        visibility = visibility,
-    )
diff --git a/bucklets/remote_jar.bucklet b/bucklets/remote_jar.bucklet
deleted file mode 100644
index e45045a..0000000
--- a/bucklets/remote_jar.bucklet
+++ /dev/null
@@ -1,23 +0,0 @@
-def remote_jar (
-        name,
-        out,
-        url,
-        sha1,
-        maven_coords = None,
-        visibility = [ 'PUBLIC' ],
-    ):
-
-    prebuilt_jar(
-        name = name,
-        binary_jar = ':' + out,
-        maven_coords = maven_coords,
-        visibility = visibility,
-    )
-
-    remote_file(
-        name = out,
-        out = out,
-        url = url,
-        sha1 = sha1,
-        visibility = []
-    )
diff --git a/bucklets/yang.bucklet b/bucklets/yang.bucklet
deleted file mode 100644
index 8d5d83f..0000000
--- a/bucklets/yang.bucklet
+++ /dev/null
@@ -1,148 +0,0 @@
-include_defs('//onos.defs')
-include_defs('//bucklets/onos.bucklet')
-include_defs('//bucklets/onos_app.bucklet')
-
-def _get_name():
-    base_path = get_base_path()
-    return ONOS_ARTIFACT_BASE + base_path.replace('/', '-') #TODO Unix-separator
-
-YANG_TOOLS = [
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-compiler-api',
-    '//lib:onos-yang-runtime',
-    '//lib:org.apache.felix.scr.annotations',
-    '//apps/yang:onos-apps-yang',
-]
-
-def yang_model(
-    name = None,
-    app_name = None,
-    model_id = None,
-    title = 'YANG Model',
-    url = 'http://onosproject.org',
-    description = None,
-    deps = [],
-    required_apps = [],
-    custom_registrator = False,
-    yang_src = None,
-    custom_src = None,
-    **kwargs
-    ):
-
-    if name is None:
-        name = _get_name()
-
-    if model_id is None:
-        model_id = app_name
-
-    if yang_src is None:
-        yang_src = glob(['src/main/yang/**/*.yang'])
-
-    if custom_src is None:
-        custom_src = glob(['src/main/java/**/*.java'])
-
-    yang = name + '-yang'
-    yangSrcs = yang + '#srcs'
-    schema = name + '-schema'
-    registrator = name + '-registrator'
-
-    yang_library(
-      deps = deps,
-      name = yang,
-      srcs = yang_src,
-      model_id = model_id
-    )
-
-    genrule(
-      name = schema,
-      srcs = [ ':' + yangSrcs ],
-      cmd = '$(location //buck-tools:yang-schema) $OUT $SRCS',
-      out = 'yang'
-    )
-
-    if custom_registrator:
-        osgi_jar(
-          name = name,
-          srcs = [ ':' + yangSrcs ] + custom_src,
-          deps = deps + YANG_TOOLS,
-          resources = [ ':' + schema ],
-          resources_root = ".",
-          do_checkstyle = True,
-          do_javadocs = False,
-        )
-    else:
-        genrule(
-          name = registrator,
-          srcs = [ ':' + yangSrcs ],
-          cmd = '$(location //buck-tools:yang-registrator) $OUT ' + app_name.replace('-', '_') + ' $SRCS',
-          out = 'YangModelRegistrator.java'
-        )
-        osgi_jar(
-          name = name,
-          srcs = [ ':' + yangSrcs, ':' + registrator ],
-          deps = deps + YANG_TOOLS,
-          resources = [ ':' + schema ],
-          resources_root = ".",
-          do_checkstyle = False,
-          do_javadocs = False,
-        )
-
-    onos_app (
-      name = name,
-      app_name = app_name,
-      title = title,
-      category = 'Models',
-      url = url,
-      description = description,
-      required_apps = required_apps + [ 'org.onosproject.yang' ],
-    )
-
-def yang_osgi_jar(
-    name = None,
-    srcs = None,
-    model_id = None,
-    group_id = ONOS_GROUP_ID,
-    version = ONOS_VERSION,
-    deps = [],
-    visibility = ['PUBLIC'],
-    license = 'NONE',
-    **kwargs
-    ):
-
-    if name is None:
-        name = _get_name()
-
-    if model_id is None:
-        model_id = name
-    yang_jar = name + '-yang'
-    bnd_jar = name + '-bnd'
-
-    args = { 'group':group_id, 'artifact':name, 'version':version }
-
-    yang_library(
-      deps = deps,
-      name = yang_jar,
-      srcs = srcs,
-      model_id = model_id,
-      visibility = [ ],
-    )
-
-    cmd = 'java -jar $(location //lib:bndexe) wrap -o $OUT '
-    cmd += '-b %(group)s.%(artifact)s ' % args
-    cmd += '-v ' + version.replace('-', '.') + ' '
-    cmd += '$(location :%s) ' % yang_jar
-    cmd += ' >/dev/null 2>&1'
-
-    genrule(
-         name = bnd_jar,
-         bash = cmd,
-         out = name + '.jar',
-         visibility = [],
-    )
-
-    prebuilt_jar(
-        name = name,
-        binary_jar = ':' + bnd_jar,
-        maven_coords = '%(group)s:%(artifact)s:%(version)s'%args,
-        visibility = visibility,
-    )
diff --git a/cli/BUCK b/cli/BUCK
deleted file mode 100644
index 3fedcf4..0000000
--- a/cli/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//lib:org.apache.karaf.shell.console',
-    '//incubator/api:onos-incubator-api',
-    '//incubator/net:onos-incubator-net',
-    '//utils/rest:onlab-rest',
-    '//core/common:onos-core-common',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-    visibility = ['PUBLIC'],
-)
-
diff --git a/core/api/BUCK b/core/api/BUCK
deleted file mode 100644
index d4cdf8a..0000000
--- a/core/api/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:COMPILE',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//lib:KRYO',
-    '//utils/misc:onlab-misc',
-    '//utils/osgi:onlab-osgi',
-    '//utils/rest:onlab-rest',
-    '//lib:joda-time',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-api',
-    deps = COMPILE_DEPS,
-    javadoc_files = glob(['src/main/javadoc/**/*']),
-    javadoc_files_root = 'src/main/javadoc',
-)
diff --git a/core/common/BUCK b/core/common/BUCK
deleted file mode 100644
index 56c6970..0000000
--- a/core/common/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-SRC_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//incubator/api:onos-incubator-api',
-    '//core/api:onos-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-core-common',
-    deps = SRC_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/core/net/BUCK b/core/net/BUCK
deleted file mode 100644
index 8a6bad8..0000000
--- a/core/net/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//lib:KRYO',
-    '//core/common:onos-core-common',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//incubator/net:onos-incubator-net',
-    '//incubator/store:onos-incubator-store',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//lib:TEST_ADAPTERS',
-    '//core/store/dist:onos-core-dist',
-    '//core/store/dist:onos-core-dist-tests',
-    '//utils/osgi:onlab-osgi-tests',
-    '//pipelines/basic:onos-pipelines-basic',
-    '//lib:minimal-json',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-core-net',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/core/security/BUCK b/core/security/BUCK
deleted file mode 100644
index f6b0da3..0000000
--- a/core/security/BUCK
+++ /dev/null
@@ -1,33 +0,0 @@
-SRC = 'src/main/java/org/onosproject/security/**/'
-TEST = 'src/test/java/org/onosproject/security/**/'
-CURRENT_NAME = 'onos-security'
-CURRENT_TARGET = ':' + CURRENT_NAME
-
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:org.apache.felix.framework.security',
-    '//core/api:onos-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-security',
-    srcs = glob([SRC + '/*.java']),
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
-
-java_test(
-    name = 'tests',
-    srcs = glob([TEST + '/*.java']),
-    deps = COMPILE_DEPS +
-           TEST_DEPS +
-           [CURRENT_TARGET],
-)
\ No newline at end of file
diff --git a/core/store/dist/BUCK b/core/store/dist/BUCK
deleted file mode 100644
index 608bfc9..0000000
--- a/core/store/dist/BUCK
+++ /dev/null
@@ -1,31 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//core/common:onos-core-common',
-    '//utils/rest:onlab-rest',
-    '//core/store/serializers:onos-core-serializers',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_handler',
-    '//lib:io_netty_netty_resolver',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_transport_native_unix_common',
-    '//lib:io_netty_netty_transport-native-epoll',
-    '//lib:commons-math3',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-core-dist',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/core/store/persistence/BUCK b/core/store/persistence/BUCK
deleted file mode 100644
index 01cfff7..0000000
--- a/core/store/persistence/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:mapdb',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-core-persistence',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/core/store/primitives/BUCK b/core/store/primitives/BUCK
deleted file mode 100644
index ffe4fae..0000000
--- a/core/store/primitives/BUCK
+++ /dev/null
@@ -1,28 +0,0 @@
-include_defs('//core/store/primitives/primitives.bucklet')
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:ATOMIX',
-    '//core/common:onos-core-common',
-    '//incubator/api:onos-incubator-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-    '//lib:io_netty_netty_handler',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_resolver',
-    '//lib:commons-math3',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-core-primitives',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-    import_packages = INCLUDE_PACKAGES + ',' + ALL_PACKAGES,
-)
diff --git a/core/store/primitives/primitives.bucklet b/core/store/primitives/primitives.bucklet
deleted file mode 100644
index c9c2fc7..0000000
--- a/core/store/primitives/primitives.bucklet
+++ /dev/null
@@ -1,41 +0,0 @@
-# Base package names for core Atomix primitives
-_primitive_package_names = (
-    'barrier',
-    'collection',
-    'counter',
-    'election',
-    'idgenerator',
-    'iterator',
-    'list',
-    'lock',
-    'map',
-    'multimap',
-    'multiset',
-    'queue',
-    'semaphore',
-    'set',
-    'transaction',
-    'tree',
-    'value',
-    'workqueue',
-)
-
-# A list of all core primitive packages for dynamic class loading
-PRIMITIVE_PACKAGES = ','.join(['io.atomix.primitive.session.impl'] + ['io.atomix.core.{primitive},io.atomix.core.{primitive}.impl'.format(primitive=primitive) for primitive in _primitive_package_names])
-
-# Base package names for core Atomix protocols
-_protocol_package_names = (
-    'raft',
-    'backup'
-)
-
-# A list of all core protocol packages for dynamic class loading
-PROTOCOL_PACKAGES = ','.join(['io.atomix.primitive.partition.impl'] + ['io.atomix.protocols.{protocol},io.atomix.protocols.{protocol}.partition'.format(protocol=protocol) for protocol in _protocol_package_names] + ['io.atomix.protocols.gossip'])
-
-# A list of all additional core packages used in dynamic class loading
-CORE_PACKAGES = ','.join(['io.atomix.core.profile', 'io.atomix.core.profile.impl'])
-
-# A list of all dynamically loadable Atomix packages
-INCLUDE_PACKAGES = ','.join([PRIMITIVE_PACKAGES, PROTOCOL_PACKAGES, CORE_PACKAGES])
-
-ALL_PACKAGES = '*'
diff --git a/core/store/serializers/BUCK b/core/store/serializers/BUCK
deleted file mode 100644
index c1c66da..0000000
--- a/core/store/serializers/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-core-serializers',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/docs/BUCK b/docs/BUCK
deleted file mode 100644
index 8269150..0000000
--- a/docs/BUCK
+++ /dev/null
@@ -1,198 +0,0 @@
-external_deps = UTILS + API + [
-  '//apps/cpman/api:onos-apps-cpman-api',
-  '//apps/routing-api:onos-apps-routing-api',
-  '//apps/dhcp/api:onos-apps-dhcp-api',
-]
-
-external_groups = [
-  ( 'Network Model &amp; Services', [ 'org.onosproject.*' ]),
-  ( 'Incubator for Network Model &amp; Services',  [ 'org.onosproject.incubator.*' ]),
-  ( 'Utilities', [ 'org.onlab.*' ]),
-  ( 'App &amp; Extensions', [
-      'org.onosproject.dhcp',
-      'org.onosproject.cpman',
-      'org.onosproject.routing',
-  ]),
-]
-
-internal_groups = [
-  ( 'Network Model &amp; Services', [ 'org.onosproject.*' ]),
-  ( 'Incubator for Network Model &amp; Services', [ 'org.onosproject.incubator.*' ]),
-  ( 'Core Subsystems', [
-  'org.onosproject.cfg.impl',
-  'org.onosproject.cluster.impl',
-  'org.onosproject.core.impl',
-  'org.onosproject.event.impl',
-  'org.onosproject.net.config.impl',
-  'org.onosproject.net.device.impl',
-  'org.onosproject.net.driver.impl',
-  'org.onosproject.net.edgeservice.impl',
-  'org.onosproject.net.flow.impl',
-  'org.onosproject.net.flowobjective.impl',
-  'org.onosproject.net.flowobjective.impl.composition',
-  'org.onosproject.net.group.impl',
-  'org.onosproject.net.host.impl',
-  'org.onosproject.net.intent.impl',
-  'org.onosproject.net.intent.impl.compiler',
-  'org.onosproject.net.intent.impl.phase',
-  'org.onosproject.net.intf.impl',
-  'org.onosproject.net.link.impl',
-  'org.onosproject.net.newresource.impl',
-  'org.onosproject.net.packet.impl',
-  'org.onosproject.net.proxyarp.impl',
-  'org.onosproject.net.resource.impl',
-  'org.onosproject.net.statistic.impl',
-  'org.onosproject.net.topology.impl',
-  'org.onosproject.json',
-  'org.onosproject.json.*',
-  'org.onosproject.common.*',
-  'org.onosproject.security.impl',
-  'org.onosproject.security.store',
-  ]),
-  ( 'Distributed Stores', [
-  'org.onosproject.store.*',
-  'org.onosproject.persistence.impl',
-  ]),
-  ( 'Incubator for Core Subsystems &amp; Distributed Stores', [
-  'org.onosproject.incubator.net.impl',
-  'org.onosproject.incubator.store.impl',
-  'org.onosproject.incubator.net.resource.label.impl',
-  'org.onosproject.incubator.store.resource.impl',
-  'org.onosproject.incubator.net.tunnel.impl',
-  'org.onosproject.incubator.store.tunnel.impl',
-  'org.onosproject.incubator.net.config.impl',
-  'org.onosproject.incubator.net.domain.impl',
-  'org.onosproject.incubator.store.config.impl',
-  'org.onosproject.incubator.net.meter.impl',
-  'org.onosproject.incubator.net.resource.label',
-  'org.onosproject.incubator.store.meter.impl',
-  ]),
-  ( 'Utilities', [ 'org.onlab.*' ]),
-  ( 'GUI, REST &amp; Command-Line', [
-  'org.onosproject.ui.impl*',
-  'org.onosproject.rest.*',
-  'org.onosproject.cli*',
-  'org.onosproject.codec.impl',
-  ]),
-  ( 'Builtin Applications', [
-  'org.onosproject.app.*',
-  'org.onosproject.acl*',
-  'org.onosproject.aaa',
-  'org.onosproject.fwd',
-  'org.onosproject.dhcp*',
-  'org.onosproject.flowanalyzer',
-  'org.onosproject.cpman*',
-  'org.onosproject.mobility',
-  'org.onosproject.proxyarp',
-  'org.onosproject.calendar',
-  'org.onosproject.olt*',
-  'org.onosproject.optical*',
-  'org.onosproject.newoptical*',
-  'org.onosproject.sdnip',
-  'org.onosproject.sdnip.*',
-  'org.onosproject.config',
-  'org.onosproject.routing',
-  'org.onosproject.routing*',
-  'org.onosproject.bgprouter',
-  'org.onosproject.segmentrouting*',
-  'org.onosproject.reactive.routing*',
-  'org.onosproject.messagingperf',
-  'org.onosproject.virtualbng*',
-  'org.onosproject.cordfabric*',
-  'org.onosproject.xosintegration*',
-  'org.onosproject.cip*',
-  'org.onosproject.vtn*',
-  'org.onosproject.cord*',
-  'org.onosproject.mcast*',
-  'org.onosproject.mfwd*',
-  'org.onosproject.mlb*',
-  'org.onosproject.igmp*',
-  'org.onosproject.pim*',
-  'org.onosproject.vpls*',
-  'org.onosproject.vrouter*',
-  'org.onosproject.faultmanagement*',
-  'org.onosproject.iptopology*',
-  'org.onosproject.drivermatrix*',
-  'org.onosproject.pathpainter*',
-  'org.onosproject.openstack*',
-  'org.onosproject.scalablegateway*',
-  'org.onosproject.forwarder*',
-  'org.onosproject.sfc*',
-  'org.onosproject.netcfgmonitor*',
-  'org.onosproject.flowperf',
-  'org.onosproject.loadtest',
-  'org.onosproject.events',
-  'org.onosproject.bmv2*',
-  'org.onosproject.xosclient*',
-  'org.onosproject.kafkaintegration*',
-  'org.onosproject.gangliametrics*',
-  'org.onosproject.graphitemetrics*',
-  'org.onosproject.influxdbmetrics*',
-  'org.onosproject.yms*',
-  ]),
-  ( 'Test Instrumentation &amp; Applications', [
-  'org.onosproject.metrics.*',
-  'org.onosproject.demo*',
-  'org.onosproject.election*',
-  'org.onosproject.distributedprimitives*',
-  'org.onosproject.intentperf*',
-  'org.onosproject.messagingperf*',
-  'org.onosproject.optical.testapp*',
-  ]),
-  ( 'OpenFlow Providers &amp; Controller', [
-  'org.onosproject.openflow.*',
-  'org.onosproject.provider.of.*',
-  ]),
-  ( 'NetConf Protocol &amp; Providers', [
-  'org.onosproject.netconf*',
-  'org.onosproject.provider.netconf*',
-  ]),
-  ( 'OVSDB Protocol &amp; Providers', [
-  'org.onosproject.provider.ovsdb*',
-  'org.onosproject.ovsdb*',
-  ]),
-  ( 'PCEP Protocol &amp; Providers', [
-  'org.onosproject.pce.*',
-  'org.onosproject.pcerest*',
-  'org.onosproject.pceweb*',
-  'org.onosproject.pcep*',
-  'org.onosproject.pcepio*',
-  'org.onosproject.provider.pcep*',
-  ]),
-  ( 'BGP-LS Protocol &amp; Providers', [
-  'org.onosproject.bgp.controller*',
-  'org.onosproject.bgp*',
-  'org.onosproject.provider.bgp*',
-  ]),
-  ( 'OSPF Protocol &amp; Providers', [ 'org.onosproject.ospf*' ]),
-  ( 'ISIS Protocol &amp; Providers', [ 'org.onosproject.isis*' ]),
-  ( 'LISP Protocol &amp; Providers', [ 'org.onosproject.lisp*' ]),
-  ( 'SNMP Protocol &amp; Providers', [ 'org.onosproject.snmp*' ]),
-  ( 'REST Protocol &amp; Providers', [
-  'org.onosproject.protocol.rest*',
-  'org.onosproject.provider.rest*',
-  ]),
-  ( 'Other Providers', [
-  'org.onosproject.provider.*',
-  'org.onosproject.protocol.*',
-  ]),
-  ( 'Device Drivers', [ 'org.onosproject.driver*' ]),
-]
-
-project_javadoc(
-  name = 'external',
-  project_title = 'ONOS Java API (%s)' % ONOS_VERSION,
-  javadoc_files = glob(['src/main/javadoc/doc-files/*']),
-  overview = 'src/main/javadoc/overview.html',
-  deps = external_deps,
-  groups = external_groups,
-)
-
-project_javadoc(
-  name = 'internal',
-  project_title = 'ONOS Java API (%s)' % ONOS_VERSION,
-  javadoc_files = glob(['src/main/javadoc/doc-files/*']),
-  overview = 'src/main/javadoc/overview.html',
-  deps = CORE,
-  groups = internal_groups,
-)
diff --git a/drivers/arista/BUCK b/drivers/arista/BUCK
deleted file mode 100644
index 0434807..0000000
--- a/drivers/arista/BUCK
+++ /dev/null
@@ -1,36 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/rest/api:onos-protocols-rest-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-arista',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.arista',
-    title = 'Arista Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Arista devices.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.restsb' ],
-)
diff --git a/drivers/barefoot/BUCK b/drivers/barefoot/BUCK
deleted file mode 100644
index 8bcefde..0000000
--- a/drivers/barefoot/BUCK
+++ /dev/null
@@ -1,30 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:minimal-json',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-    '//drivers/p4runtime:onos-drivers-p4runtime',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-netty-' + GRPC_VER,
-]
-
-BUNDLES = [
-    ':onos-drivers-barefoot',
-]
-
-osgi_jar(
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.barefoot',
-    title = 'Barefoot Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Barefoot-based devices',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.drivers.p4runtime',
-    ],
-)
diff --git a/drivers/bmv2/BUCK b/drivers/bmv2/BUCK
deleted file mode 100644
index 312020f..0000000
--- a/drivers/bmv2/BUCK
+++ /dev/null
@@ -1,44 +0,0 @@
-# Buck build of P4-related modules is no longer supported, please use Bazel
-# GRPC_VER = '1.3.1'
-#
-# COMPILE_DEPS = [
-#     '//lib:CORE_DEPS',
-#     '//lib:minimal-json',
-#     '//lib:KRYO',
-#     '//lib:JACKSON',
-#     '//lib:libthrift',
-#     '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-#     '//protocols/p4runtime/model:onos-protocols-p4runtime-model',
-#     '//protocols/bmv2/thrift-api:onos-protocols-bmv2-thrift-api',
-#     '//drivers/p4runtime:onos-drivers-p4runtime',
-#     '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-#     '//lib:grpc-netty-' + GRPC_VER,
-#     '//pipelines/basic:onos-pipelines-basic',
-#     '//core/store/serializers:onos-core-serializers',
-# ]
-#
-# BUNDLES = [
-#     ':onos-drivers-bmv2',
-#     '//lib:libthrift',
-#     '//protocols/bmv2/thrift-api:onos-protocols-bmv2-thrift-api',
-# ]
-#
-# osgi_jar(
-#     deps = COMPILE_DEPS,
-#     resources_root = 'src/main/resources',
-#     resources = glob(['src/main/resources/**']),
-# )
-#
-# onos_app (
-#     app_name = 'org.onosproject.drivers.bmv2',
-#     title = 'BMv2 Drivers',
-#     category = 'Drivers',
-#     url = 'http://onosproject.org',
-#     description = 'Adds support for BMv2 P4 devices.',
-#     included_bundles = BUNDLES,
-#     required_apps = [
-#         'org.onosproject.drivers.p4runtime',
-#         'org.onosproject.drivers.gnmi',
-#         'org.onosproject.pipelines.basic',
-#     ],
-# )
diff --git a/drivers/ciena/c5162/BUCK b/drivers/ciena/c5162/BUCK
deleted file mode 100644
index 1f3584b..0000000
--- a/drivers/ciena/c5162/BUCK
+++ /dev/null
@@ -1,47 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//drivers/netconf:onos-drivers-netconf',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//drivers/netconf:onos-drivers-netconf-tests',
-    '//lib:slf4j-jdk14',
-]
-
-BUNDLES = [
-    ':onos-drivers-ciena-c5162',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//drivers/netconf:onos-drivers-netconf',
-]
-
-REQUIRED_APPS = [
-    'org.onosproject.linkdiscovery',
-    'org.onosproject.netconf',
-    'org.onosproject.netconfsb',
-    'org.onosproject.drivers.netconf'
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/*/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.ciena.c5162',
-    title = 'Ciena 5162 Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Ciena 5162 devices.',
-    included_bundles = BUNDLES,
-    required_apps = REQUIRED_APPS,
-)
diff --git a/drivers/ciena/c5170/BUCK b/drivers/ciena/c5170/BUCK
deleted file mode 100644
index 8c4ea6e..0000000
--- a/drivers/ciena/c5170/BUCK
+++ /dev/null
@@ -1,46 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//drivers/netconf:onos-drivers-netconf',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//drivers/netconf:onos-drivers-netconf-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-ciena-c5170',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//drivers/netconf:onos-drivers-netconf',
-]
-
-REQUIRED_APPS = [
-    'org.onosproject.linkdiscovery',
-    'org.onosproject.netconf',
-    'org.onosproject.netconfsb',
-    'org.onosproject.drivers.netconf'
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.ciena.c5170',
-    title = 'Ciena 5170 Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Ciena 5170 devices.',
-    included_bundles = BUNDLES,
-    required_apps = REQUIRED_APPS,
-)
diff --git a/drivers/ciena/waveserver/BUCK b/drivers/ciena/waveserver/BUCK
deleted file mode 100644
index 095ec04..0000000
--- a/drivers/ciena/waveserver/BUCK
+++ /dev/null
@@ -1,44 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/rest/api:onos-protocols-rest-api',
-    '//apps/optical-model:onos-apps-optical-model',
-    '//drivers/optical:onos-drivers-optical',
-]
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-ciena-waveserver',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-REQUIRED_APPS = [
-    'org.onosproject.restsb',
-    'org.onosproject.optical-model',
-    'org.onosproject.drivers.optical',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.ciena.waveserver',
-    title = 'Ciena Waveserver Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Ciena Waveserver devices.',
-    included_bundles = BUNDLES,
-    required_apps = REQUIRED_APPS,
-)
diff --git a/drivers/ciena/waveserverai/BUCK b/drivers/ciena/waveserverai/BUCK
deleted file mode 100644
index 26f7b9f..0000000
--- a/drivers/ciena/waveserverai/BUCK
+++ /dev/null
@@ -1,53 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:ONOS_YANG',
-    '//lib:javax.ws.rs-api',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//drivers/netconf:onos-drivers-netconf',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//protocols/netconf/ctl:onos-protocols-netconf-ctl',
-    '//models/common:onos-models-common',
-    '//models/ciena/waveserverai:onos-models-ciena-waveserverai',
-    '//apps/optical-model:onos-apps-optical-model',
-    '//drivers/optical:onos-drivers-optical',
-]
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//drivers/netconf:onos-drivers-netconf-tests',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-ciena-waveserverai',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//drivers/netconf:onos-drivers-netconf',
-]
-
-REQUIRED_APPS = [
-    'org.onosproject.yang',
-    'org.onosproject.optical-model',
-    'org.onosproject.drivers.optical',
-    'org.onosproject.models.ciena.waveserverai',
-    'org.onosproject.netconf',
-    'org.onosproject.netconfsb',
-    'org.onosproject.drivers.netconf',
-    'org.onosproject.linkdiscovery',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.ciena.waveserverai',
-    title = 'Ciena Waveserver Ai Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Ciena Waveserver Ai devices.',
-    required_apps = REQUIRED_APPS,
-    included_bundles = BUNDLES,
-)
diff --git a/drivers/cisco/netconf/BUCK b/drivers/cisco/netconf/BUCK
deleted file mode 100644
index 6975a52..0000000
--- a/drivers/cisco/netconf/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-cisco-netconf',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.cisco.netconf',
-    title = 'Cisco NETCONF Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Cisco devices using NETCONF protocol.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.netconf', 'org.onosproject.drivers.netconf' ],
-)
diff --git a/drivers/cisco/rest/BUCK b/drivers/cisco/rest/BUCK
deleted file mode 100644
index 73acb67..0000000
--- a/drivers/cisco/rest/BUCK
+++ /dev/null
@@ -1,36 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/rest/api:onos-protocols-rest-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-cisco-rest',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.cisco.rest',
-    title = 'Cisco REST Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Cisco devices using REST.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.restsb' ],
-)
diff --git a/drivers/corsa/BUCK b/drivers/corsa/BUCK
deleted file mode 100644
index 10eaf82..0000000
--- a/drivers/corsa/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:openflowj',
-    '//drivers/default:onos-drivers-default',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.corsa',
-    title = 'Corsa Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Corsa devices.',
-    required_apps = [ 'org.onosproject.openflow' ],
-)
diff --git a/drivers/default/BUCK b/drivers/default/BUCK
deleted file mode 100644
index d8b95de..0000000
--- a/drivers/default/BUCK
+++ /dev/null
@@ -1,33 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers',
-    title = 'Default Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Suite of default drivers.',
-    included_bundles = [
-        ':onos-drivers-default',
-        '//lib:openflowj',
-        '//protocols/openflow/api:onos-protocols-openflow-api',
-    ]
-)
diff --git a/drivers/flowspec/BUCK b/drivers/flowspec/BUCK
deleted file mode 100644
index 7590eb2..0000000
--- a/drivers/flowspec/BUCK
+++ /dev/null
@@ -1,27 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//drivers/default:onos-drivers-default',
-    '//apps/flowspec-api/flowapi:onos-apps-flowspec-api-flowapi',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.flowspec',
-    title = 'Generic Flow Spec Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for devices using flow specs.',
-    required_apps = [ 'org.onosproject.drivers'],
-)
diff --git a/drivers/fujitsu/BUCK b/drivers/fujitsu/BUCK
deleted file mode 100644
index 71bc9b6..0000000
--- a/drivers/fujitsu/BUCK
+++ /dev/null
@@ -1,37 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//protocols/netconf/ctl:onos-protocols-netconf-ctl',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//apps/optical-model:onos-apps-optical-model',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-fujitsu',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.fujitsu',
-    title = 'Fujitsu Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Fujitsu devices.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.netconf', 'org.onosproject.optical-model', 'org.onosproject.drivers.optical' ],
-)
diff --git a/drivers/gnmi/BUCK b/drivers/gnmi/BUCK
deleted file mode 100644
index 0fe379e..0000000
--- a/drivers/gnmi/BUCK
+++ /dev/null
@@ -1,38 +0,0 @@
-PROTOBUF_VER = '3.2.0'
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//protocols/grpc/api:onos-protocols-grpc-api',
-    '//protocols/grpc/proto:onos-protocols-grpc-proto',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-netty-' + GRPC_VER,
-    '//lib:protobuf-java-' + PROTOBUF_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-    '//core/store/serializers:onos-core-serializers',
-    '//protocols/gnmi/stub:onos-protocols-gnmi-stub',
-]
-
-BUNDLES = [
-    ':onos-drivers-gnmi',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.gnmi',
-    title = 'gNMI Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for devices using gNMI protocol based on ' +
-    ' openconfig models: http://openconfig.net/ .',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.generaldeviceprovider',
-        'org.onosproject.protocols.grpc',
-        'org.onosproject.protocols.gnmi'
-    ],
-)
\ No newline at end of file
diff --git a/drivers/hp/BUCK b/drivers/hp/BUCK
deleted file mode 100644
index a403221..0000000
--- a/drivers/hp/BUCK
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:openflowj',
-    '//drivers/default:onos-drivers-default',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.hp',
-    title = 'HP Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for HP devices.',
-    required_apps = [ 'org.onosproject.openflow' ],
-)
diff --git a/drivers/huawei/BUCK b/drivers/huawei/BUCK
deleted file mode 100644
index e8689ea..0000000
--- a/drivers/huawei/BUCK
+++ /dev/null
@@ -1,49 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.servicemix.bundles.dom4j',
-    '//models/l3vpn:onos-models-l3vpn',
-    '//models/huawei:onos-models-huawei',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//apps/l3vpn:onos-apps-l3vpn',
-    '//apps/config:onos-apps-config',
-    '//lib:onos-yang-model',
-    '//lib:onos-yang-runtime',
-    '//apps/yang:onos-apps-yang',
-    '//models/common:onos-models-common',
-]
-
-APPS = [
-    'org.onosproject.yang',
-    'org.onosproject.yang-gui',
-    'org.onosproject.config',
-    'org.onosproject.restconf',
-    'org.onosproject.protocols.restconfserver',
-    'org.onosproject.netconf',
-    'org.onosproject.netconfsb',
-    'org.onosproject.models.common',
-    'org.onosproject.models.l3vpn',
-    'org.onosproject.l3vpn',
-    'org.onosproject.models.huawei',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app(
-    app_name = 'org.onosproject.drivers.huawei',
-    title = 'Huawei Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Huawei devices.',
-    required_apps = APPS
-)
\ No newline at end of file
diff --git a/drivers/juniper/BUCK b/drivers/juniper/BUCK
deleted file mode 100644
index 1339200..0000000
--- a/drivers/juniper/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//drivers/utilities:onos-drivers-utilities',
-  '//protocols/netconf/api:onos-protocols-netconf-api',
-]
-
-BUNDLES = [
-  ':onos-drivers-juniper',
-  '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-  resources_root = 'src/main/resources',
-  resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-  app_name = 'org.onosproject.drivers.juniper',
-  title = 'Juniper Drivers',
-  category = 'Drivers',
-  url = 'http://onosproject.org',
-  description = 'Adds support for Juniper devices.',
-  included_bundles = BUNDLES,
-  required_apps = [ 'org.onosproject.netconf' ],
-)
\ No newline at end of file
diff --git a/drivers/lisp/BUCK b/drivers/lisp/BUCK
deleted file mode 100644
index 18b053a..0000000
--- a/drivers/lisp/BUCK
+++ /dev/null
@@ -1,40 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//protocols/lisp/api:onos-protocols-lisp-api',
-    '//protocols/lisp/msg:onos-protocols-lisp-msg',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-    '//core/store/serializers:onos-core-serializers'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api-tests',
-    '//core/api:onos-api-tests',
-    '//lib:jersey-test-framework-core',
-    '//lib:jersey-test-framework-jetty',
-    '//utils/osgi:onlab-osgi-tests',
-    '//web/api:onos-rest-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-lisp',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.lisp',
-    title = 'Generic LISP Drivers',
-    category = 'Drivers',
-    url = 'https://wiki.onosproject.org/display/ONOS/LISP+as+SBI',
-    description = 'Adds support for devices using LISP.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.lisp' ],
-)
diff --git a/drivers/lumentum/BUCK b/drivers/lumentum/BUCK
deleted file mode 100644
index 1699870..0000000
--- a/drivers/lumentum/BUCK
+++ /dev/null
@@ -1,41 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.servicemix.bundles.snmp4j',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/snmp/api:onos-protocols-snmp-api',
-    '//protocols/tl1/api:onos-protocols-tl1-api',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//incubator/api:onos-incubator-api',
-    '//apps/optical-model:onos-apps-optical-model',
-    '//drivers/optical:onos-drivers-optical',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-lumentum',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.lumentum',
-    title = 'Lumentum Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-
-    description = 'ONOS Lumentum Device Drivers application.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.snmp', 'org.onosproject.faultmanagement', 'org.onosproject.optical-model',
-     'org.onosproject.tl1', 'org.onosproject.netconf', 'org.onosproject.drivers.optical'],
-
-)
diff --git a/drivers/mellanox/BUCK b/drivers/mellanox/BUCK
deleted file mode 100644
index bb9bfbc..0000000
--- a/drivers/mellanox/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//drivers/p4runtime:onos-drivers-p4runtime',
-]
-
-BUNDLES = [
-    ':onos-drivers-mellanox',
-]
-
-osgi_jar(
-    deps = COMPILE_DEPS,
-)
-
-onos_app(
-    app_name = 'org.onosproject.drivers.mellanox',
-    title = 'Mellanox Drivers',
-    category = 'Drivers',
-    url = 'https://wiki.onosproject.org/x/aAZkAQ',
-    description = 'Adds support for Mellanox Spectrum-based devices using P4Runtime',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.drivers.p4runtime',
-        'org.onosproject.pipelines.fabric',
-    ],
-)
diff --git a/drivers/microsemi/ea1000/BUCK b/drivers/microsemi/ea1000/BUCK
deleted file mode 100644
index 940903e..0000000
--- a/drivers/microsemi/ea1000/BUCK
+++ /dev/null
@@ -1,48 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:ONOS_YANG',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//protocols/netconf/ctl:onos-protocols-netconf-ctl',
-    '//models/common:onos-models-common',
-    '//models/microsemi:onos-models-microsemi',
-    '//lib:org.apache.karaf.shell.console',
-    '//apps/cfm/api:onos-apps-cfm-api',
-] + YANG_TOOLS
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//drivers/netconf:onos-drivers-netconf-tests',
-    '//utils/osgi:onlab-osgi-tests',
-    '//apps/cfm/app:onos-apps-cfm-app',
-    '//apps/cfm/app:onos-apps-cfm-app-tests',
-]
-
-APPS = [
-    'org.onosproject.yang',
-#     'org.onosproject.yang-gui',
-    'org.onosproject.config',
-    'org.onosproject.netconf',
-    'org.onosproject.netconfsb',
-    'org.onosproject.drivers.netconf',
-    'org.onosproject.models.common',
-    'org.onosproject.models.microsemi',
-    'org.onosproject.cfm',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.microsemi.ea1000',
-    title = 'Microsemi Drivers EA1000',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Microsemi EA1000 devices.',
-    required_apps = APPS,
-)
diff --git a/drivers/netconf/BUCK b/drivers/netconf/BUCK
deleted file mode 100644
index 560d7b5..0000000
--- a/drivers/netconf/BUCK
+++ /dev/null
@@ -1,33 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//lib:slf4j-jdk14',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-netconf',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.netconf',
-    title = 'Generic NETCONF Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for devices using NETCONF.',
-    included_bundles = BUNDLES,
-    required_apps = [ 'org.onosproject.netconf' ],
-)
diff --git a/drivers/odtn-driver/BUCK b/drivers/odtn-driver/BUCK
deleted file mode 100644
index 86d34bd..0000000
--- a/drivers/odtn-driver/BUCK
+++ /dev/null
@@ -1,42 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//lib:commons-jxpath',
-    '//apps/odtn/api:onos-apps-odtn-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//lib:slf4j-jdk14',
-]
-
-BUNDLES = [
-    ':onos-drivers-odtn-driver',
-    '//drivers/utilities:onos-drivers-utilities',
-#     '//lib:commons-jxpath',
-#     '//lib:commons-beanutils', # jxpath dependency
-#     '//lib:jdom',  # jxpath dependency
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.odtn-driver',
-    title = 'ODTN Driver',
-    category = 'Drivers',
-    url = 'https://wiki.onosproject.org/display/ODTN/ODTN',
-    description = 'Drivers related to ODTN',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.netconf',
-        'org.onosproject.config',
-        'org.onosproject.odtn-api',
-    ],
-)
diff --git a/drivers/oplink/BUCK b/drivers/oplink/BUCK
deleted file mode 100644
index 43b0826..0000000
--- a/drivers/oplink/BUCK
+++ /dev/null
@@ -1,36 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//drivers/default:onos-drivers-default',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//apps/optical-model:onos-apps-optical-model',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-oplink',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app(
-    app_name = 'org.onosproject.drivers.oplink',
-    title = 'Oplink Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for Oplink devices.',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.netconf', 'org.onosproject.optical-model'
-    ],
-)
\ No newline at end of file
diff --git a/drivers/optical/BUCK b/drivers/optical/BUCK
deleted file mode 100644
index f9eef16..0000000
--- a/drivers/optical/BUCK
+++ /dev/null
@@ -1,31 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-    '//drivers/default:onos-drivers-default',
-    '//apps/optical-model:onos-apps-optical-model',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.optical',
-    title = 'Basic Optical Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Suite of basic optical device drivers.',
-    required_apps = [ 'org.onosproject.drivers', 'org.onosproject.optical-model' ],
-)
diff --git a/drivers/ovsdb/BUCK b/drivers/ovsdb/BUCK
deleted file mode 100644
index 3446bd2..0000000
--- a/drivers/ovsdb/BUCK
+++ /dev/null
@@ -1,27 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.ovsdb',
-    title = 'Generic OVSDB Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for devices using OVSDB.',
-    required_apps = [ 'org.onosproject.ovsdb-base' ],
-)
diff --git a/drivers/p4runtime/BUCK b/drivers/p4runtime/BUCK
deleted file mode 100644
index ea135ef..0000000
--- a/drivers/p4runtime/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//core/store/serializers:onos-core-serializers',
-]
-
-BUNDLES = [
-    ':onos-drivers-p4runtime',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.p4runtime',
-    title = 'P4Runtime Drivers',
-    category = 'Drivers',
-    url = 'http://onosproject.org',
-    description = 'Adds support for devices using P4 Runtime protocol.',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.generaldeviceprovider',
-        'org.onosproject.protocols.p4runtime',
-        'org.onosproject.p4runtime',
-        'org.onosproject.drivers',
-    ],
-)
diff --git a/drivers/polatis/netconf/BUCK b/drivers/polatis/netconf/BUCK
deleted file mode 100644
index 061ae0d..0000000
--- a/drivers/polatis/netconf/BUCK
+++ /dev/null
@@ -1,44 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//models/polatis:onos-models-polatis',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//lib:onos-yang-model',
-    '//apps/optical-model:onos-apps-optical-model',
-    '//incubator/api:onos-incubator-api',
-]
-
-APPS = [
-    'org.onosproject.netconf',
-    'org.onosproject.models.common',
-    'org.onosproject.models.polatis',
-    'org.onosproject.optical-model',
-    'org.onosproject.faultmanagement',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-polatis-netconf',
-    '//drivers/utilities:onos-drivers-utilities',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app(
-    app_name = 'org.onosproject.drivers.polatis.netconf',
-    title = 'Polatis Device Drivers',
-    category = 'Drivers',
-    url = 'http://www.polatis.com',
-    description = 'ONOS Polatis Device Drivers application.',
-    included_bundles = BUNDLES,
-    required_apps = APPS
-)
diff --git a/drivers/polatis/openflow/BUCK b/drivers/polatis/openflow/BUCK
deleted file mode 100644
index 704ad3d..0000000
--- a/drivers/polatis/openflow/BUCK
+++ /dev/null
@@ -1,34 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-    '//apps/optical-model:onos-apps-optical-model',
-]
-
-APPS = [
-    'org.onosproject.drivers.optical',
-    'org.onosproject.optical-model',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.polatis.openflow',
-    title = 'Polatis OpenFlow Device Drivers',
-    category = 'Drivers',
-    url = 'http://www.polatis.com',
-    description = 'ONOS Polatis OpenFlow Device Drivers application.',
-    required_apps = APPS
-)
-
diff --git a/drivers/polatis/snmp/BUCK b/drivers/polatis/snmp/BUCK
deleted file mode 100644
index 5ff6cdf..0000000
--- a/drivers/polatis/snmp/BUCK
+++ /dev/null
@@ -1,35 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:org.apache.servicemix.bundles.snmp4j',
-    '//drivers/utilities:onos-drivers-utilities',
-    '//protocols/snmp/api:onos-protocols-snmp-api',
-    '//apps/optical-model:onos-apps-optical-model',
-    '//incubator/api:onos-incubator-api',
-]
-
-APPS = [
-    'org.onosproject.snmp',
-    'org.onosproject.optical-model',
-    'org.onosproject.faultmanagement',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app(
-    app_name = 'org.onosproject.drivers.polatis.snmp',
-    title = 'Polatis SNMP Device Drivers',
-    category = 'Drivers',
-    url = 'http://www.polatis.com',
-    description = 'ONOS Polatis SNMP Device Drivers application.',
-    required_apps = APPS
-)
diff --git a/drivers/server/BUCK b/drivers/server/BUCK
deleted file mode 100644
index cfb6acd..0000000
--- a/drivers/server/BUCK
+++ /dev/null
@@ -1,40 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:javax.ws.rs-api',
-    '//lib:joda-time',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//protocols/rest/api:onos-protocols-rest-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-]
-
-BUNDLES = [
-    ':onos-drivers-server',
-]
-
-REQUIRED_APPS = [
-    'org.onosproject.restsb',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
-onos_app (
-    app_name = 'org.onosproject.drivers.server',
-    title = 'Server Device Drivers',
-    category = 'Drivers',
-    origin = 'KTH Royal Institute of Technology &amp; RISE SICS',
-    url = 'https://github.com/gkatsikas/onos/tree/metron-driver',
-    description = 'ONOS southbound drivers for commodity servers',
-    included_bundles = BUNDLES,
-    required_apps = REQUIRED_APPS,
-)
diff --git a/drivers/utilities/BUCK b/drivers/utilities/BUCK
deleted file mode 100644
index 731ad13..0000000
--- a/drivers/utilities/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//core/net:onos-core-net',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-)
-
diff --git a/incubator/api/BUCK b/incubator/api/BUCK
deleted file mode 100644
index eb7b036..0000000
--- a/incubator/api/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-incubator-api',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/incubator/grpc-dependencies/BUCK b/incubator/grpc-dependencies/BUCK
deleted file mode 100644
index 99d74cc..0000000
--- a/incubator/grpc-dependencies/BUCK
+++ /dev/null
@@ -1,41 +0,0 @@
-include_defs('//bucklets/grpc.bucklet')
-
-fetch_grpc_plugin(version = '1.3.1')
-
-# Repackaging of gRPC 1.3.* to solve the OSGI split package issue.
-# If bumping the gRPC version, please write a new rule.
-
-def grpc_core_repkg_131():
-    repkg_deps = [
-        '//lib:COMPILE',
-        '//lib:google-instrumentation-0.3.0',
-        '//lib:google-errorprone-2.0.19'
-    ]
-    remote_file(
-        name = "grpc-src-zip-131",
-        url = "https://github.com/grpc/grpc-java/archive/v1.3.1.zip",
-        sha1 = "03dc21440fdfa920aa0e905da17df35b0d6c9a44",
-    )
-    srcs = []
-    for pkg in ['core', 'context']:
-        name = 'grpc-' + pkg + '-130'
-        genrule(
-            name = name,
-            bash = 'jar xf $(location :grpc-src-zip-131) grpc-java-1.3.1/' + pkg + '/src/main/java '
-            + '&& cd grpc-java-1.3.1/' + pkg + '/src/main/java '
-            + '&& jar -cf $OUT *',
-            out = pkg + '.src.zip',
-        )
-        srcs.append(':' + name)
-    osgi_jar(
-        name = 'grpc-core-repkg-1.3.1',
-        srcs = srcs,
-        deps = repkg_deps,
-        package_name_root = 'io.grpc',
-        import_packages = '!javax.annotation,!com.google.errorprone.annotations,*',
-        export_packages = '*',
-        do_javadocs = False,
-        do_checkstyle = False,
-    )
-
-grpc_core_repkg_131()
diff --git a/incubator/net/BUCK b/incubator/net/BUCK
deleted file mode 100644
index 902434a..0000000
--- a/incubator/net/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//lib:KRYO',
-    '//core/common:onos-core-common',
-    '//incubator/api:onos-incubator-api',
-    '//incubator/store:onos-incubator-store',
-    '//utils/rest:onlab-rest',
-    '//lib:concurrent-trees',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//incubator/api:onos-incubator-api-tests',
-    '//lib:TEST_REST',
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/incubator/protobuf-dependencies/BUCK b/incubator/protobuf-dependencies/BUCK
deleted file mode 100644
index b7705de..0000000
--- a/incubator/protobuf-dependencies/BUCK
+++ /dev/null
@@ -1,4 +0,0 @@
-include_defs('//bucklets/grpc.bucklet')
-
-fetch_protoc(version = '3.0.2')
-fetch_protoc(version = '3.2.0')
\ No newline at end of file
diff --git a/incubator/protobuf/api/BUCK b/incubator/protobuf/api/BUCK
deleted file mode 100644
index 13a04d4..0000000
--- a/incubator/protobuf/api/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/grpc-dependencies:grpc-core-repkg-1.3.1'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    name = 'onos-grpc-api',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/incubator/protobuf/models/BUCK b/incubator/protobuf/models/BUCK
deleted file mode 100644
index 04f71b0..0000000
--- a/incubator/protobuf/models/BUCK
+++ /dev/null
@@ -1,35 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    ':onos-incubator-protobuf-models-proto',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:GRPC_1.3',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER
-]
-
-GRPC_DEPS = [
-    '//lib:GRPC_1.3',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:com_google_guava_guava',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER
-]
-
-BUNDLES = [
-    ':onos-incubator-protobuf-models',
-    ':onos-incubator-protobuf-models-proto',
-    '//lib:protobuf-java-3.2.0',
-]
-
-grpc_jar(
-    name = 'onos-incubator-protobuf-models-proto',
-    deps = GRPC_DEPS,
-    # FIXME should not be manually building absolute path.
-    # Come up with glob(..) equivalent in BUCK which can handle directory.
-    proto_paths = ["$ONOS_ROOT/incubator/protobuf/models/src/main/proto"]
-)
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/incubator/protobuf/registry/BUCK b/incubator/protobuf/registry/BUCK
deleted file mode 100644
index ff95260..0000000
--- a/incubator/protobuf/registry/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:GRPC_1.3',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//incubator/protobuf/api:onos-grpc-api'
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    title = 'Grpc Service Registry',
-    app_name = "org.onosproject.grpc.registry",
-    included_bundles = ['//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-        '//lib:google-instrumentation-0.3.0'],
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    description = 'Service providing connections for remote apps communicating with the ONOS core via gRPC.',
-)
diff --git a/incubator/protobuf/services/nb/BUCK b/incubator/protobuf/services/nb/BUCK
deleted file mode 100644
index f05f448..0000000
--- a/incubator/protobuf/services/nb/BUCK
+++ /dev/null
@@ -1,78 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    ':onos-incubator-protobuf-services-nb-proto',
-    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
-    '//incubator/protobuf/models:onos-incubator-protobuf-models',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:GRPC_1.3',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-protobuf-lite-' + GRPC_VER,
-    '//incubator/protobuf/api:onos-grpc-api'
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//lib:TEST_ADAPTERS',
-]
-
-GRPC_DEPS = [
-    '//lib:GRPC_1.3',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:com_google_guava_guava',
-]
-
-BUNDLES = [
-    '//incubator/protobuf/models:onos-incubator-protobuf-models',
-    '//incubator/protobuf/models:onos-incubator-protobuf-models-proto',
-    ':onos-incubator-protobuf-services-nb',
-    ':onos-incubator-protobuf-services-nb-proto',
-    '//lib:protobuf-java-3.2.0',
-    '//lib:com_google_guava_guava',
-    '//lib:grpc-core-' + GRPC_VER,
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-protobuf-' + GRPC_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-    '//lib:grpc-netty-' + GRPC_VER,
-    '//lib:grpc-auth-' + GRPC_VER,
-    '//lib:grpc-context-' + GRPC_VER,
-    '//lib:google-truth-0.28',
-    '//core/api:onos-api',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_resolver',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_handler',
-    '//lib:io_netty_netty_codec-http2',
-    '//lib:io_netty_netty_codec-http',
-    "//lib:google-instrumentation-0.3.0",
-]
-
-grpc_jar(
-    name = 'onos-incubator-protobuf-services-nb-proto',
-    deps = GRPC_DEPS,
-    # FIXME should not be manually building absolute path
-    # come up with glob(..) equivalent in BUCK which can handle directory
-    proto_paths = ["$ONOS_ROOT/incubator/protobuf/services/nb/src/main/proto",
-        "$ONOS_ROOT/incubator/protobuf/models/src/main/proto"]
-)
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
-
-onos_app (
-    title = 'Grpc Northbound Service',
-    app_name = "org.onosproject.grpc.nb.service",
-    category = 'Utility',
-    url = 'http://onosproject.org',
-    included_bundles = ['//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-            '//lib:google-instrumentation-0.3.0'],
-    description = 'gRPC northbound services used to provide fine-grained access to ONOS native northbound interface from off-platform applications',
-)
diff --git a/incubator/rpc/BUCK b/incubator/rpc/BUCK
deleted file mode 100644
index 068a43b..0000000
--- a/incubator/rpc/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/incubator/store/BUCK b/incubator/store/BUCK
deleted file mode 100644
index e3fa120..0000000
--- a/incubator/store/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//lib:concurrent-trees',
-    '//incubator/api:onos-incubator-api',
-    '//core/store/dist:onos-core-dist',
-    '//core/store/serializers:onos-core-serializers',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-)
diff --git a/lib/BUCK b/lib/BUCK
deleted file mode 100644
index 7c56626..0000000
--- a/lib/BUCK
+++ /dev/null
@@ -1,2070 +0,0 @@
-<<<<<<< HEAD
-<<<<<<< HEAD
-<<<<<<< HEAD
-# ***** This file was auto-generated at Tue, 18 Sep 2018 20:31:36 GMT. Do not edit this file manually. *****
-=======
-# ***** This file was auto-generated at Thu, 27 Sep 2018 15:25:26 GMT. Do not edit this file manually. *****
->>>>>>> origin/master
-=======
-# ***** This file was auto-generated at Fri, 5 Oct 2018 20:40:12 GMT. Do not edit this file manually. *****
->>>>>>> master
-=======
-# ***** This file was auto-generated at Fri, 12 Oct 2018 17:49:41 GMT. Do not edit this file manually. *****
->>>>>>> f4f54a1be000d2aaae7299ed6d26468c7e0e0763
-# ***** Use onos-lib-gen *****
-
-pass_thru_pom(
-    name = 'onos-dependencies-pom',
-    src = 'pom.xml',
-    out = 'onos-dependencies.pom',
-    artifactId = 'onos-dependencies',
-)
-
-osgi_feature_group(
-  name = 'COMPILE',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':commons-configuration',
-    ':commons-logging',
-    ':commons-collections',
-    ':commons-lang',
-    ':commons-lang3',
-    ':commons-io',
-    ':commons-pool',
-    ':com_google_guava_guava',
-    ':slf4j-api',
-    ':osgi-core',
-    ':org.osgi.service.component',
-    ':org.osgi.service.component.annotations',
-    ':org.osgi.service.metatype.annotations',
-    ':org.apache.karaf.features.core',
-    ':org.apache.karaf.system.core',
-    ':com_google_code_findbugs_jsr305',
-    ':org.apache.servicemix.bundles.dom4j',
-  ],
-)
-
-osgi_feature_group(
-  name = 'CORE_DEPS',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':COMPILE',
-    '//core/api:onos-api',
-    '//utils/misc:onlab-misc',
-    '//utils/osgi:onlab-osgi',
-  ],
-)
-
-osgi_feature_group(
-  name = 'TEST',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':junit',
-    ':easymock',
-    ':hamcrest-all',
-    ':hamcrest-optional',
-    ':com_google_guava_guava_testlib',
-    '//utils/junit:onlab-junit',
-  ],
-)
-
-osgi_feature_group(
-  name = 'TEST_ADAPTERS',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':TEST',
-    '//core/common:onos-core-common',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-  ],
-)
-
-osgi_feature_group(
-  name = 'TEST_REST',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':TEST_ADAPTERS',
-    ':jersey-client',
-    ':jersey-server',
-    ':jersey-common',
-    ':jersey-hk2',
-    ':jersey-test-framework-core',
-    ':jersey-test-framework-jetty',
-    ':jersey-container-jetty-http',
-    ':jetty-continuation',
-    ':jetty-http',
-    ':jetty-server',
-    ':jetty-io',
-    ':jetty-util',
-    ':javax.servlet-api',
-    ':hk2-api',
-    ':hk2-locator',
-    ':hk2-utils',
-    ':javax.inject',
-    ':hk2-osgi-resource-locator',
-    ':javax.annotation-api-mvn',
-    ':validation-api',
-    '//core/common:onos-core-common',
-    '//core/api:onos-api-tests',
-    '//core/common:onos-core-common-tests',
-    '//utils/osgi:onlab-osgi-tests',
-  ],
-)
-
-osgi_feature_group(
-  name = 'NETTY',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':io_netty_netty_buffer',
-    ':io_netty_netty_common',
-  ],
-)
-
-osgi_feature_group(
-  name = 'ONOS_YANG',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':onos-yang-model',
-    ':onos-yang-compiler-api',
-    ':onos-yang-serializers-json',
-    ':onos-yang-serializers-xml',
-    ':onos-yang-serializers-utils',
-  ],
-)
-
-osgi_feature_group(
-  name = 'JACKSON',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':jackson-annotations',
-    ':jackson-core',
-    ':jackson-databind',
-  ],
-)
-
-osgi_feature_group(
-  name = 'METRICS',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':metrics-core',
-    ':metrics-json',
-  ],
-)
-
-osgi_feature_group(
-  name = 'KRYO',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':kryo',
-    ':reflectasm',
-    ':asm',
-    ':minlog',
-    ':objenesis',
-  ],
-)
-
-osgi_feature_group(
-  name = 'CLI',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-  ],
-)
-
-osgi_feature_group(
-  name = 'REST',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-  ],
-)
-
-osgi_feature_group(
-  name = 'ATOMIX',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':atomix',
-    ':atomix-cluster',
-    ':atomix-gossip',
-    ':atomix-primary-backup',
-    ':atomix-primitive',
-    ':atomix-raft',
-    ':atomix-storage',
-    ':atomix-utils',
-    ':typesafe-config',
-    ':classgraph',
-  ],
-)
-
-osgi_feature_group(
-  name = 'GRPC_1.3',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':grpc-protobuf-1.3.1',
-    ':grpc-stub-1.3.1',
-    ':grpc-netty-1.3.1',
-    ':grpc-auth-1.3.1',
-    ':grpc-context-1.3.1',
-    ':google-truth-0.28',
-  ],
-)
-
-osgi_feature_group(
-  name = 'GRPC_TEST_1.3',
-  visibility = ['PUBLIC'],
-  exported_deps = [
-    ':grpc-testing-1.3.1',
-    ':grpc-testing-proto-1.3.1',
-    ':google-code-findbugs-3.0.0',
-    ':google-errorprone-2.0.19',
-    ':google-instrumentation-0.3.0',
-    ':junit-dep',
-    ':objenesis',
-  ],
-)
-
-remote_jar (
-  name = 'aopalliance-repackaged',
-  out = 'aopalliance-repackaged-2.5.0-b42.jar',
-  url = 'mvn:org.glassfish.hk2.external:aopalliance-repackaged:jar:2.5.0-b42',
-  sha1 = 'e74beab6ca12e9e745eb47ca61729d9452b96f0c',
-  maven_coords = 'org.glassfish.hk2.external:aopalliance-repackaged:2.5.0-b42',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'amqp-client',
-  out = 'amqp-client-3.6.1.jar',
-  url = 'mvn:com.rabbitmq:amqp-client:jar:3.6.1',
-  sha1 = '089be4acfa8a0fa48a775a82d20632f90aecf10b',
-  maven_coords = 'com.rabbitmq:amqp-client:3.6.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'asm',
-  out = 'asm-6.2.jar',
-  url = 'mvn:org.ow2.asm:asm:jar:6.2',
-  sha1 = '1b6c4ff09ce03f3052429139c2a68e295cae6604',
-  maven_coords = 'org.ow2.asm:asm:6.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix',
-  out = 'atomix-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix:jar:3.0.7',
-  sha1 = 'd2c0cdbdc4e7c242d1fe476892fdbc31a1468d43',
-  maven_coords = 'io.atomix:atomix:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix-cluster',
-  out = 'atomix-cluster-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix-cluster:jar:3.0.7',
-  sha1 = '1bf4ca3d10f8be0c87588b531a200d982ef6f1a3',
-  maven_coords = 'io.atomix:atomix-cluster:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix-gossip',
-  out = 'atomix-gossip-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix-gossip:jar:3.0.7',
-  sha1 = 'c702172c4d77cea0fb95ad953ee36c2bae73db34',
-  maven_coords = 'io.atomix:atomix-gossip:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix-primary-backup',
-  out = 'atomix-primary-backup-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix-primary-backup:jar:3.0.7',
-  sha1 = 'b5269c7bc1172966928ec14af098f02c65c78c97',
-  maven_coords = 'io.atomix:atomix-primary-backup:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix-primitive',
-  out = 'atomix-primitive-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix-primitive:jar:3.0.7',
-  sha1 = '41c55b48913ceffecaa846395e19dbe2e959d145',
-  maven_coords = 'io.atomix:atomix-primitive:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix-raft',
-  out = 'atomix-raft-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix-raft:jar:3.0.7',
-  sha1 = '9b294e0568df35d1a58971b2748426da7d13e849',
-  maven_coords = 'io.atomix:atomix-raft:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix-storage',
-  out = 'atomix-storage-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix-storage:jar:3.0.7',
-  sha1 = '451575082ad5bd0257372bd34c29ac0bf1120133',
-  maven_coords = 'io.atomix:atomix-storage:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'atomix-utils',
-  out = 'atomix-utils-3.0.7.jar',
-  url = 'mvn:io.atomix:atomix-utils:jar:3.0.7',
-  sha1 = '647aee1cab71c3b816c8a205d0d55bdae9047434',
-  maven_coords = 'io.atomix:atomix-utils:3.0.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'classgraph',
-  out = 'classgraph-4.2.3.jar',
-  url = 'mvn:io.github.classgraph:classgraph:jar:4.2.3',
-  sha1 = '5c9bfb002097a6cf6c7134821954e24326db3a7b',
-  maven_coords = 'io.github.classgraph:classgraph:4.2.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-codec',
-  out = 'commons-codec-1.10.jar',
-  url = 'mvn:commons-codec:commons-codec:jar:1.10',
-  sha1 = '4b95f4897fa13f2cd904aee711aeafc0c5295cd8',
-  maven_coords = 'commons-codec:commons-codec:1.10',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-cli',
-  out = 'commons-cli-1.3.jar',
-  url = 'mvn:commons-cli:commons-cli:jar:1.3',
-  sha1 = 'a48653b6bcd06b5e61ed63739ca601701fcb6a6c',
-  maven_coords = 'commons-cli:commons-cli:1.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-collections',
-  out = 'commons-collections-3.2.2.jar',
-  url = 'mvn:commons-collections:commons-collections:jar:3.2.2',
-  sha1 = '8ad72fe39fa8c91eaaf12aadb21e0c3661fe26d5',
-  maven_coords = 'commons-collections:commons-collections:3.2.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-configuration',
-  out = 'commons-configuration-1.10.jar',
-  url = 'mvn:commons-configuration:commons-configuration:jar:1.10',
-  sha1 = '2b36e4adfb66d966c5aef2d73deb6be716389dc9',
-  maven_coords = 'commons-configuration:commons-configuration:1.10',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-io',
-  out = 'commons-io-2.6.jar',
-  url = 'mvn:commons-io:commons-io:jar:2.6',
-  sha1 = '815893df5f31da2ece4040fe0a12fd44b577afaf',
-  maven_coords = 'commons-io:commons-io:2.6',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-beanutils',
-  out = 'commons-beanutils-1.9.3.jar',
-  url = 'mvn:commons-beanutils:commons-beanutils:jar:1.9.3',
-  sha1 = 'c845703de334ddc6b4b3cd26835458cb1cba1f3d',
-  maven_coords = 'commons-beanutils:commons-beanutils:1.9.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'fast-classpath-scanner',
-  out = 'fast-classpath-scanner-2.21.jar',
-  url = 'mvn:io.github.lukehutch:fast-classpath-scanner:jar:2.21',
-  sha1 = '0cc8e22b412521480c89ac79194e82bd4471dd75',
-  maven_coords = 'io.github.lukehutch:fast-classpath-scanner:2.21',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jdom',
-  out = 'jdom-1.0.jar',
-  url = 'mvn:jdom:jdom:jar:1.0',
-  sha1 = 'a2ac1cd690ab4c80defe7f9bce14d35934c35cec',
-  maven_coords = 'jdom:jdom:jar:NON-OSGI:1.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-lang',
-  out = 'commons-lang-2.6.jar',
-  url = 'mvn:commons-lang:commons-lang:jar:2.6',
-  sha1 = '0ce1edb914c94ebc388f086c6827e8bdeec71ac2',
-  maven_coords = 'commons-lang:commons-lang:2.6',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-lang3',
-  out = 'commons-lang3-3.7.jar',
-  url = 'mvn:org.apache.commons:commons-lang3:jar:3.7',
-  sha1 = '557edd918fd41f9260963583ebf5a61a43a6b423',
-  maven_coords = 'org.apache.commons:commons-lang3:3.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-logging',
-  out = 'commons-logging-1.2.jar',
-  url = 'mvn:commons-logging:commons-logging:jar:1.2',
-  sha1 = '4bfc12adfe4842bf07b657f0369c4cb522955686',
-  maven_coords = 'commons-logging:commons-logging:1.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-math3',
-  out = 'commons-math3-3.6.1.jar',
-  url = 'mvn:org.apache.commons:commons-math3:jar:3.6.1',
-  sha1 = 'e4ba98f1d4b3c80ec46392f25e094a6a2e58fcbf',
-  maven_coords = 'org.apache.commons:commons-math3:3.6.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-net',
-  out = 'commons-net-3.5.jar',
-  url = 'mvn:commons-net:commons-net:jar:3.5',
-  sha1 = '342fc284019f590e1308056990fdb24a08f06318',
-  maven_coords = 'commons-net:commons-net:3.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-pool',
-  out = 'commons-pool-1.6.jar',
-  url = 'mvn:commons-pool:commons-pool:jar:1.6',
-  sha1 = '4572d589699f09d866a226a14b7f4323c6d8f040',
-  maven_coords = 'commons-pool:commons-pool:1.6',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'commons-text',
-  out = 'commons-text-1.3.jar',
-  url = 'mvn:org.apache.commons:commons-text:jar:1.3',
-  sha1 = '9abf61708a66ab5e55f6169a200dbfc584b546d9',
-  maven_coords = 'org.apache.commons:commons-text:1.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'concurrent-trees',
-  out = 'concurrent-trees-2.6.1.jar',
-  url = 'mvn:com.googlecode.concurrent-trees:concurrent-trees:jar:2.6.1',
-  sha1 = '9b647240522ab67c003de9b6702ca81ac0c15efc',
-  maven_coords = 'com.googlecode.concurrent-trees:concurrent-trees:2.6.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'easymock',
-  out = 'easymock-3.6.jar',
-  url = 'mvn:org.easymock:easymock:jar:3.6',
-  sha1 = '276883daaf2230e6f1e07c78ad695d2a18c7170b',
-  maven_coords = 'org.easymock:easymock:3.6',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'antlr',
-  out = 'antlr-2.7.7.jar',
-  url = 'mvn:antlr:antlr:jar:2.7.7',
-  sha1 = '83cd2cd674a217ade95a4bb83a8a14f351f48bd0',
-  maven_coords = 'antlr:antlr:jar:NON-OSGI:2.7.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'ganymed-ssh2',
-  out = 'ganymed-ssh2-262.jar',
-  url = 'mvn:ch.ethz.ganymed:ganymed-ssh2:jar:262',
-  sha1 = '7761dc665d0f6993dc846d914214fb93291e2bdf',
-  maven_coords = 'ch.ethz.ganymed:ganymed-ssh2:jar:NON-OSGI:262',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'gmetric4j',
-  out = 'gmetric4j-1.0.10.jar',
-  url = 'mvn:info.ganglia.gmetric4j:gmetric4j:jar:1.0.10',
-  sha1 = '3d62003123b586adb86cb028cc0f8a8c3a701d81',
-  maven_coords = 'info.ganglia.gmetric4j:gmetric4j:1.0.10',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'com_google_code_gson_gson',
-  out = 'gson-2.7.jar',
-  url = 'mvn:com.google.code.gson:gson:jar:2.7',
-  sha1 = '751f548c85fa49f330cecbb1875893f971b33c4e',
-  maven_coords = 'com.google.code.gson:gson:2.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'com_google_guava_guava',
-  out = 'guava-22.0.jar',
-  url = 'mvn:com.google.guava:guava:jar:22.0',
-  sha1 = '3564ef3803de51fb0530a8377ec6100b33b0d073',
-  maven_coords = 'com.google.guava:guava:22.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'com_google_guava_guava_testlib',
-  out = 'guava-testlib-22.0.jar',
-  url = 'mvn:com.google.guava:guava-testlib:jar:22.0',
-  sha1 = '3be1b88f1cfc6592acbcbfe1f3a420f79eb2b146',
-  maven_coords = 'com.google.guava:guava-testlib:jar:NON-OSGI:22.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'hamcrest-all',
-  out = 'hamcrest-all-1.3.jar',
-  url = 'mvn:org.hamcrest:hamcrest-all:jar:1.3',
-  sha1 = '63a21ebc981131004ad02e0434e799fd7f3a8d5a',
-  maven_coords = 'org.hamcrest:hamcrest-all:jar:NON-OSGI:1.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'hk2-api',
-  out = 'hk2-api-2.5.0-b42.jar',
-  url = 'mvn:org.glassfish.hk2:hk2-api:jar:2.5.0-b42',
-  sha1 = '7fd4e3d0f2cb37c80ad0dedee3f5ee69503eaf52',
-  maven_coords = 'org.glassfish.hk2:hk2-api:2.5.0-b42',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'hk2-locator',
-  out = 'hk2-locator-2.5.0-b42.jar',
-  url = 'mvn:org.glassfish.hk2:hk2-locator:jar:2.5.0-b42',
-  sha1 = '9d6edc0cb226401a8316e67d81bfc37cb626ef91',
-  maven_coords = 'org.glassfish.hk2:hk2-locator:2.5.0-b42',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'hk2-osgi-resource-locator',
-  out = 'osgi-resource-locator-1.0.1.jar',
-  url = 'mvn:org.glassfish.hk2:osgi-resource-locator:jar:1.0.1',
-  sha1 = '4ed2b2d4738aed5786cfa64cba5a332779c4c708',
-  maven_coords = 'org.glassfish.hk2:osgi-resource-locator:1.0.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'hk2-utils',
-  out = 'hk2-utils-2.5.0-b42.jar',
-  url = 'mvn:org.glassfish.hk2:hk2-utils:jar:2.5.0-b42',
-  sha1 = '102a344e1728825e865a8986d7605602aba3c3b6',
-  maven_coords = 'org.glassfish.hk2:hk2-utils:2.5.0-b42',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'httpclient-osgi',
-  out = 'httpclient-osgi-4.5.1.jar',
-  url = 'mvn:org.apache.httpcomponents:httpclient-osgi:jar:4.5.1',
-  sha1 = '0220a68ff36e5b0fa71b5dc0b1dc1d4ad2dcf524',
-  maven_coords = 'org.apache.httpcomponents:httpclient-osgi:4.5.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'httpcore-osgi',
-  out = 'httpcore-osgi-4.4.4.jar',
-  url = 'mvn:org.apache.httpcomponents:httpcore-osgi:jar:4.4.4',
-  sha1 = 'd5c14055e569afca96f4603d6f9d467bc72ccba8',
-  maven_coords = 'org.apache.httpcomponents:httpcore-osgi:4.4.4',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'influxdb-java',
-  out = 'influxdb-java-2.9.jar',
-  url = 'mvn:org.influxdb:influxdb-java:jar:2.9',
-  sha1 = '3c1c2b9b977d4ee67b2877eb89943add248a50db',
-  maven_coords = 'org.influxdb:influxdb-java:jar:NON-OSGI:2.9',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'simpleclient',
-  out = 'simpleclient-0.5.0.jar',
-  url = 'mvn:io.prometheus:simpleclient:jar:0.5.0',
-  sha1 = 'fbbfe2300098798e3d23f93b7b14befeceacf512',
-  maven_coords = 'io.prometheus:simpleclient:0.5.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'simpleclient_common',
-  out = 'simpleclient_common-0.5.0.jar',
-  url = 'mvn:io.prometheus:simpleclient_common:jar:0.5.0',
-  sha1 = 'bfd93082d7cf85c0543c2ccc286b96c817d1090c',
-  maven_coords = 'io.prometheus:simpleclient_common:0.5.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'simpleclient_hotspot',
-  out = 'simpleclient_hotspot-0.5.0.jar',
-  url = 'mvn:io.prometheus:simpleclient_hotspot:jar:0.5.0',
-  sha1 = '0f341cb84d6713255b1ce46c7593eee50a35d414',
-  maven_coords = 'io.prometheus:simpleclient_hotspot:0.5.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'simpleclient_servlet',
-  out = 'simpleclient_servlet-0.5.0.jar',
-  url = 'mvn:io.prometheus:simpleclient_servlet:jar:0.5.0',
-  sha1 = '28d75ee90a5c2ac70eeebb0864b15885116207a4',
-  maven_coords = 'io.prometheus:simpleclient_servlet:0.5.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'retrofit',
-  out = 'retrofit-2.3.0.jar',
-  url = 'mvn:com.squareup.retrofit2:retrofit:jar:2.3.0',
-  sha1 = 'bcacde6a8ccedcc56c127403d26b76072fe6214d',
-  maven_coords = 'com.squareup.retrofit2:retrofit:jar:NON-OSGI:2.3.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'converter-moshi',
-  out = 'converter-moshi-2.3.0.jar',
-  url = 'mvn:com.squareup.retrofit2:converter-moshi:jar:2.3.0',
-  sha1 = '6ad87c2038269d2574fcd90765ce15c74d6bb993',
-  maven_coords = 'com.squareup.retrofit2:converter-moshi:jar:NON-OSGI:2.3.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'okhttp',
-  out = 'okhttp-3.9.1.jar',
-  url = 'mvn:com.squareup.okhttp3:okhttp:jar:3.9.1',
-  sha1 = '84b4b7d1c4a238e7899972b7446c250691e65f1f',
-  maven_coords = 'com.squareup.okhttp3:okhttp:jar:NON-OSGI:3.9.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'logging-interceptor',
-  out = 'logging-interceptor-3.9.1.jar',
-  url = 'mvn:com.squareup.okhttp3:logging-interceptor:jar:3.9.1',
-  sha1 = '36e71ab9e903fc4d1b4a58d80572a91d9fd60caf',
-  maven_coords = 'com.squareup.okhttp3:logging-interceptor:jar:NON-OSGI:3.9.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'moshi',
-  out = 'moshi-1.4.0.jar',
-  url = 'mvn:com.squareup.moshi:moshi:jar:1.4.0',
-  sha1 = 'd67ad038adfd55dc276488a54f4944dfae5ff8ec',
-  maven_coords = 'com.squareup.moshi:moshi:jar:NON-OSGI:1.4.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'okio',
-  out = 'okio-1.14.0.jar',
-  url = 'mvn:com.squareup.okio:okio:jar:1.14.0',
-  sha1 = '102d7be47241d781ef95f1581d414b0943053130',
-  maven_coords = 'com.squareup.okio:okio:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jackson-annotations',
-  out = 'jackson-annotations-2.9.5.jar',
-  url = 'mvn:com.fasterxml.jackson.core:jackson-annotations:jar:2.9.5',
-  sha1 = '9056ec9db21c57d43219a84bb18c129ae51c6a5d',
-  maven_coords = 'com.fasterxml.jackson.core:jackson-annotations:2.9.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jackson-core',
-  out = 'jackson-core-2.9.5.jar',
-  url = 'mvn:com.fasterxml.jackson.core:jackson-core:jar:2.9.5',
-  sha1 = 'a22ac51016944b06fd9ffbc9541c6e7ce5eea117',
-  maven_coords = 'com.fasterxml.jackson.core:jackson-core:2.9.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jackson-databind',
-  out = 'jackson-databind-2.9.5.jar',
-  url = 'mvn:com.fasterxml.jackson.core:jackson-databind:jar:2.9.5',
-  sha1 = '3490508379d065fe3fcb80042b62f630f7588606',
-  maven_coords = 'com.fasterxml.jackson.core:jackson-databind:2.9.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'javax.annotation-api-mvn',
-  out = 'javax.annotation-api-1.2.jar',
-  url = 'mvn:javax.annotation:javax.annotation-api:jar:1.2',
-  sha1 = '479c1e06db31c432330183f5cae684163f186146',
-  maven_coords = 'javax.annotation:javax.annotation-api:1.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'javax.inject',
-  out = 'javax.inject-2.5.0-b42.jar',
-  url = 'mvn:org.glassfish.hk2.external:javax.inject:jar:2.5.0-b42',
-  sha1 = '98e0b7dcef77dc04809f0603868140a1c60bea71',
-  maven_coords = 'org.glassfish.hk2.external:javax.inject:2.5.0-b42',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'javax.ws.rs-api',
-  out = 'javax.ws.rs-api-2.1.jar',
-  url = 'mvn:javax.ws.rs:javax.ws.rs-api:jar:2.1',
-  sha1 = '426a0862406536e690c7caa8bb6ed32191986fac',
-  maven_coords = 'javax.ws.rs:javax.ws.rs-api:2.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-client',
-  out = 'jersey-client-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.core:jersey-client:jar:2.26',
-  sha1 = '125b8d1040d121a5dc4ce6858e21a6160bed7afa',
-  maven_coords = 'org.glassfish.jersey.core:jersey-client:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-security',
-  out = 'oauth2-client-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.security:oauth2-client:jar:2.26',
-  sha1 = '968e1d99c9460e29bdb447114fa8440c3dbafb14',
-  maven_coords = 'org.glassfish.jersey.security:oauth2-client:jar:NON-OSGI:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-common',
-  out = 'jersey-common-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.core:jersey-common:jar:2.26',
-  sha1 = 'd96475745c5e72cafcbc4dc9e2e725f4d9683f21',
-  maven_coords = 'org.glassfish.jersey.core:jersey-common:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-container-jetty-http',
-  out = 'jersey-container-jetty-http-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.containers:jersey-container-jetty-http:jar:2.26',
-  sha1 = 'c20d58ceb1a5d98aad2b2032ca200403622fe9d6',
-  maven_coords = 'org.glassfish.jersey.containers:jersey-container-jetty-http:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-container-servlet',
-  out = 'jersey-container-servlet-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.containers:jersey-container-servlet:jar:2.26',
-  sha1 = '8723d05d1fe2fdda54d0921836ea5daa5abe5f00',
-  maven_coords = 'org.glassfish.jersey.containers:jersey-container-servlet:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-container-servlet-core',
-  out = 'jersey-container-servlet-core-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.26',
-  sha1 = '66a0d51facf1e49e2353ff0d2a2d4a9e2fa3f836',
-  maven_coords = 'org.glassfish.jersey.containers:jersey-container-servlet-core:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-media-multipart',
-  out = 'jersey-media-multipart-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.media:jersey-media-multipart:jar:2.26',
-  sha1 = 'c7ea0a5819e4688317024c9f4b6e3de54f9d0f3d',
-  maven_coords = 'org.glassfish.jersey.media:jersey-media-multipart:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-media-sse',
-  out = 'jersey-media-sse-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.media:jersey-media-sse:jar:2.26',
-  sha1 = '61cfeb0df911585140f64f3369eb524e0e02f534',
-  maven_coords = 'org.glassfish.jersey.media:jersey-media-sse:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-server',
-  out = 'jersey-server-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.core:jersey-server:jar:2.26',
-  sha1 = 'aa8eff3d591641dadd7c9880bb73b59bf46d4c82',
-  maven_coords = 'org.glassfish.jersey.core:jersey-server:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-hk2',
-  out = 'jersey-hk2-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.inject:jersey-hk2:jar:2.26',
-  sha1 = 'df27f7d7577acf4b532684448021632098924dab',
-  maven_coords = 'org.glassfish.jersey.inject:jersey-hk2:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-test-framework-core',
-  out = 'jersey-test-framework-core-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.test-framework:jersey-test-framework-core:jar:2.26',
-  sha1 = '92698666ae89db58074001a34f09b8233ef5effa',
-  maven_coords = 'org.glassfish.jersey.test-framework:jersey-test-framework-core:jar:NON-OSGI:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jersey-test-framework-jetty',
-  out = 'jersey-test-framework-provider-jetty-2.26.jar',
-  url = 'mvn:org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-jetty:jar:2.26',
-  sha1 = '6be06684283e7c90036d9e24f7793fd8bbb04f6a',
-  maven_coords = 'org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-jetty:jar:NON-OSGI:2.26',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-util',
-  out = 'jetty-util-9.4.11.v20180605.jar',
-  url = 'mvn:org.eclipse.jetty:jetty-util:jar:9.4.11.v20180605',
-  sha1 = 'f0f25aa2f27d618a04bc7356fa247ae4a05245b3',
-  maven_coords = 'org.eclipse.jetty:jetty-util:9.4.11.v20180605',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-websocket',
-  out = 'websocket-servlet-9.4.11.v20180605.jar',
-  url = 'mvn:org.eclipse.jetty.websocket:websocket-servlet:jar:9.4.11.v20180605',
-  sha1 = '0ba53ba5f749d22ddb87331161c214a21b8aa6c8',
-  maven_coords = 'org.eclipse.jetty.websocket:websocket-servlet:9.4.11.v20180605',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-server',
-  out = 'jetty-server-9.4.11.v20180605.jar',
-  url = 'mvn:org.eclipse.jetty:jetty-server:jar:9.4.11.v20180605',
-  sha1 = '58353c2f27515b007fc83ae22002feb34fc24714',
-  maven_coords = 'org.eclipse.jetty:jetty-server:9.4.11.v20180605',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-servlet',
-  out = 'jetty-servlet-9.2.26.v20180806.jar',
-  url = 'mvn:org.eclipse.jetty:jetty-servlet:jar:9.2.26.v20180806',
-  sha1 = '7d54ae4579454d9df2c3324de7eddfbd81ffb8cc',
-  maven_coords = 'org.eclipse.jetty:jetty-servlet:9.2.26.v20180806',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-security',
-  out = 'jetty-security-9.2.21.v20170120.jar',
-  url = 'mvn:org.eclipse.jetty:jetty-security:jar:9.2.21.v20170120',
-  sha1 = 'ceb39cd058fa22172c6e7ef493af90891e701f23',
-  maven_coords = 'org.eclipse.jetty:jetty-security:9.2.21.v20170120',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-continuation',
-  out = 'jetty-continuation-9.4.11.v20180605.jar',
-  url = 'mvn:org.eclipse.jetty:jetty-continuation:jar:9.4.11.v20180605',
-  sha1 = '31f1e347d013356317164b86bbbc2a6ce5c5e871',
-  maven_coords = 'org.eclipse.jetty:jetty-continuation:9.4.11.v20180605',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-http',
-  out = 'jetty-http-9.4.11.v20180605.jar',
-  url = 'mvn:org.eclipse.jetty:jetty-http:jar:9.4.11.v20180605',
-  sha1 = '20c35f5336befe35b0bd5c4a63e07170fe7872d7',
-  maven_coords = 'org.eclipse.jetty:jetty-http:9.4.11.v20180605',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jetty-io',
-  out = 'jetty-io-9.4.11.v20180605.jar',
-  url = 'mvn:org.eclipse.jetty:jetty-io:jar:9.4.11.v20180605',
-  sha1 = 'd164de1dac18c4ca80a1b783d879c97449909c3b',
-  maven_coords = 'org.eclipse.jetty:jetty-io:9.4.11.v20180605',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'javax.servlet-api',
-  out = 'javax.servlet-api-3.1.0.jar',
-  url = 'mvn:javax.servlet:javax.servlet-api:jar:3.1.0',
-  sha1 = '3cd63d075497751784b2fa84be59432f4905bf7c',
-  maven_coords = 'javax.servlet:javax.servlet-api:3.1.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'joda-time',
-  out = 'joda-time-2.9.3.jar',
-  url = 'mvn:joda-time:joda-time:jar:2.9.3',
-  sha1 = '9e46be514a4ed60bcfbaaba88a3c668cf30476ab',
-  maven_coords = 'joda-time:joda-time:2.9.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jsch',
-  out = 'jsch-0.1.53.jar',
-  url = 'mvn:com.jcraft:jsch:jar:0.1.53',
-  sha1 = '658b682d5c817b27ae795637dfec047c63d29935',
-  maven_coords = 'com.jcraft:jsch:jar:NON-OSGI:0.1.53',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'com_google_code_findbugs_jsr305',
-  out = 'jsr305-3.0.1.jar',
-  url = 'mvn:com.google.code.findbugs:jsr305:jar:3.0.1',
-  sha1 = 'f7be08ec23c21485b9b5a1cf1654c2ec8c58168d',
-  maven_coords = 'com.google.code.findbugs:jsr305:3.0.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'junit',
-  out = 'junit-4.12.jar',
-  url = 'mvn:junit:junit:jar:4.12',
-  sha1 = '2973d150c0dc1fefe998f834810d68f278ea58ec',
-  maven_coords = 'junit:junit:jar:NON-OSGI:4.12',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'junit-dep',
-  out = 'junit-4.10.jar',
-  url = 'mvn:junit:junit:jar:4.10',
-  sha1 = 'e4f1766ce7404a08f45d859fb9c226fc9e41a861',
-  maven_coords = 'junit:junit:jar:NON-OSGI:4.10',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'kryo',
-  out = 'kryo-4.0.1.jar',
-  url = 'mvn:com.esotericsoftware:kryo:jar:4.0.1',
-  sha1 = '5053899c213a6ce50a800d4902c5a9de49fe0098',
-  maven_coords = 'com.esotericsoftware:kryo:4.0.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'mapdb',
-  out = 'mapdb-1.0.9.jar',
-  url = 'mvn:org.mapdb:mapdb:jar:1.0.9',
-  sha1 = 'f8df5e15778eb3e88c03b77aca70c318c6b7c9d0',
-  maven_coords = 'org.mapdb:mapdb:1.0.9',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'metrics-core',
-  out = 'metrics-core-3.2.2.jar',
-  url = 'mvn:io.dropwizard.metrics:metrics-core:jar:3.2.2',
-  sha1 = 'cd9886f498ee2ab2d994f0c779e5553b2c450416',
-  maven_coords = 'io.dropwizard.metrics:metrics-core:3.2.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'metrics-ganglia',
-  out = 'metrics-ganglia-3.2.2.jar',
-  url = 'mvn:io.dropwizard.metrics:metrics-ganglia:jar:3.2.2',
-  sha1 = 'd5bb1883e9b0daf0e4187e558746f5058f4585c1',
-  maven_coords = 'io.dropwizard.metrics:metrics-ganglia:3.2.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'metrics-graphite',
-  out = 'metrics-graphite-3.2.2.jar',
-  url = 'mvn:io.dropwizard.metrics:metrics-graphite:jar:3.2.2',
-  sha1 = '908e8cbec1bbdb2f4023334e424c7de2832a95af',
-  maven_coords = 'io.dropwizard.metrics:metrics-graphite:3.2.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'metrics-influxdb',
-  out = 'metrics-influxdb-1.1.1.jar',
-  url = 'mvn:com.izettle:metrics-influxdb:jar:1.1.1',
-  sha1 = 'a911d778c2f8607dd4e7a4cdb9b0cd97adcd0343',
-  maven_coords = 'com.izettle:metrics-influxdb:jar:NON-OSGI:1.1.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'metrics-json',
-  out = 'metrics-json-3.2.2.jar',
-  url = 'mvn:io.dropwizard.metrics:metrics-json:jar:3.2.2',
-  sha1 = '234612b9739a651eb2b71a8f9e9c4d11d7ccf849',
-  maven_coords = 'io.dropwizard.metrics:metrics-json:3.2.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'minimal-json',
-  out = 'minimal-json-0.9.4.jar',
-  url = 'mvn:com.eclipsesource.minimal-json:minimal-json:jar:0.9.4',
-  sha1 = 'd6e7dd22569de97c2697a4af301a623f35028972',
-  maven_coords = 'com.eclipsesource.minimal-json:minimal-json:0.9.4',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'minlog',
-  out = 'minlog-1.3.0.jar',
-  url = 'mvn:com.esotericsoftware:minlog:jar:1.3.0',
-  sha1 = 'ff07b5f1b01d2f92bb00a337f9a94873712f0827',
-  maven_coords = 'com.esotericsoftware:minlog:1.3.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty',
-  out = 'netty-3.10.5.Final.jar',
-  url = 'mvn:io.netty:netty:jar:3.10.5.Final',
-  sha1 = '9ca7d55d246092bddd29b867706e2f6c7db701a0',
-  maven_coords = 'io.netty:netty:3.10.5.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_buffer',
-  out = 'netty-buffer-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-buffer:jar:4.1.27.Final',
-  sha1 = 'aafe2b9fb0d8f3b200cf10b9fd6486c6a722d7a1',
-  maven_coords = 'io.netty:netty-buffer:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_codec',
-  out = 'netty-codec-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-codec:jar:4.1.27.Final',
-  sha1 = 'd2653d78ebaa650064768fb26b10051f5c8efb2c',
-  maven_coords = 'io.netty:netty-codec:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_common',
-  out = 'netty-common-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-common:jar:4.1.27.Final',
-  sha1 = '6a12a969c27fb37b230c4bde5a67bd822fa6b7a4',
-  maven_coords = 'io.netty:netty-common:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_handler',
-  out = 'netty-handler-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-handler:jar:4.1.27.Final',
-  sha1 = '21bd9cf565390a8d72579b8664303e3c175dfc6a',
-  maven_coords = 'io.netty:netty-handler:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_handler_proxy',
-  out = 'netty-handler-proxy-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-handler-proxy:jar:4.1.27.Final',
-  sha1 = '1a822ce7760bc6eb4937b7e448c9e081fedcc807',
-  maven_coords = 'io.netty:netty-handler-proxy:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_transport',
-  out = 'netty-transport-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-transport:jar:4.1.27.Final',
-  sha1 = 'b5c2da3ea89dd67320925f1504c9eb3615241b7c',
-  maven_coords = 'io.netty:netty-transport:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_transport_native_unix_common',
-  out = 'netty-transport-native-unix-common-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-transport-native-unix-common:jar:4.1.27.Final',
-  sha1 = '2b0667fe5c1df78c6cfbf9d53ad8b1fb533fb8e8',
-  maven_coords = 'io.netty:netty-transport-native-unix-common:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_transport-native-epoll',
-  out = 'netty-transport-native-epoll-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-transport-native-epoll:jar:4.1.27.Final',
-  sha1 = 'addbd481940a3cce57cb5736ecef5db909b7b5d0',
-  maven_coords = 'io.netty:netty-transport-native-epoll:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_resolver',
-  out = 'netty-resolver-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-resolver:jar:4.1.27.Final',
-  sha1 = '2536447ef9605ccb2b5203aa22392c6514484ea9',
-  maven_coords = 'io.netty:netty-resolver:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_codec-http2',
-  out = 'netty-codec-http2-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-codec-http2:jar:4.1.27.Final',
-  sha1 = '3769790a2033667d663f9a526d5b63cfecdbdf4e',
-  maven_coords = 'io.netty:netty-codec-http2:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_codec-http',
-  out = 'netty-codec-http-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-codec-http:jar:4.1.27.Final',
-  sha1 = 'a1722d6bcbbef1c4c7877e8bf38b07a3db5ed07f',
-  maven_coords = 'io.netty:netty-codec-http:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_netty_netty_codec-socks',
-  out = 'netty-codec-socks-4.1.27.Final.jar',
-  url = 'mvn:io.netty:netty-codec-socks:jar:4.1.27.Final',
-  sha1 = '285b09af98764cf02e4b77b3d95af188469a7133',
-  maven_coords = 'io.netty:netty-codec-socks:4.1.27.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'objenesis',
-  out = 'objenesis-2.6.jar',
-  url = 'mvn:org.objenesis:objenesis:jar:2.6',
-  sha1 = '639033469776fd37c08358c6b92a4761feb2af4b',
-  maven_coords = 'org.objenesis:objenesis:2.6',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'openflowj',
-  out = 'openflowj-3.2.1.onos.jar',
-  url = 'mvn:org.onosproject:openflowj:jar:3.2.1.onos',
-  sha1 = '66544b285cddc8d53485107310f07b7bc90ac63b',
-  maven_coords = 'org.onosproject:openflowj:3.2.1.onos',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.osgi.service.component',
-  out = 'org.osgi.service.component-1.4.0.jar',
-  url = 'mvn:org.osgi:org.osgi.service.component:jar:1.4.0',
-  sha1 = '4934dce3e552c172283a4962929c39f9075f4393',
-  maven_coords = 'org.osgi:org.osgi.service.component:1.4.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.osgi.service.component.annotations',
-  out = 'org.osgi.service.component.annotations-1.4.0.jar',
-  url = 'mvn:org.osgi:org.osgi.service.component.annotations:jar:1.4.0',
-  sha1 = '18380195e7e657494471cf4cabcafb762f63c9a8',
-  maven_coords = 'org.osgi:org.osgi.service.component.annotations:1.4.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.osgi.service.metatype.annotations',
-  out = 'org.osgi.service.metatype.annotations-1.4.0.jar',
-  url = 'mvn:org.osgi:org.osgi.service.metatype.annotations:jar:1.4.0',
-  sha1 = '5475175092f41ff663deea11a31c8229102574c7',
-  maven_coords = 'org.osgi:org.osgi.service.metatype.annotations:1.4.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.osgi.service.cm',
-  out = 'org.osgi.service.cm-1.6.0.jar',
-  url = 'mvn:org.osgi:org.osgi.service.cm:jar:1.6.0',
-  sha1 = 'f0c01d6da3799107b17f894ae7920cfd6fa69da6',
-  maven_coords = 'org.osgi:org.osgi.service.cm:1.6.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.felix.scr.bnd',
-  out = 'org.apache.felix.scr.bnd-1.9.0.jar',
-  url = 'mvn:org.apache.felix:org.apache.felix.scr.bnd:jar:1.9.0',
-  sha1 = '44354d132f8ce9fc387caf05c9189c4102828a9b',
-  maven_coords = 'org.apache.felix:org.apache.felix.scr.bnd:jar:NON-OSGI:1.9.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.karaf.features.core',
-  out = 'org.apache.karaf.features.core-4.2.1.jar',
-  url = 'mvn:org.apache.karaf.features:org.apache.karaf.features.core:jar:4.2.1',
-  sha1 = '329aa987b142470f9f5ddda98a9621ecfbfafedd',
-  maven_coords = 'org.apache.karaf.features:org.apache.karaf.features.core:4.2.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.karaf.shell.console',
-  out = 'org.apache.karaf.shell.console-4.2.1.jar',
-  url = 'mvn:org.apache.karaf.shell:org.apache.karaf.shell.console:jar:4.2.1',
-  sha1 = '9e494eed7a1e46a582e919ab553e0b427b82fa77',
-  maven_coords = 'org.apache.karaf.shell:org.apache.karaf.shell.console:4.2.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.httpcomponents.httpasyncclient-osgi',
-  out = 'httpasyncclient-osgi-4.1.2.jar',
-  url = 'mvn:org.apache.httpcomponents:httpasyncclient-osgi:jar:4.1.2',
-  sha1 = '17eccd8d9f2803ee95e80ee8283155432600e17b',
-  maven_coords = 'org.apache.httpcomponents:httpasyncclient-osgi:4.1.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.httpcomponents.httpcore-nio',
-  out = 'httpcore-nio-4.4.4.jar',
-  url = 'mvn:org.apache.httpcomponents:httpcore-nio:jar:4.4.4',
-  sha1 = '16badfc2d99db264c486ba8c57ae577301a58bd9',
-  maven_coords = 'org.apache.httpcomponents:httpcore-nio:jar:NON-OSGI:4.4.4',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.karaf.jaas',
-  out = 'org.apache.karaf.jaas.modules-4.2.1.jar',
-  url = 'mvn:org.apache.karaf.jaas:org.apache.karaf.jaas.modules:jar:4.2.1',
-  sha1 = 'aff0989e2af701a2294779a7aedd2df689418fa7',
-  maven_coords = 'org.apache.karaf.jaas:org.apache.karaf.jaas.modules:4.2.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.karaf.system.core',
-  out = 'org.apache.karaf.system.core-4.2.1.jar',
-  url = 'mvn:org.apache.karaf.system:org.apache.karaf.system.core:jar:4.2.1',
-  sha1 = '31fdda53480b358b7b8cd16e7c96d7de978467ef',
-  maven_coords = 'org.apache.karaf.system:org.apache.karaf.system.core:4.2.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.servicemix.bundles.snmp4j',
-  out = 'org.apache.servicemix.bundles.snmp4j-2.3.4_1.jar',
-  url = 'mvn:org.apache.servicemix.bundles:org.apache.servicemix.bundles.snmp4j:jar:2.3.4_1',
-  sha1 = '5134e0b60a6d88b26fe4dec03488efe4f2463e65',
-  maven_coords = 'org.apache.servicemix.bundles:org.apache.servicemix.bundles.snmp4j:2.3.4_1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.osgi.compendium',
-  out = 'org.osgi.compendium-5.0.0.jar',
-  url = 'mvn:org.osgi:org.osgi.compendium:jar:5.0.0',
-  sha1 = '9d7a9c35591f6fa1c98ac85af32775c12361aee4',
-  maven_coords = 'org.osgi:org.osgi.compendium:5.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.osgi.cmpn',
-  out = 'osgi.cmpn-7.0.0.jar',
-  url = 'mvn:org.osgi:osgi.cmpn:jar:7.0.0',
-  sha1 = '4fa9f239a60aeca4a27648df329d112d562a350c',
-  maven_coords = 'org.osgi:osgi.cmpn:7.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'osgi-core',
-  out = 'org.osgi.core-5.0.0.jar',
-  url = 'mvn:org.osgi:org.osgi.core:jar:5.0.0',
-  sha1 = '6e5e8cd3c9059c08e1085540442a490b59a7783c',
-  maven_coords = 'org.osgi:org.osgi.core:5.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'reflectasm',
-  out = 'reflectasm-1.11.7.jar',
-  url = 'mvn:com.esotericsoftware:reflectasm:jar:1.11.7',
-  sha1 = '572a41b00181e9dd49e327675948b1d6301f9d48',
-  maven_coords = 'com.esotericsoftware:reflectasm:1.11.7',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'remotetea-oncrpc',
-  out = 'remotetea-oncrpc-1.1.3.jar',
-  url = 'mvn:org.acplt.remotetea:remotetea-oncrpc:jar:1.1.3',
-  sha1 = '2f7d94c5179b0267a882259a03a83eaa320cbcce',
-  maven_coords = 'org.acplt.remotetea:remotetea-oncrpc:1.1.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'rrd4j',
-  out = 'rrd4j-3.1.jar',
-  url = 'mvn:org.rrd4j:rrd4j:jar:3.1',
-  sha1 = 'e533553fbf52f241dcb0c468b2052a3814dd6722',
-  maven_coords = 'org.rrd4j:rrd4j:jar:NON-OSGI:3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'javassist',
-  out = 'javassist-3.22.0-GA.jar',
-  url = 'mvn:org.javassist:javassist:jar:3.22.0-GA',
-  sha1 = '3e83394258ae2089be7219b971ec21a8288528ad',
-  maven_coords = 'org.javassist:javassist:3.22.0-GA',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'mimepull',
-  out = 'mimepull-1.9.6.jar',
-  url = 'mvn:org.jvnet.mimepull:mimepull:jar:1.9.6',
-  sha1 = '41c913d791e16f93bc712a8c8a30bb64daa2e9bd',
-  maven_coords = 'org.jvnet.mimepull:mimepull:1.9.6',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'servlet-api',
-  out = 'servlet-api-2.5.jar',
-  url = 'mvn:javax.servlet:servlet-api:jar:2.5',
-  sha1 = '5959582d97d8b61f4d154ca9e495aafd16726e34',
-  maven_coords = 'javax.servlet:servlet-api:jar:NON-OSGI:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'slf4j-api',
-  out = 'slf4j-api-1.7.25.jar',
-  url = 'mvn:org.slf4j:slf4j-api:jar:1.7.25',
-  sha1 = 'da76ca59f6a57ee3102f8f9bd9cee742973efa8a',
-  maven_coords = 'org.slf4j:slf4j-api:1.7.25',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'slf4j-jdk14',
-  out = 'slf4j-jdk14-1.7.25.jar',
-  url = 'mvn:org.slf4j:slf4j-jdk14:jar:1.7.25',
-  sha1 = 'bccda40ebc8067491b32a88f49615a747d20082d',
-  maven_coords = 'org.slf4j:slf4j-jdk14:1.7.25',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'slf4j-nop',
-  out = 'slf4j-nop-1.7.25.jar',
-  url = 'mvn:org.slf4j:slf4j-nop:jar:1.7.25',
-  sha1 = '8c7708c79afec923de8957b7d4f90177628b9fcd',
-  maven_coords = 'org.slf4j:slf4j-nop:1.7.25',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'typesafe-config',
-  out = 'config-1.3.2.jar',
-  url = 'mvn:com.typesafe:config:jar:1.3.2',
-  sha1 = 'd6ac0ce079f114adce620f2360c92a70b2cb36dc',
-  maven_coords = 'com.typesafe:config:1.3.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'validation-api',
-  out = 'validation-api-1.1.0.Final.jar',
-  url = 'mvn:javax.validation:validation-api:jar:1.1.0.Final',
-  sha1 = '8613ae82954779d518631e05daa73a6a954817d5',
-  maven_coords = 'javax.validation:validation-api:1.1.0.Final',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'checkstyle',
-  out = 'checkstyle-8.10.jar',
-  url = 'mvn:com.puppycrawl.tools:checkstyle:jar:8.10',
-  sha1 = 'd7cd09c4d1240b3acc3041fcb47fd74ae351698b',
-  maven_coords = 'com.puppycrawl.tools:checkstyle:jar:NON-OSGI:8.10',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_file (
-  name = 'apache-karaf',
-  out = 'apache-karaf-offline-3.0.8.tar.gz',
-  url = 'http://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/3.0.8/apache-karaf-offline-3.0.8.tar.gz',
-  sha1 = '2503c5853285e3414da15aef8d8f3f629747c927',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_file (
-  name = 'apache-karaf-patches',
-  out = 'onos-apache-karaf-patches-3.0.8.tar.gz',
-  url = 'http://repo1.maven.org/maven2/org/onosproject/onos-apache-karaf-patches/3.0.8/onos-apache-karaf-patches-3.0.8.tar.gz',
-  sha1 = 'be5d620a2c4f4c5faa520d2c1b949ad0cc29c84f',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'bndlib',
-  out = 'biz.aQute.bndlib-4.0.0.jar',
-  url = 'mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.0.0',
-  sha1 = '21e1d6fd1874d9bc201f2de1d0a48e84bff4149d',
-  maven_coords = 'biz.aQute.bnd:biz.aQute.bndlib:4.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'bndexe',
-  out = 'biz.aQute.bnd-4.0.0.jar',
-  url = 'mvn:biz.aQute.bnd:biz.aQute.bnd:jar:4.0.0',
-  sha1 = 'fa7746eb710852498ce1afe5227be3fbfddaf09e',
-  maven_coords = 'biz.aQute.bnd:biz.aQute.bnd:4.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'libthrift',
-  out = 'libthrift-0.11.0.jar',
-  url = 'mvn:org.apache.thrift:libthrift:jar:0.11.0',
-  sha1 = '4f4f1c1fbbae63258625dea71007fa41bee7edb3',
-  maven_coords = 'org.apache.thrift:libthrift:0.11.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'qdox',
-  out = 'qdox-2.0-M3.jar',
-  url = 'mvn:com.thoughtworks.qdox:qdox:jar:2.0-M3',
-  sha1 = 'f1e9ac82735dc3f2afc38cc051ae0e405f367434',
-  maven_coords = 'com.thoughtworks.qdox:qdox:jar:NON-OSGI:2.0-M3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'snmp-core',
-  out = 'snmp-core-1.3-20161021.1.jar',
-  url = 'mvn:org.onosproject:snmp-core:jar:1.3-20161021.1',
-  sha1 = '65e1b71d9d0e2fc60c45f631decdb41da3253778',
-  maven_coords = 'org.onosproject:snmp-core:1.3-20161021.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'mibs-net-snmp',
-  out = 'mibbler-mibs-net-snmp-1.0-20151221.1.jar',
-  url = 'mvn:org.onosproject:mibbler-mibs-net-snmp:jar:1.0-20151221.1',
-  sha1 = 'd2cb918e46f06d4ee764d4a96b2b6fb0ba9bc60c',
-  maven_coords = 'org.onosproject:mibbler-mibs-net-snmp:1.0-20151221.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'mibs-rfc',
-  out = 'mibbler-mibs-rfc-1.0-20151221.1.jar',
-  url = 'mvn:org.onosproject:mibbler-mibs-rfc:jar:1.0-20151221.1',
-  sha1 = '06ac2a3bf48c79ab444a9deede9d554ccd355a16',
-  maven_coords = 'org.onosproject:mibbler-mibs-rfc:1.0-20151221.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io.socket-client',
-  out = 'socket.io-client-0.8.3.jar',
-  url = 'mvn:io.socket:socket.io-client:jar:0.8.3',
-  sha1 = 'b30500232ff0668a47c9f91f02e6935457a52fb5',
-  maven_coords = 'io.socket:socket.io-client:jar:NON-OSGI:0.8.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'json',
-  out = 'json-20090211.jar',
-  url = 'mvn:org.json:json:jar:20090211',
-  sha1 = 'c183aa3a2a6250293808bba12262c8920ce5a51c',
-  maven_coords = 'org.json:json:jar:NON-OSGI:20090211',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'engine.io-client',
-  out = 'engine.io-client-0.8.3.jar',
-  url = 'mvn:io.socket:engine.io-client:jar:0.8.3',
-  sha1 = '854b49396e1e9f9bb0ab025062ddb49c4ed65ca1',
-  maven_coords = 'io.socket:engine.io-client:jar:NON-OSGI:0.8.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'com_google_api_grpc_proto_google_common_protos',
-  out = 'proto-google-common-protos-1.0.0.jar',
-  url = 'mvn:com.google.api.grpc:proto-google-common-protos:jar:1.0.0',
-  sha1 = '86f070507e28b930e50d218ee5b6788ef0dd05e6',
-  maven_coords = 'com.google.api.grpc:proto-google-common-protos:jar:NON-OSGI:1.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'com_google_errorprone_error_prone_annotations',
-  out = 'error_prone_annotations-2.1.2.jar',
-  url = 'mvn:com.google.errorprone:error_prone_annotations:jar:2.1.2',
-  sha1 = '6dcc08f90f678ac33e5ef78c3c752b6f59e63e0c',
-  maven_coords = 'com.google.errorprone:error_prone_annotations:jar:NON-OSGI:2.1.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'com_google_auth_google_auth_library_credentials',
-  out = 'google-auth-library-credentials-0.9.0.jar',
-  url = 'mvn:com.google.auth:google-auth-library-credentials:jar:0.9.0',
-  sha1 = '8e2b181feff6005c9cbc6f5c1c1e2d3ec9138d46',
-  maven_coords = 'com.google.auth:google-auth-library-credentials:jar:NON-OSGI:0.9.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_opencensus_opencensus_api',
-  out = 'opencensus-api-0.12.3.jar',
-  url = 'mvn:io.opencensus:opencensus-api:jar:0.12.3',
-  sha1 = '743f074095f29aa985517299545e72cc99c87de0',
-  maven_coords = 'io.opencensus:opencensus-api:jar:NON-OSGI:0.12.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'io_opencensus_opencensus_contrib_grpc_metrics',
-  out = 'opencensus-contrib-grpc-metrics-0.12.3.jar',
-  url = 'mvn:io.opencensus:opencensus-contrib-grpc-metrics:jar:0.12.3',
-  sha1 = 'a4c7ff238a91b901c8b459889b6d0d7a9d889b4d',
-  maven_coords = 'io.opencensus:opencensus-contrib-grpc-metrics:jar:NON-OSGI:0.12.3',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'openstack4j-core',
-  out = 'openstack4j-core-3.1.0.jar',
-  url = 'mvn:org.pacesys:openstack4j-core:jar:3.1.0',
-  sha1 = '634c2ad6728bb6e4cd91c950dd654aacb6f107a6',
-  maven_coords = 'org.pacesys:openstack4j-core:3.1.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'openstack4j-http-connector',
-  out = 'openstack4j-http-connector-3.1.0.jar',
-  url = 'mvn:org.pacesys.openstack4j.connectors:openstack4j-http-connector:jar:3.1.0',
-  sha1 = '5bbd558313f13daac819bbbe56ae8432e64409d9',
-  maven_coords = 'org.pacesys.openstack4j.connectors:openstack4j-http-connector:3.1.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'openstack4j-httpclient',
-  out = 'openstack4j-httpclient-3.1.0.jar',
-  url = 'mvn:org.pacesys.openstack4j.connectors:openstack4j-httpclient:jar:3.1.0',
-  sha1 = 'acb413e27cc43f4bbcee99300befffcf667de579',
-  maven_coords = 'org.pacesys.openstack4j.connectors:openstack4j-httpclient:3.1.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'json-patch',
-  out = 'json-patch-1.9.jar',
-  url = 'mvn:com.github.fge:json-patch:jar:1.9',
-  sha1 = '0a4c3c97a0f5965dec15795acf40d3fbc897af4b',
-  maven_coords = 'com.github.fge:json-patch:1.9',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'jackson-coreutils',
-  out = 'jackson-coreutils-1.6.jar',
-  url = 'mvn:com.github.fge:jackson-coreutils:jar:1.6',
-  sha1 = '9e6af56eb7cc2a65700b289abc7ee2bd170fd231',
-  maven_coords = 'com.github.fge:jackson-coreutils:1.6',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'btf',
-  out = 'btf-1.2.jar',
-  url = 'mvn:com.github.fge:btf:jar:1.2',
-  sha1 = '9e66651022eb86301b348d57e6f59459effc343b',
-  maven_coords = 'com.github.fge:btf:1.2',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'msg-simple',
-  out = 'msg-simple-1.1.jar',
-  url = 'mvn:com.github.fge:msg-simple:jar:1.1',
-  sha1 = 'f261263e13dd4cfa93cc6b83f1f58f619097a2c4',
-  maven_coords = 'com.github.fge:msg-simple:1.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'snakeyaml',
-  out = 'snakeyaml-1.15.jar',
-  url = 'mvn:org.yaml:snakeyaml:jar:1.15',
-  sha1 = '3b132bea69e8ee099f416044970997bde80f4ea6',
-  maven_coords = 'org.yaml:snakeyaml:1.15',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'onos-yang-model',
-  out = 'onos-yang-model-2.5.jar',
-  url = 'mvn:org.onosproject:onos-yang-model:jar:2.5',
-  sha1 = '61339921f42354e499e550c15283e4aa75a03ef7',
-  maven_coords = 'org.onosproject:onos-yang-model:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'onos-yang-compiler-api',
-  out = 'onos-yang-compiler-api-2.5.jar',
-  url = 'mvn:org.onosproject:onos-yang-compiler-api:jar:2.5',
-  sha1 = 'c504df941d1a1b49e4dd8045c935120f3483504e',
-  maven_coords = 'org.onosproject:onos-yang-compiler-api:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'onos-yang-compiler-main',
-  out = 'onos-yang-compiler-main-2.5.jar',
-  url = 'mvn:org.onosproject:onos-yang-compiler-main:jar:2.5',
-  sha1 = '8048db59dab2c813cfbc3f7c176eb12b1c8b2548',
-  maven_coords = 'org.onosproject:onos-yang-compiler-main:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'onos-yang-runtime',
-  out = 'onos-yang-runtime-2.5.jar',
-  url = 'mvn:org.onosproject:onos-yang-runtime:jar:2.5',
-  sha1 = '9d621709f34fd7da4d1954d868ac0eddeba725d2',
-  maven_coords = 'org.onosproject:onos-yang-runtime:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'onos-yang-serializers-json',
-  out = 'onos-yang-serializers-json-2.5.jar',
-  url = 'mvn:org.onosproject:onos-yang-serializers-json:jar:2.5',
-  sha1 = 'cf442f226b9423c22eb5ec9409e99fe3a0f63a37',
-  maven_coords = 'org.onosproject:onos-yang-serializers-json:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'onos-yang-serializers-xml',
-  out = 'onos-yang-serializers-xml-2.5.jar',
-  url = 'mvn:org.onosproject:onos-yang-serializers-xml:jar:2.5',
-  sha1 = '7f7231237da9571f79700d2ee0a218cd6253409c',
-  maven_coords = 'org.onosproject:onos-yang-serializers-xml:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'onos-yang-serializers-utils',
-  out = 'onos-yang-serializers-utils-2.5.jar',
-  url = 'mvn:org.onosproject:onos-yang-serializers-utils:jar:2.5',
-  sha1 = '13f804292e42635fcf28bbadffca8bb72c00b327',
-  maven_coords = 'org.onosproject:onos-yang-serializers-utils:2.5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'org.apache.servicemix.bundles.dom4j',
-  out = 'org.apache.servicemix.bundles.dom4j-1.6.1_5.jar',
-  url = 'mvn:org.apache.servicemix.bundles:org.apache.servicemix.bundles.dom4j:jar:1.6.1_5',
-  sha1 = 'f5da21ae9508008f7b28001983adc143cb310ad7',
-  maven_coords = 'org.apache.servicemix.bundles:org.apache.servicemix.bundles.dom4j:1.6.1_5',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'plexus-utils',
-  out = 'plexus-utils-3.0.24.jar',
-  url = 'mvn:org.codehaus.plexus:plexus-utils:jar:3.0.24',
-  sha1 = 'b4ac9780b37cb1b736eae9fbcef27609b7c911ef',
-  maven_coords = 'org.codehaus.plexus:plexus-utils:jar:NON-OSGI:3.0.24',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'sshd-core',
-  out = 'sshd-core-1.4.0.jar',
-  url = 'mvn:org.apache.sshd:sshd-core:jar:1.4.0',
-  sha1 = 'c8f3d7457fc9979d1b9ec319f0229b89793c8e56',
-  maven_coords = 'org.apache.sshd:sshd-core:1.4.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'bcpkix-jdk15on',
-  out = 'bcpkix-jdk15on-1.59.jar',
-  url = 'mvn:org.bouncycastle:bcpkix-jdk15on:jar:1.59',
-  sha1 = '9cef0aab8a4bb849a8476c058ce3ff302aba3fff',
-  maven_coords = 'org.bouncycastle:bcpkix-jdk15on:1.59',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'bcprov-jdk15on',
-  out = 'bcprov-jdk15on-1.59.jar',
-  url = 'mvn:org.bouncycastle:bcprov-jdk15on:jar:1.59',
-  sha1 = '2507204241ab450456bdb8e8c0a8f986e418bd99',
-  maven_coords = 'org.bouncycastle:bcprov-jdk15on:1.59',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'hamcrest-optional',
-  out = 'hamcrest-optional-1.1.0.jar',
-  url = 'mvn:com.spotify:hamcrest-optional:jar:1.1.0',
-  sha1 = 'c2dfe3a43794b15fb4c28de0027fe6e249855b3b',
-  maven_coords = 'com.spotify:hamcrest-optional:jar:NON-OSGI:1.1.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'swagger-annotations',
-  out = 'swagger-annotations-1.5.16.jar',
-  url = 'mvn:io.swagger:swagger-annotations:jar:1.5.16',
-  sha1 = '935f1f2fed2cbdd7a0513981d6c53201e21155f4',
-  maven_coords = 'io.swagger:swagger-annotations:1.5.16',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'kafka-clients',
-  out = 'org.apache.servicemix.bundles.kafka-clients-0.8.2.2_1.jar',
-  url = 'mvn:org.apache.servicemix.bundles:org.apache.servicemix.bundles.kafka-clients:jar:0.8.2.2_1',
-  sha1 = '19ba66200cc3617fad12843788dff818b9882008',
-  maven_coords = 'org.apache.servicemix.bundles:org.apache.servicemix.bundles.kafka-clients:0.8.2.2_1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'tinder-xmpp',
-  out = 'tinder-1.3.0.jar',
-  url = 'mvn:org.igniterealtime:tinder:jar:1.3.0',
-  sha1 = '46353ded2a1d1a87d17600206d61814eb0b8a711',
-  maven_coords = 'org.igniterealtime:tinder:jar:NON-OSGI:1.3.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'aalto-xml',
-  out = 'aalto-xml-1.0.0.jar',
-  url = 'mvn:com.fasterxml:aalto-xml:jar:1.0.0',
-  sha1 = 'aeae9e8a71914e7f5efc8a69d2f5cb1f2224f2c6',
-  maven_coords = 'com.fasterxml:aalto-xml:1.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'stax2-api',
-  out = 'stax2-api-4.0.0.jar',
-  url = 'mvn:org.codehaus.woodstox:stax2-api:jar:4.0.0',
-  sha1 = '6fa8b05f7587a3cb819d223ee0b0de0c126e3dd1',
-  maven_coords = 'org.codehaus.woodstox:stax2-api:4.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'concurrent-hashmap',
-  out = 'concurrentlinkedhashmap-lru-1.0.jar',
-  url = 'mvn:com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.0',
-  sha1 = 'db7b7a28b835db4717d4aaf31f5d4441887a6d46',
-  maven_coords = 'com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:NON-OSGI:1.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'gnu-idn',
-  out = 'libidn-1.15.jar',
-  url = 'mvn:org.gnu.inet:libidn:jar:1.15',
-  sha1 = 'b5bede3c1c031a827b604da31768ddaf833495c6',
-  maven_coords = 'org.gnu.inet:libidn:jar:NON-OSGI:1.15',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'sigar',
-  out = 'sigar-1.6.5_01.jar',
-  url = 'mvn:org.knowhowlab.osgi:sigar:jar:1.6.5_01',
-  sha1 = '58eb4af0dc4a1d331cd7620767216494e2984dea',
-  maven_coords = 'org.knowhowlab.osgi:sigar:1.6.5_01',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-grpc-core',
-  out = 'grpc-core-1.14.0.jar',
-  url = 'mvn:io.grpc:grpc-core:jar:1.14.0',
-  sha1 = '526e5be291c96e248789d769c108a084febda07f',
-  maven_coords = 'io.grpc:grpc-core:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-grpc-context',
-  out = 'grpc-context-1.14.0.jar',
-  url = 'mvn:io.grpc:grpc-context:jar:1.14.0',
-  sha1 = '77252b5f926875891aaae5629e6ab2ef968cd6c6',
-  maven_coords = 'io.grpc:grpc-context:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-grpc-stub',
-  out = 'grpc-stub-1.14.0.jar',
-  url = 'mvn:io.grpc:grpc-stub:jar:1.14.0',
-  sha1 = '74bfe83c0dc69bf903fff8df3568cbeb8b387d35',
-  maven_coords = 'io.grpc:grpc-stub:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-grpc-netty',
-  out = 'grpc-netty-1.14.0.jar',
-  url = 'mvn:io.grpc:grpc-netty:jar:1.14.0',
-  sha1 = '21c6edadd45b6869384f8aa0df1663d62c503617',
-  maven_coords = 'io.grpc:grpc-netty:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-grpc-auth',
-  out = 'grpc-auth-1.14.0.jar',
-  url = 'mvn:io.grpc:grpc-auth:jar:1.14.0',
-  sha1 = '3b88d51b52da96d574f4dfd50ad6d2bc8904a858',
-  maven_coords = 'io.grpc:grpc-auth:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-grpc-protobuf',
-  out = 'grpc-protobuf-1.14.0.jar',
-  url = 'mvn:io.grpc:grpc-protobuf:jar:1.14.0',
-  sha1 = 'd429fdc2e0d288b34ea7588bb762eb458f385bd5',
-  maven_coords = 'io.grpc:grpc-protobuf:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-grpc-protobuf-lite',
-  out = 'grpc-protobuf-lite-1.14.0.jar',
-  url = 'mvn:io.grpc:grpc-protobuf-lite:jar:1.14.0',
-  sha1 = '2ac8c28ca927f954eaa228a931d9c163cf3d860f',
-  maven_coords = 'io.grpc:grpc-protobuf-lite:jar:NON-OSGI:1.14.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'runtime-protobuf',
-  out = 'protobuf-java-3.6.1.jar',
-  url = 'mvn:com.google.protobuf:protobuf-java:jar:3.6.1',
-  sha1 = '0d06d46ecfd92ec6d0f3b423b4cd81cb38d8b924',
-  maven_coords = 'com.google.protobuf:protobuf-java:3.6.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-core-1.3.1',
-  out = 'grpc-core-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-core:jar:1.3.1',
-  sha1 = 'a9b38b4a19af3ef208f4f6bf7871876d959c5eb1',
-  maven_coords = 'io.grpc:grpc-core:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-protobuf-1.3.1',
-  out = 'grpc-protobuf-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-protobuf:jar:1.3.1',
-  sha1 = '9562e977cacd6e128a31686c3e6948d61873c496',
-  maven_coords = 'io.grpc:grpc-protobuf:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-protobuf-lite-1.3.1',
-  out = 'grpc-protobuf-lite-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-protobuf-lite:jar:1.3.1',
-  sha1 = '98d1d3d100fdcf92c4331999a504a1a72a5f6e52',
-  maven_coords = 'io.grpc:grpc-protobuf-lite:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-stub-1.3.1',
-  out = 'grpc-stub-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-stub:jar:1.3.1',
-  sha1 = '60bdfa9d8c664a9d87ae461106eff6eed8da6c54',
-  maven_coords = 'io.grpc:grpc-stub:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-netty-1.3.1',
-  out = 'grpc-netty-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-netty:jar:1.3.1',
-  sha1 = 'cc3831fccb76cfe21445f75cc055b5ffd979dc54',
-  maven_coords = 'io.grpc:grpc-netty:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-auth-1.3.1',
-  out = 'grpc-auth-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-auth:jar:1.3.1',
-  sha1 = '57a0e0b9e474842801521fae76f955dd28ad3ae0',
-  maven_coords = 'io.grpc:grpc-auth:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'protobuf-java-3.3.0',
-  out = 'protobuf-java-3.3.0.jar',
-  url = 'mvn:com.google.protobuf:protobuf-java:jar:3.3.0',
-  sha1 = '9f301d1a27501b1afcb2ed16aad428337dabf9e4',
-  maven_coords = 'com.google.protobuf:protobuf-java:3.3.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'protobuf-java-3.2.0',
-  out = 'protobuf-java-3.2.0.jar',
-  url = 'mvn:com.google.protobuf:protobuf-java:jar:3.2.0',
-  sha1 = '62ccf171a106ff6791507f2d5364c275f9a3131d',
-  maven_coords = 'com.google.protobuf:protobuf-java:3.2.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-testing-1.3.1',
-  out = 'grpc-testing-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-testing:jar:1.3.1',
-  sha1 = 'fd6c4081cd3415684a0b655327e210aa10153eec',
-  maven_coords = 'io.grpc:grpc-testing:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-testing-proto-1.3.1',
-  out = 'grpc-testing-proto-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-testing-proto:jar:1.3.1',
-  sha1 = '170f0406457b44695562ccd5ec8d0da9cb762643',
-  maven_coords = 'io.grpc:grpc-testing-proto:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'grpc-context-1.3.1',
-  out = 'grpc-context-1.3.1.jar',
-  url = 'mvn:io.grpc:grpc-context:jar:1.3.1',
-  sha1 = '28accd419b18d59055b8999f78f5cb7767c7bde8',
-  maven_coords = 'io.grpc:grpc-context:jar:NON-OSGI:1.3.1',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'google-truth-0.28',
-  out = 'truth-0.28.jar',
-  url = 'mvn:com.google.truth:truth:jar:0.28',
-  sha1 = '0a388c7877c845ff4b8e19689dda5ac9d34622c4',
-  maven_coords = 'com.google.truth:truth:jar:NON-OSGI:0.28',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'google-code-findbugs-3.0.0',
-  out = 'jsr305-3.0.0.jar',
-  url = 'mvn:com.google.code.findbugs:jsr305:jar:3.0.0',
-  sha1 = '5871fb60dc68d67da54a663c3fd636a10a532948',
-  maven_coords = 'com.google.code.findbugs:jsr305:jar:NON-OSGI:3.0.0',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'google-errorprone-2.0.19',
-  out = 'error_prone_annotations-2.0.19.jar',
-  url = 'mvn:com.google.errorprone:error_prone_annotations:jar:2.0.19',
-  sha1 = 'c3754a0bdd545b00ddc26884f9e7624f8b6a14de',
-  maven_coords = 'com.google.errorprone:error_prone_annotations:jar:NON-OSGI:2.0.19',
-  visibility = [ 'PUBLIC' ],
-)
-
-remote_jar (
-  name = 'google-instrumentation-0.3.0',
-  out = 'instrumentation-api-0.3.0.jar',
-  url = 'mvn:com.google.instrumentation:instrumentation-api:jar:0.3.0',
-  sha1 = 'a2e145e7a7567c6372738f5c5a6f3ba6407ac354',
-  maven_coords = 'com.google.instrumentation:instrumentation-api:jar:NON-OSGI:0.3.0',
-  visibility = [ 'PUBLIC' ],
-)
-
diff --git a/lib/pom.xml b/lib/pom.xml
index 506fefd..0e7cd97 100644
--- a/lib/pom.xml
+++ b/lib/pom.xml
@@ -555,72 +555,16 @@
             <artifactId>commons-pool</artifactId>
         </dependency>
 
-<!-- transitive Kryo dependency.
-        <dependency>
-            <groupId>org.objenesis</groupId>
-            <artifactId>objenesis</artifactId>
-        </dependency>
- -->
         <dependency>
             <groupId>com.google.guava</groupId>
             <artifactId>guava</artifactId>
         </dependency>
 
-<!-- Fix buck? everyone depending on netty doesn't sound right.
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-buffer</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-common</artifactId>
-        </dependency>
- -->
-
         <dependency>
             <groupId>com.eclipsesource.minimal-json</groupId>
             <artifactId>minimal-json</artifactId>
         </dependency>
 
-<!-- Fix buck? Kryo and transitive dependency.
-        <dependency>
-            <groupId>com.esotericsoftware</groupId>
-            <artifactId>kryo</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.esotericsoftware</groupId>
-            <artifactId>reflectasm</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.ow2.asm</groupId>
-            <artifactId>asm</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>com.esotericsoftware</groupId>
-            <artifactId>minlog</artifactId>
-        </dependency>
- -->
-<!-- Fix buck? everyone depending on metrics doesn't sound right.
-        <dependency>
-            <groupId>io.dropwizard.metrics</groupId>
-            <artifactId>metrics-core</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>io.dropwizard.metrics</groupId>
-            <artifactId>metrics-json</artifactId>
-        </dependency>
- -->
-
         <dependency>
             <groupId>org.slf4j</groupId>
             <artifactId>slf4j-api</artifactId>
@@ -671,8 +615,6 @@
             <artifactId>org.apache.karaf.system.core</artifactId>
         </dependency>
 
-        <!-- YANG stuff here? Fix buck?-->
-
         <!-- TEST -->
         <dependency>
             <groupId>junit</groupId>
diff --git a/models/ciena/waveserverai/BUCK b/models/ciena/waveserverai/BUCK
deleted file mode 100644
index 576bb9f..0000000
--- a/models/ciena/waveserverai/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//models/common:onos-models-common',
-]
-
-APPS = [
-    'org.onosproject.models.common',
-]
-
-yang_model(
-    app_name = 'org.onosproject.models.ciena.waveserverai',
-    title = 'Ciena Waveserver Ai YANG Models',
-    custom_registrator = True,
-    deps = COMPILE_DEPS,
-    required_apps = APPS,
-)
diff --git a/models/common/BUCK b/models/common/BUCK
deleted file mode 100644
index a210b1e..0000000
--- a/models/common/BUCK
+++ /dev/null
@@ -1,7 +0,0 @@
-
-yang_model (
-  app_name = 'org.onosproject.models.common',
-  title = 'Common YANG Models',
-  custom_registrator = True,
-  deps = [ '//lib:CORE_DEPS' ]
-)
diff --git a/models/huawei/BUCK b/models/huawei/BUCK
deleted file mode 100644
index 1d8a1d2..0000000
--- a/models/huawei/BUCK
+++ /dev/null
@@ -1,7 +0,0 @@
-
-yang_model (
-  app_name = 'org.onosproject.models.huawei',
-  title = 'Huawei YANG Models',
-  custom_registrator = True,
-  deps = [ '//lib:CORE_DEPS' ]
-)
diff --git a/models/ietf/BUCK b/models/ietf/BUCK
deleted file mode 100644
index 6cc9d15..0000000
--- a/models/ietf/BUCK
+++ /dev/null
@@ -1,7 +0,0 @@
-
-yang_model (
-  app_name = 'org.onosproject.models.ietf',
-  title = 'IETF YANG Models',
-  custom_registrator = False,
-  deps = [ '//lib:CORE_DEPS' ]
-)
diff --git a/models/l3vpn/BUCK b/models/l3vpn/BUCK
deleted file mode 100644
index 7f6d5b8..0000000
--- a/models/l3vpn/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//models/common:onos-models-common',
-]
-
-APPS = [
-    'org.onosproject.models.common',
-]
-
-yang_model(
-    app_name = 'org.onosproject.models.l3vpn',
-    title = 'L3VPN YANG Models',
-    custom_registrator = True,
-    deps = COMPILE_DEPS,
-    required_apps = APPS,
-)
diff --git a/models/microsemi/BUCK b/models/microsemi/BUCK
deleted file mode 100644
index 3ab6536..0000000
--- a/models/microsemi/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//models/common:onos-models-common',
-]
-
-APPS = [
-    'org.onosproject.models.common',
-]
-
-yang_model(
-    app_name = 'org.onosproject.models.microsemi',
-    title = 'Microsemi YANG Models',
-    custom_registrator = True,
-    deps = COMPILE_DEPS,
-    required_apps = APPS,
-)
diff --git a/models/openconfig-infinera/BUCK b/models/openconfig-infinera/BUCK
deleted file mode 100644
index 69363e2..0000000
--- a/models/openconfig-infinera/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//models/ietf:onos-models-ietf',
-]
-
-APPS = [
-    'org.onosproject.models.ietf',
-]
-
-yang_model(
-  app_name = 'org.onosproject.models.openconfig-infinera',
-  title = 'OpenConfig Infinera XT3300 YANG Models',
-  custom_registrator = False,
-  deps = COMPILE_DEPS,
-  required_apps = APPS,
-)
diff --git a/models/openconfig/BUCK b/models/openconfig/BUCK
deleted file mode 100644
index 5905528..0000000
--- a/models/openconfig/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//models/ietf:onos-models-ietf',
-]
-
-APPS = [
-    'org.onosproject.models.ietf',
-]
-
-yang_model(
-  app_name = 'org.onosproject.models.openconfig',
-  title = 'OpenConfig YANG Models',
-  custom_registrator = True,
-  deps = COMPILE_DEPS,
-  required_apps = APPS,
-)
diff --git a/models/openroadm/BUCK b/models/openroadm/BUCK
deleted file mode 100644
index 8a1352c..0000000
--- a/models/openroadm/BUCK
+++ /dev/null
@@ -1,5 +0,0 @@
-
-yang_model(
-  app_name = 'org.onosproject.models.openroadm',
-  title = 'Open ROADM YANG Models',
-)
\ No newline at end of file
diff --git a/models/polatis/BUCK b/models/polatis/BUCK
deleted file mode 100644
index 463f600..0000000
--- a/models/polatis/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//models/common:onos-models-common',
-]
-
-APPS = [
-    'org.onosproject.models.common',
-]
-
-yang_model (
-  app_name = 'org.onosproject.models.polatis',
-  title = 'Polatis YANG Model',
-  deps = COMPILE_DEPS,
-  required_apps = APPS,
-)
diff --git a/models/tapi/BUCK b/models/tapi/BUCK
deleted file mode 100644
index 5276435..0000000
--- a/models/tapi/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-yang_model(
-  app_name = 'org.onosproject.models.tapi',
-  title = 'ONF Transport API YANG Models',
-  custom_registrator = True,
-  deps = COMPILE_DEPS,
-)
diff --git a/pipelines/basic/BUCK b/pipelines/basic/BUCK
deleted file mode 100644
index 26e74dd..0000000
--- a/pipelines/basic/BUCK
+++ /dev/null
@@ -1,30 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:minimal-json',
-    '//drivers/default:onos-drivers-default',
-    '//protocols/p4runtime/model:onos-protocols-p4runtime-model',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-]
-
-BUNDLES = [
-    '//pipelines/basic:onos-pipelines-basic',
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-]
-
-osgi_jar(
-    deps = COMPILE_DEPS,
-)
-
-onos_app(
-    app_name = 'org.onosproject.pipelines.basic',
-    title = 'Basic Pipelines',
-    category = 'Pipeline',
-    url = 'http://onosproject.org',
-    description = 'Provides pipelines with basic L2/L3 forwarding capabilities and packet-in/out '
-                  + 'support.',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.drivers.p4runtime',
-    ]
-)
diff --git a/pipelines/fabric/BUCK b/pipelines/fabric/BUCK
deleted file mode 100644
index 5491289..0000000
--- a/pipelines/fabric/BUCK
+++ /dev/null
@@ -1,37 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:KRYO',
-    '//protocols/p4runtime/model:onos-protocols-p4runtime-model',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-    '//pipelines/basic:onos-pipelines-basic',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-    '//providers/general/device:onos-providers-general-device',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-BUNDLES = [
-    '//pipelines/fabric:onos-pipelines-fabric',
-    '//apps/inbandtelemetry/api:onos-apps-inbandtelemetry-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app(
-    app_name = 'org.onosproject.pipelines.fabric',
-    title = 'Fabric Pipeline',
-    category = 'Pipeline',
-    url = 'http://onosproject.org',
-    description = 'Provides pipelines with CORD fabric underlay support.',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.drivers.p4runtime',
-        'org.onosproject.pipelines.basic',
-    ]
-)
diff --git a/protocols/bgp/api/BUCK b/protocols/bgp/api/BUCK
deleted file mode 100644
index 37d94b0..0000000
--- a/protocols/bgp/api/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
-    '//core/api:onos-api',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/bgp/bgpio/BUCK b/protocols/bgp/bgpio/BUCK
deleted file mode 100644
index 32d5f4d..0000000
--- a/protocols/bgp/bgpio/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:COMPILE',
-    '//lib:NETTY',
-    '//core/api:onos-api',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/bgp/ctl/BUCK b/protocols/bgp/ctl/BUCK
deleted file mode 100644
index 3568c2e..0000000
--- a/protocols/bgp/ctl/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:jersey-client',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-    '//lib:javax.ws.rs-api',
-    '//protocols/bgp/api:onos-protocols-bgp-api',
-    '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty',
-    '//lib:org.osgi.compendium',
-    '//lib:org.apache.felix.scr.annotations',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/bmv2/thrift-api/BUCK b/protocols/bmv2/thrift-api/BUCK
deleted file mode 100644
index f9c90ff..0000000
--- a/protocols/bmv2/thrift-api/BUCK
+++ /dev/null
@@ -1,102 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:libthrift',
-]
-
-# BMV2_COMMIT should be set to the same value as specified in install-p4-tools.sh
-BMV2_COMMIT = 'a3f0ebe4c0f10a656f8aa1ad68cb20402a62b0ee'
-BMV2_BASEURL = 'https://cdn.rawgit.com/p4lang/behavioral-model/' + BMV2_COMMIT
-BMV2_NAMESPACE = 'org.onosproject.bmv2.thriftapi'
-
-THRIFT_EXE_BASEURL = 'https://cdn.rawgit.com/ccascone/mvn-thrift-compiler/1.1_0.9.3/exe/'
-THRIFT_EXE_SHA1S = {
-    'thrift-linux-x86_64.exe':'9b7b5d6eabc9552b8227e8f63981bc15c0985dd5',
-    'thrift-osx-x86_64.exe':'b9215c5141f56fd277b7cf41d9745af847afe498'
-}
-
-def prebuilt_thrift_compiler():
-    import platform
-    os_name = platform.system().lower()
-    if os_name == 'darwin':
-        os_name = 'osx'
-    arch = '%s-%s' % (os_name, platform.machine())
-    fname = 'thrift-%s.exe' % arch
-    if fname not in THRIFT_EXE_SHA1S:
-        raise Exception('Cannot download thrift compiler, architecture %s not supported' % arch)
-    remote_file(
-        name = 'thrift-binary',
-        out = 'thrift.binary',
-        url = THRIFT_EXE_BASEURL + fname,
-        sha1 = THRIFT_EXE_SHA1S[fname],
-    )
-    genrule (
-        name = 'thrift-exe',
-        srcs = [ ':thrift-binary' ],
-        bash = 'cp $(location :thrift-binary) $OUT && chmod +x $OUT',
-        executable = True,
-        out = 'thrift.exe'
-    )
-
-prebuilt_thrift_compiler()
-
-# TODO: or export local thrift executable
-# export_file(
-#       name = 'thrift-exe',
-#       src = '/usr/bin/thrift',
-#     )
-
-def remote_thrift_def(
-    name,
-    url,
-    sha1):
-    # Download *.thrift definition file.
-    remote_file(
-        name = name + '-rem',
-        out = name + '.thrift',
-        url = url,
-        sha1 = sha1,
-    )
-    # Add java namespace.
-    genrule (
-        name = name+'-ns',
-        srcs = [':' + name + '-rem'],
-        bash = 'cp $(location :' + name + '-rem) $OUT && '
-                + 'echo "namespace java ' + BMV2_NAMESPACE + '" | '
-                + 'cat - $OUT > temp && mv temp $OUT',
-        out = name + '.thrift',
-    )
-    # Generate Java sources.
-    genrule (
-        name = name+'-gen',
-        srcs = [':' + name + '-ns'],
-        # FIXME: is there a better way to get just the output dir of this rule?
-        # ...not the full file path in $OUT
-        cmd = '$(exe :thrift-exe) -o $SRCDIR/../' + name + '-gen '
-                + '--gen java $SRCDIR/' + name + '.thrift',
-        out = 'gen-java',
-    )
-    # Zip them.
-    zip_file(
-        name = name,
-        out = name + '.src.zip',
-        srcs = [':' + name + '-gen']
-    )
-
-
-remote_thrift_def(
-    name = 'simple_pre_lag',
-    url = BMV2_BASEURL + '/thrift_src/simple_pre_lag.thrift',
-    sha1 = 'f468ebebc7bb8577f11ca950939f34add5f5634c',
-)
-
-osgi_jar(
-    # If a source ending with *.src.zip is passed, Buck automatically looks for *.java files inside.
-    srcs = [':simple_pre_lag'],
-    deps = COMPILE_DEPS,
-    do_javadocs = False,
-    do_checkstyle = False
-)
-
-project_config(
-    src_target = ':onos-protocols-bmv2-thrift-api'
-)
diff --git a/protocols/gnmi/BUCK b/protocols/gnmi/BUCK
deleted file mode 100644
index 6c80b9b..0000000
--- a/protocols/gnmi/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-BUNDLES = [
-    '//protocols/gnmi/stub:onos-protocols-gnmi-stub',
-]
-
-onos_app(
-    app_name = 'org.onosproject.protocols.gnmi',
-    title = 'gNMI Protocol Subsystem',
-    category = 'Protocol',
-    url = 'http://onosproject.org',
-    description = 'ONOS gNMI protocol subsystem',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.protocols.grpc'
-    ],
-)
diff --git a/protocols/gnmi/stub/BUCK b/protocols/gnmi/stub/BUCK
deleted file mode 100644
index 8a29090..0000000
--- a/protocols/gnmi/stub/BUCK
+++ /dev/null
@@ -1,24 +0,0 @@
-include_defs('//bucklets/grpc.bucklet')
-
-PROTOBUF_VER = '3.2.0'
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-    '//lib:grpc-protobuf-' + GRPC_VER,
-    '//lib:protobuf-java-' + PROTOBUF_VER,
-]
-
-grpc_jar(
-    deps = COMPILE_DEPS,
-    # FIXME should not be manually building absolute path.
-    # Come up with glob(..) equivalent in BUCK which can handle directory.
-    proto_paths = ["$ONOS_ROOT/protocols/gnmi/stub/src/main/proto"],
-    include_std_lib = True,
-)
-
-project_config(
-    src_target = ':onos-protocols-gnmi-stub'
-)
diff --git a/protocols/grpc/BUCK b/protocols/grpc/BUCK
deleted file mode 100644
index 093ea7d..0000000
--- a/protocols/grpc/BUCK
+++ /dev/null
@@ -1,38 +0,0 @@
-PROTOBUF_VER = '3.2.0'
-GRPC_VER = '1.3.1'
-
-BUNDLES = [
-    '//protocols/grpc/proto:onos-protocols-grpc-proto',
-    '//protocols/grpc/api:onos-protocols-grpc-api',
-    '//protocols/grpc/ctl:onos-protocols-grpc-ctl',
-    # gRPC dependencies
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-protobuf-' + GRPC_VER,
-    '//lib:grpc-protobuf-lite-' + GRPC_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-    '//lib:grpc-netty-' + GRPC_VER,
-    '//lib:grpc-auth-' + GRPC_VER,
-    '//lib:google-instrumentation-0.3.0',
-    '//lib:protobuf-java-3.2.0',
-    # Lazily adding all netty-related packages.
-    # Some of them might not be necessary.
-    '//lib:io_netty_netty',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_codec-http',
-    '//lib:io_netty_netty_codec-http2',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty_handler',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_transport-native-epoll',
-    '//lib:io_netty_netty_resolver',
-]
-
-onos_app (
-    app_name = 'org.onosproject.protocols.grpc',
-    title = 'gRPC Protocol Subsystem',
-    category = 'Protocol',
-    url = 'http://onosproject.org',
-    description = 'Exposes APIs to store and manage gRPC channels.',
-    included_bundles = BUNDLES,
-)
diff --git a/protocols/grpc/api/BUCK b/protocols/grpc/api/BUCK
deleted file mode 100644
index e0dad74..0000000
--- a/protocols/grpc/api/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/grpc/ctl/BUCK b/protocols/grpc/ctl/BUCK
deleted file mode 100644
index 36681b5..0000000
--- a/protocols/grpc/ctl/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-PROTOBUF_VER = '3.2.0'
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/grpc/api:onos-protocols-grpc-api',
-    '//protocols/grpc/proto:onos-protocols-grpc-proto',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-    '//lib:protobuf-java-' + PROTOBUF_VER,
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/grpc/proto/BUCK b/protocols/grpc/proto/BUCK
deleted file mode 100644
index 8f1b562..0000000
--- a/protocols/grpc/proto/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-include_defs(
-    '//bucklets/grpc.bucklet'
-)
-
-PROTOBUF_VER = '3.2.0'
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-    '//lib:grpc-protobuf-' + GRPC_VER,
-    '//lib:protobuf-java-' + PROTOBUF_VER,
-]
-
-grpc_jar(
-    proto_match_patterns = ["*.proto"],
-    proto_paths = ["$ONOS_ROOT/protocols/grpc/proto/", "$ONOS_ROOT"], #FIXME should not have to include ONOS_ROOT top level here
-    protoc_version = PROTOBUF_VER,
-    plugin_version = GRPC_VER,
-    deps = COMPILE_DEPS,
-)
-
-project_config(
-    src_target = ':onos-protocols-grpc-proto'
-)
diff --git a/protocols/isis/api/BUCK b/protocols/isis/api/BUCK
deleted file mode 100644
index 75c833b..0000000
--- a/protocols/isis/api/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/isis/ctl/BUCK b/protocols/isis/ctl/BUCK
deleted file mode 100644
index 1ab0b4b..0000000
--- a/protocols/isis/ctl/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//protocols/isis/api:onos-protocols-isis-api',
-    '//protocols/isis/isisio:onos-protocols-isis-isisio',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/isis/isisio/BUCK b/protocols/isis/isisio/BUCK
deleted file mode 100644
index abcd593..0000000
--- a/protocols/isis/isisio/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//protocols/isis/api:onos-protocols-isis-api',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/lisp/api/BUCK b/protocols/lisp/api/BUCK
deleted file mode 100644
index a182f2b..0000000
--- a/protocols/lisp/api/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:io_netty_netty_transport',
-    '//protocols/lisp/msg:onos-protocols-lisp-msg',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/lisp/ctl/BUCK b/protocols/lisp/ctl/BUCK
deleted file mode 100644
index 25764e7..0000000
--- a/protocols/lisp/ctl/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//protocols/lisp/api:onos-protocols-lisp-api',
-    '//protocols/lisp/msg:onos-protocols-lisp-msg',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_transport-native-epoll',
-    '//lib:io_netty_netty_handler',
-    '//lib:io_netty_netty_resolver',
-    '//lib:concurrent-trees',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-    '//core/api:onos-api-tests',
-    '//protocols/lisp/api:onos-protocols-lisp-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/protocols/lisp/msg/BUCK b/protocols/lisp/msg/BUCK
deleted file mode 100644
index 2e2b8a7..0000000
--- a/protocols/lisp/msg/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:io_netty_netty_buffer'
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/protocols/netconf/api/BUCK b/protocols/netconf/api/BUCK
deleted file mode 100644
index 61b3a10..0000000
--- a/protocols/netconf/api/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/netconf/ctl/BUCK b/protocols/netconf/ctl/BUCK
deleted file mode 100644
index 8abf233..0000000
--- a/protocols/netconf/ctl/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:ganymed-ssh2',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//cli:onos-cli',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:sshd-core',
-    '//lib:bcpkix-jdk15on',
-    '//lib:bcprov-jdk15on',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/protocols/openflow/api/BUCK b/protocols/openflow/api/BUCK
deleted file mode 100644
index 41fc729..0000000
--- a/protocols/openflow/api/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:openflowj',
-    '//lib:io_netty_netty_transport',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/protocols/openflow/ctl/BUCK b/protocols/openflow/ctl/BUCK
deleted file mode 100644
index 684fb64..0000000
--- a/protocols/openflow/ctl/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:openflowj',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_handler',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_transport_native_unix_common',
-    '//lib:io_netty_netty_transport-native-epoll',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/protocols/ospf/api/BUCK b/protocols/ospf/api/BUCK
deleted file mode 100644
index 75c833b..0000000
--- a/protocols/ospf/api/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/ospf/ctl/BUCK b/protocols/ospf/ctl/BUCK
deleted file mode 100644
index ec894cc..0000000
--- a/protocols/ospf/ctl/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//protocols/ospf/api:onos-protocols-ospf-api',
-    '//protocols/ospf/protocol:onos-protocols-ospf-protocol',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/ospf/protocol/BUCK b/protocols/ospf/protocol/BUCK
deleted file mode 100644
index 46a8746..0000000
--- a/protocols/ospf/protocol/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//protocols/ospf/api:onos-protocols-ospf-api',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/ovsdb/api/BUCK b/protocols/ovsdb/api/BUCK
deleted file mode 100644
index f9b5802..0000000
--- a/protocols/ovsdb/api/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:io_netty_netty_transport',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/ovsdb/ctl/BUCK b/protocols/ovsdb/ctl/BUCK
deleted file mode 100644
index bd40154..0000000
--- a/protocols/ovsdb/ctl/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_handler',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/ovsdb/rfc/BUCK b/protocols/ovsdb/rfc/BUCK
deleted file mode 100644
index 47f8625..0000000
--- a/protocols/ovsdb/rfc/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/p4runtime/BUCK b/protocols/p4runtime/BUCK
deleted file mode 100644
index 9668a16..0000000
--- a/protocols/p4runtime/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-BUNDLES = [
-    '//protocols/p4runtime/proto:onos-protocols-p4runtime-proto',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-    '//protocols/p4runtime/ctl:onos-protocols-p4runtime-ctl',
-    '//protocols/p4runtime/model:onos-protocols-p4runtime-model',
-]
-
-onos_app(
-    app_name = 'org.onosproject.protocols.p4runtime',
-    title = 'P4Runtime Protocol Subsystem',
-    category = 'Protocol',
-    url = 'http://onosproject.org',
-    description = 'ONOS P4Runtime protocol subsystem',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.protocols.grpc'
-    ],
-)
diff --git a/protocols/p4runtime/api/BUCK b/protocols/p4runtime/api/BUCK
deleted file mode 100644
index fd05763..0000000
--- a/protocols/p4runtime/api/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-GRPC_VER = '1.3.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-]
-
-TEST_DEPS = [
-    '//core/api:onos-api-tests',
-    '//lib:TEST',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/protocols/p4runtime/ctl/BUCK b/protocols/p4runtime/ctl/BUCK
deleted file mode 100644
index 343d3b2..0000000
--- a/protocols/p4runtime/ctl/BUCK
+++ /dev/null
@@ -1,28 +0,0 @@
-# Buck build of P4-related modules is no longer supported, please use Bazel
-# GRPC_VER = '1.3.1'
-# PROTOBUF_VER = '3.2.0'
-#
-# COMPILE_DEPS = [
-#     '//lib:CORE_DEPS',
-#     '//lib:KRYO',
-#     '//protocols/grpc/api:onos-protocols-grpc-api',
-#     '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-#     '//protocols/p4runtime/proto:onos-protocols-p4runtime-proto',
-#     '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-#     '//lib:grpc-stub-' + GRPC_VER,
-#     '//lib:grpc-netty-' + GRPC_VER,
-#     '//lib:protobuf-java-' + PROTOBUF_VER,
-#     '//core/store/serializers:onos-core-serializers',
-# ]
-#
-# TEST_DEPS = [
-#     '//lib:TEST',
-#     '//lib:GRPC_TEST_1.3',
-#     '//lib:minimal-json',
-#     '//lib:grpc-protobuf-lite-' + GRPC_VER,
-# ]
-#
-# osgi_jar_with_tests(
-#     deps = COMPILE_DEPS,
-#     test_deps = TEST_DEPS,
-# )
diff --git a/protocols/p4runtime/model/BUCK b/protocols/p4runtime/model/BUCK
deleted file mode 100644
index 61e5d49..0000000
--- a/protocols/p4runtime/model/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-PROTOBUF_VER = '3.2.0'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/p4runtime/proto:onos-protocols-p4runtime-proto',
-    '//lib:protobuf-java-' + PROTOBUF_VER,
-]
-
-TEST_DEPS = [
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS + TEST_DEPS,
-)
diff --git a/protocols/p4runtime/proto/BUCK b/protocols/p4runtime/proto/BUCK
deleted file mode 100644
index 27a8ef6..0000000
--- a/protocols/p4runtime/proto/BUCK
+++ /dev/null
@@ -1,57 +0,0 @@
-include_defs(
-    '//bucklets/grpc.bucklet'
-)
-
-PROTOBUF_VER = '3.2.0'
-GRPC_VER = '1.3.1'
-
-PI_COMMIT = '7e94b025bac6db63bc8534e5dd21a008984e38bc'
-PI_BASEURL = 'https://github.com/p4lang/PI.git'
-
-# Wondering which .proto files to build? Check p4runtime's Makefile:
-# https://github.com/p4lang/PI/blob/master/proto/Makefile.am
-PROTO_SRCS = [
-    '/proto/p4/v1/p4runtime.proto',
-    '/proto/p4/v1/p4data.proto',
-    '/proto/p4/config/v1/p4info.proto',
-    '/proto/p4/config/v1/p4types.proto',
-    '/proto/p4/tmp/p4config.proto',
-    '/proto/google/rpc/status.proto',
-    '/proto/google/rpc/code.proto',
-]
-
-COMPILE_DEPS =[
-    '//lib:CORE_DEPS',
-    '//incubator/grpc-dependencies:grpc-core-repkg-' + GRPC_VER,
-    '//lib:grpc-stub-' + GRPC_VER,
-    '//lib:grpc-protobuf-' + GRPC_VER,
-    '//lib:protobuf-java-' + PROTOBUF_VER,
-]
-
-genrule(
-    name = 'p4lang-pi-repo-' + PI_COMMIT,
-    bash = 'git clone --quiet ' + PI_BASEURL + ' $OUT > /dev/null && '
-            + 'cd $OUT && '
-            + 'git checkout --quiet -b buck-build ' + PI_COMMIT + ' > /dev/null && '
-            + 'git submodule update --quiet --init --recursive > /dev/null',
-    out = 'repo',
-)
-
-def get_proto_src_string():
-    proto_srcs = map(lambda x: "$(location :p4lang-pi-repo-%s)%s"  % (PI_COMMIT, x), PROTO_SRCS)
-    return " ".join(proto_srcs)
-
-grpc_jar(
-    src_string = get_proto_src_string(),
-    proto_paths = [
-        '$(location :p4lang-pi-repo-' + PI_COMMIT + ')/proto',
-    ],
-    protoc_version = PROTOBUF_VER,
-    plugin_version = GRPC_VER,
-    deps = COMPILE_DEPS,
-    include_std_lib = True,
-)
-
-project_config(
-    src_target = ':onos-protocols-p4runtime-proto'
-)
diff --git a/protocols/pcep/pcepio/BUCK b/protocols/pcep/pcepio/BUCK
deleted file mode 100644
index e02623d..0000000
--- a/protocols/pcep/pcepio/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:jackson-databind',
-    '//lib:jackson-annotations',
-    '//lib:osgi-core',
-    '//lib:org.apache.karaf.shell.console',
-    '//lib:org.apache.felix.scr.annotations',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/pcep/server/BUCK b/protocols/pcep/server/BUCK
deleted file mode 100644
index 1835e30..0000000
--- a/protocols/pcep/server/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-BUNDLES = [
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-    '//protocols/pcep/server/ctl:onos-protocols-pcep-server-ctl',
-]
-
-onos_app (
-  title = 'PCEP Server Module',
-  category = 'Utility',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-)
diff --git a/protocols/pcep/server/api/BUCK b/protocols/pcep/server/api/BUCK
deleted file mode 100644
index 4c26105..0000000
--- a/protocols/pcep/server/api/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
-    '//apps/pcep-api:onos-apps-pcep-api',
-    '//incubator/api:onos-incubator-api',
-    '//lib:io_netty_netty',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/pcep/server/ctl/BUCK b/protocols/pcep/server/ctl/BUCK
deleted file mode 100644
index 5295876..0000000
--- a/protocols/pcep/server/ctl/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-    '//core/store/serializers:onos-core-serializers',
-    '//apps/pcep-api:onos-apps-pcep-api',
-    '//lib:io_netty_netty',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//lib:TEST_ADAPTERS',
-    '//incubator/api:onos-incubator-api-tests',
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/protocols/rest/api/BUCK b/protocols/rest/api/BUCK
deleted file mode 100644
index 818ffbd..0000000
--- a/protocols/rest/api/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//lib:CORE_DEPS',
-    '//lib:jersey-client',
-    '//lib:jersey-security',
-    '//lib:jersey-common',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-    '//lib:javax.ws.rs-api',
-    '//lib:hk2-api',
-    '//lib:aopalliance-repackaged',
-    '//lib:javax.inject',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/rest/ctl/BUCK b/protocols/rest/ctl/BUCK
deleted file mode 100644
index c12164d..0000000
--- a/protocols/rest/ctl/BUCK
+++ /dev/null
@@ -1,24 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:jersey-client',
-    '//lib:jersey-common',
-    '//lib:jersey-media-sse',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-    '//lib:javax.ws.rs-api',
-    '//lib:hk2-api',
-    '//lib:aopalliance-repackaged',
-    '//lib:javax.inject',
-    '//protocols/rest/api:onos-protocols-rest-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//core/common:onos-core-common-tests'
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS
-)
-
diff --git a/protocols/restconf/client/api/BUCK b/protocols/restconf/client/api/BUCK
deleted file mode 100644
index c1f3e2c..0000000
--- a/protocols/restconf/client/api/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
-    '//protocols/rest/api:onos-protocols-rest-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/restconf/client/ctl/BUCK b/protocols/restconf/client/ctl/BUCK
deleted file mode 100644
index 1e1223d..0000000
--- a/protocols/restconf/client/ctl/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:jersey-client',
-    '//lib:jersey-common',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-    '//lib:javax.ws.rs-api',
-    '//lib:hk2-api',
-    '//lib:aopalliance-repackaged',
-    '//lib:javax.inject',
-    '//protocols/restconf/client/api:onos-protocols-restconf-client-api',
-    '//protocols/rest/api:onos-protocols-rest-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/restconf/server/BUCK b/protocols/restconf/server/BUCK
deleted file mode 100644
index b6ac9d4..0000000
--- a/protocols/restconf/server/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-BUNDLES = [
-    '//protocols/restconf/server/rpp:onos-protocols-restconf-server-rpp',
-]
-
-onos_app (
-  app_name = 'org.onosproject.protocols.restconfserver',
-  title = 'RESTCONF Server Module',
-  category = 'Utility',
-  url = 'http://onosproject.org',
-  included_bundles = BUNDLES,
-)
diff --git a/protocols/restconf/server/rpp/BUCK b/protocols/restconf/server/rpp/BUCK
deleted file mode 100644
index c21c905..0000000
--- a/protocols/restconf/server/rpp/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:jersey-client',
-    '//lib:jersey-server',
-    '//lib:javax.ws.rs-api',
-    '//lib:servlet-api',
-    '//lib:javax.inject',
-    '//utils/rest:onlab-rest',
-    '//apps/restconf/api:onos-apps-restconf-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//utils/osgi:onlab-osgi-tests',
-    '//web/api:onos-rest-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/restconf',
-)
diff --git a/protocols/snmp/api/BUCK b/protocols/snmp/api/BUCK
deleted file mode 100644
index 897a0ac..0000000
--- a/protocols/snmp/api/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//lib:org.apache.servicemix.bundles.snmp4j',
-    '//lib:snmp-core',
-    '//lib:mibs-net-snmp',
-    '//lib:mibs-rfc',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/snmp/ctl/BUCK b/protocols/snmp/ctl/BUCK
deleted file mode 100644
index b4357e1..0000000
--- a/protocols/snmp/ctl/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/snmp/api:onos-protocols-snmp-api',
-    '//lib:org.apache.servicemix.bundles.snmp4j',
-    '//lib:snmp-core',
-    '//lib:mibs-net-snmp',
-    '//lib:mibs-rfc',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/protocols/tl1/api/BUCK b/protocols/tl1/api/BUCK
deleted file mode 100644
index 52e0753..0000000
--- a/protocols/tl1/api/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:io_netty_netty_transport',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/protocols/tl1/ctl/BUCK b/protocols/tl1/ctl/BUCK
deleted file mode 100644
index af235e4..0000000
--- a/protocols/tl1/ctl/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//protocols/tl1/api:onos-protocols-tl1-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/protocols/xmpp/core/BUCK b/protocols/xmpp/core/BUCK
deleted file mode 100644
index 49a5015..0000000
--- a/protocols/xmpp/core/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-BUNDLES = [
-    '//protocols/xmpp/core/api:onos-protocols-xmpp-core-api',
-    '//protocols/xmpp/core/ctl:onos-protocols-xmpp-core-ctl',
-    '//lib:tinder-xmpp',
-    '//lib:org.apache.servicemix.bundles.dom4j',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//lib:stax2-api',
-    '//lib:aalto-xml',
-    '//lib:concurrent-hashmap',
-    '//lib:gnu-idn',
-]
-
-onos_app(
-    app_name = 'org.onosproject.protocols.xmpp',
-    title = 'XMPP Core Protocol Subsystem',
-    category = 'Protocol',
-    url = 'https://wiki.onosproject.org/display/ONOS/XMPP+as+SBI',
-    description = 'ONOS XMPP core protocol subsystem',
-    included_bundles = BUNDLES,
-)
\ No newline at end of file
diff --git a/protocols/xmpp/core/api/BUCK b/protocols/xmpp/core/api/BUCK
deleted file mode 100644
index 1e7a692..0000000
--- a/protocols/xmpp/core/api/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//core/api:onos-api',
-    '//lib:tinder-xmpp',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_common',
-    '//lib:org.apache.servicemix.bundles.dom4j',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/protocols/xmpp/core/ctl/BUCK b/protocols/xmpp/core/ctl/BUCK
deleted file mode 100644
index 4ce3ed1..0000000
--- a/protocols/xmpp/core/ctl/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/xmpp/core/api:onos-protocols-xmpp-core-api',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_transport-native-epoll',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_codec',
-    '//lib:org.apache.servicemix.bundles.dom4j',
-    '//lib:tinder-xmpp',
-    '//lib:stax2-api',
-    '//lib:aalto-xml',
-    '//lib:concurrent-hashmap',
-    '//lib:gnu-idn',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
\ No newline at end of file
diff --git a/protocols/xmpp/pubsub/BUCK b/protocols/xmpp/pubsub/BUCK
deleted file mode 100644
index 9a69e4c..0000000
--- a/protocols/xmpp/pubsub/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-BUNDLES = [
-    '//protocols/xmpp/core/api:onos-protocols-xmpp-core-api',
-    '//protocols/xmpp/pubsub/api:onos-protocols-xmpp-pubsub-api',
-    '//protocols/xmpp/pubsub/ctl:onos-protocols-xmpp-pubsub-ctl',
-    '//lib:tinder-xmpp',
-    '//lib:concurrent-hashmap',
-    '//lib:gnu-idn',
-]
-
-onos_app(
-    app_name = 'org.onosproject.protocols.xmpp.pubsub',
-    title = 'XMPP Publish/Subscribe protocol extension subsystem',
-    category = 'Protocol',
-    url = 'http://onosproject.org',
-    description = 'XMPP Publish/Subscribe protocol extension subsystem',
-    included_bundles = BUNDLES,
-    required_apps = [
-        'org.onosproject.protocols.xmpp',
-    ]
-)
\ No newline at end of file
diff --git a/protocols/xmpp/pubsub/api/BUCK b/protocols/xmpp/pubsub/api/BUCK
deleted file mode 100644
index d856754..0000000
--- a/protocols/xmpp/pubsub/api/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//core/api:onos-api',
-    '//lib:tinder-xmpp',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/protocols/xmpp/pubsub/ctl/BUCK b/protocols/xmpp/pubsub/ctl/BUCK
deleted file mode 100644
index e28ec52..0000000
--- a/protocols/xmpp/pubsub/ctl/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//core/api:onos-api',
-    '//lib:tinder-xmpp',
-    '//lib:concurrent-hashmap',
-    '//lib:gnu-idn',
-    '//protocols/xmpp/pubsub/api:onos-protocols-xmpp-pubsub-api',
-    '//protocols/xmpp/core/api:onos-protocols-xmpp-core-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
\ No newline at end of file
diff --git a/providers/bgp/BUCK b/providers/bgp/BUCK
deleted file mode 100644
index 5ebd51c..0000000
--- a/providers/bgp/BUCK
+++ /dev/null
@@ -1,19 +0,0 @@
-BUNDLES = [
-    '//providers/bgp/cfg:onos-providers-bgp-cfg',
-    '//providers/bgp/topology:onos-providers-bgp-topology',
-    '//providers/bgp/route:onos-providers-bgp-route',
-    '//providers/bgp/cli:onos-providers-bgp-cli',
-    '//protocols/bgp/api:onos-protocols-bgp-api',
-    '//protocols/bgp/ctl:onos-protocols-bgp-ctl',
-    '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
-]
-
-onos_app (
-    title = 'BGP Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'BGP protocol southbound providers.',
-    required_apps = [ 'org.onosproject.evpn-route-service' ],
-)
-
diff --git a/providers/bgp/cfg/BUCK b/providers/bgp/cfg/BUCK
deleted file mode 100644
index f3fa14d..0000000
--- a/providers/bgp/cfg/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//protocols/bgp/api:onos-protocols-bgp-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/bgp/cli/BUCK b/providers/bgp/cli/BUCK
deleted file mode 100644
index 64ae7f9..0000000
--- a/providers/bgp/cli/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-    '//providers/bgp/cfg:onos-providers-bgp-cfg',
-    '//providers/bgp/topology:onos-providers-bgp-topology',
-    '//protocols/bgp/api:onos-protocols-bgp-api',
-    '//protocols/bgp/ctl:onos-protocols-bgp-ctl',
-    '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-)
-
diff --git a/providers/bgp/route/BUCK b/providers/bgp/route/BUCK
deleted file mode 100644
index 5e94e85..0000000
--- a/providers/bgp/route/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/bgp/api:onos-protocols-bgp-api',
-    '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
-    '//incubator/store:onos-incubator-store',
-    '//incubator/api:onos-incubator-api',
-    '//apps/evpn-route-service/api:onos-apps-evpn-route-service-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/bgp/topology/BUCK b/providers/bgp/topology/BUCK
deleted file mode 100644
index efa8edb..0000000
--- a/providers/bgp/topology/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//protocols/bgp/api:onos-protocols-bgp-api',
-    '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
-    '//incubator/store:onos-incubator-store',
-    '//incubator/api:onos-incubator-api',
-    '//apps/pcep-api:onos-apps-pcep-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/bgpcep/BUCK b/providers/bgpcep/BUCK
deleted file mode 100644
index 1f0b14d..0000000
--- a/providers/bgpcep/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-BUNDLES = [
-  '//protocols/bgp/bgpio:onos-protocols-bgp-bgpio',
-  '//protocols/bgp/api:onos-protocols-bgp-api',
-  '//protocols/bgp/ctl:onos-protocols-bgp-ctl',
-  '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
-  '//apps/pcep-api:onos-apps-pcep-api',
-  '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-  '//providers/bgp/topology:onos-providers-bgp-topology',
-  '//providers/bgp/cfg:onos-providers-bgp-cfg',
-  '//protocols/pcep/server/ctl:onos-protocols-pcep-server-ctl',
-  '//providers/pcep/topology:onos-providers-pcep-topology',
-  '//providers/pcep/tunnel:onos-providers-pcep-tunnel',
-  '//providers/bgpcep/flow:onos-providers-bgpcep-flow',
-  '//apps/pce/app:onos-apps-pce-app',
-  '//apps/pce/pceweb:onos-apps-pce-pceweb',
-  '//apps/pce/bandwidthmgmt:onos-apps-pce-bandwidthmgmt', 
-]
-
-onos_app (
-    title = 'BGPCEP Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'BGPCEP providers.',
-)
-
diff --git a/providers/bgpcep/flow/BUCK b/providers/bgpcep/flow/BUCK
deleted file mode 100644
index 2115eb2..0000000
--- a/providers/bgpcep/flow/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//lib:org.osgi.compendium',
-  '//protocols/bgp/api:onos-protocols-bgp-api',
-  '//incubator/api:onos-incubator-api',
-  '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-  '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
-]
-
-osgi_jar_with_tests(
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/general/BUCK b/providers/general/BUCK
deleted file mode 100644
index 5d4973e..0000000
--- a/providers/general/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-BUNDLES = [
-    '//providers/general/device:onos-providers-general-device',
-]
-
-onos_app (
-    app_name = "org.onosproject.generaldeviceprovider",
-    title = 'General Device Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'General device southbound providers.',
-    required_apps = [],
-)
-
-
diff --git a/providers/general/device/BUCK b/providers/general/device/BUCK
deleted file mode 100644
index 4c7bd78..0000000
--- a/providers/general/device/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/host/BUCK b/providers/host/BUCK
deleted file mode 100644
index b7d90f4..0000000
--- a/providers/host/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.hostprovider',
-    title = 'Host Location Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'Provides host discovery and location to the ONOS core by eavesdropping on the ARP and NDP packets.',
-)
diff --git a/providers/hostprobing/BUCK b/providers/hostprobing/BUCK
deleted file mode 100644
index 21bf493..0000000
--- a/providers/hostprobing/BUCK
+++ /dev/null
@@ -1,22 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.hostprobingprovider',
-    title = 'Host Probing Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'Provides host probing mechanism that discovers or verifies the existence of a host at specific location',
-)
diff --git a/providers/isis/BUCK b/providers/isis/BUCK
deleted file mode 100644
index adc7a6f..0000000
--- a/providers/isis/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-BUNDLES = [
-    '//protocols/isis/api:onos-protocols-isis-api',
-    '//protocols/isis/ctl:onos-protocols-isis-ctl',
-    '//protocols/isis/isisio:onos-protocols-isis-isisio',
-    '//providers/isis/cfg:onos-providers-isis-cfg',
-    '//providers/isis/topology:onos-providers-isis-topology',
-]
-
-onos_app (
-    title = 'ISIS Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'ONOS ISIS protocol adapters.',
-    included_bundles = BUNDLES,
-)
-
diff --git a/providers/isis/cfg/BUCK b/providers/isis/cfg/BUCK
deleted file mode 100644
index 494b810..0000000
--- a/providers/isis/cfg/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//protocols/isis/api:onos-protocols-isis-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/providers/isis/topology/BUCK b/providers/isis/topology/BUCK
deleted file mode 100644
index 883ced2..0000000
--- a/providers/isis/topology/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//protocols/isis/api:onos-protocols-isis-api',
-    '//protocols/isis/ctl:onos-protocols-isis-ctl',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/link/BUCK b/providers/link/BUCK
deleted file mode 100644
index c8a288f..0000000
--- a/providers/link/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//utils/osgi:onlab-osgi-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-  app_name = 'org.onosproject.linkdiscovery',
-  title = 'Link Discovery Provider',
-  category = 'Provider',
-  url = 'http://onosproject.org',
-  description = 'ONOS link discovery provider.',
-)
\ No newline at end of file
diff --git a/providers/lisp/BUCK b/providers/lisp/BUCK
deleted file mode 100644
index cad7de2..0000000
--- a/providers/lisp/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-BUNDLES = [
-    '//providers/lisp/device:onos-providers-lisp-device',
-    '//providers/lisp/mapping:onos-providers-lisp-mapping',
-    '//providers/lisp/message:onos-providers-lisp-message',
-    '//protocols/lisp/api:onos-protocols-lisp-api',
-    '//protocols/lisp/ctl:onos-protocols-lisp-ctl',
-    '//protocols/lisp/msg:onos-protocols-lisp-msg',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-]
-
-onos_app (
-    app_name = 'org.onosproject.lisp',
-    title = 'LISP Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'LISP protocol southbound providers.',
-)
diff --git a/providers/lisp/device/BUCK b/providers/lisp/device/BUCK
deleted file mode 100644
index 153579f..0000000
--- a/providers/lisp/device/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/lisp/api:onos-protocols-lisp-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//protocols/lisp/api:onos-protocols-lisp-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/lisp/mapping/BUCK b/providers/lisp/mapping/BUCK
deleted file mode 100644
index 7e4bb9d..0000000
--- a/providers/lisp/mapping/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/lisp/api:onos-protocols-lisp-api',
-    '//protocols/lisp/msg:onos-protocols-lisp-msg',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//protocols/lisp/api:onos-protocols-lisp-api-tests',
-    '//apps/mappingmanagement/api:onos-apps-mappingmanagement-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/lisp/message/BUCK b/providers/lisp/message/BUCK
deleted file mode 100644
index a711177..0000000
--- a/providers/lisp/message/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/lisp/api:onos-protocols-lisp-api',
-    '//protocols/lisp/msg:onos-protocols-lisp-msg',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/lldp/BUCK b/providers/lldp/BUCK
deleted file mode 100644
index 8315f65..0000000
--- a/providers/lldp/BUCK
+++ /dev/null
@@ -1,32 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//providers/lldpcommon:onos-providers-lldpcommon',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-BUNDLES = [
-    '//providers/lldpcommon:onos-providers-lldpcommon',
-    '//providers/lldp:onos-providers-lldp',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.lldpprovider',
-    title = 'LLDP Link Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'Provides link discovery to the ONOS core by eavesdropping on the LLDP control packets.',
-    included_bundles = BUNDLES,
-)
-
diff --git a/providers/lldpcommon/BUCK b/providers/lldpcommon/BUCK
deleted file mode 100644
index 19fa4e7..0000000
--- a/providers/lldpcommon/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/providers/netcfghost/BUCK b/providers/netcfghost/BUCK
deleted file mode 100644
index dfc8af1..0000000
--- a/providers/netcfghost/BUCK
+++ /dev/null
@@ -1,18 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.netcfghostprovider',
-    title = 'Network Config Host Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'Allows operator to prescribe information about known hosts and their locations ' +
-        'using the network configuration subsystem. Such information takes precedence over ' +
-        'information discovered through other host location providers.',
-)
-
diff --git a/providers/netcfglinks/BUCK b/providers/netcfglinks/BUCK
deleted file mode 100644
index 2b643eb..0000000
--- a/providers/netcfglinks/BUCK
+++ /dev/null
@@ -1,30 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//providers/lldpcommon:onos-providers-lldpcommon',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-BUNDLES = [
-    '//providers/lldpcommon:onos-providers-lldpcommon',
-    '//providers/netcfglinks:onos-providers-netcfglinks',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.netcfglinksprovider',
-    title = 'Network Config Link Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'Allows operator to prescribe information about known infrastructure links and ' +
-        'their state using the network configuration subsystem. Such information takes precedence ' +
-        'over information discovered through other link discovery providers.',
-    included_bundles = BUNDLES,
-)
diff --git a/providers/netconf/BUCK b/providers/netconf/BUCK
deleted file mode 100644
index 92f7a72..0000000
--- a/providers/netconf/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-BUNDLES = [
-    '//providers/netconf/device:onos-providers-netconf-device',
-    '//providers/netconf/alarm:onos-providers-netconf-alarm',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//protocols/netconf/ctl:onos-protocols-netconf-ctl',
-    '//lib:sshd-core',
-]
-
-EXCLUDED_BUNDLES = [
-    '//lib:ganymed-ssh2',
-]
-
-onos_app (
-    title = 'NETCONF Provider',
-    category = 'Provider',
-    url = 'https://wiki.onosproject.org/display/ONOS/NETCONF',
-    included_bundles = BUNDLES,
-    excluded_bundles = EXCLUDED_BUNDLES,
-    description = 'Provides means for ONOS to discover and trigger the initial handshake procedure ' +
-        'with NETCONF from information given by network configuration.' +
-        'Also provides capabilities for receiving asynchronous alarm notifications from devices.',
-    required_apps = [ 'org.onosproject.faultmanagement'],
-)
-
-
diff --git a/providers/netconf/alarm/BUCK b/providers/netconf/alarm/BUCK
deleted file mode 100644
index 761f2ed..0000000
--- a/providers/netconf/alarm/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-    '//protocols/netconf/ctl:onos-protocols-netconf-ctl',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/netconf/device/BUCK b/providers/netconf/device/BUCK
deleted file mode 100644
index 89ee36b..0000000
--- a/providers/netconf/device/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/netconf/api:onos-protocols-netconf-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/null/BUCK b/providers/null/BUCK
deleted file mode 100644
index 8e43e3a..0000000
--- a/providers/null/BUCK
+++ /dev/null
@@ -1,23 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-    import_packages = '*,org.onosproject.cli.net',
-)
-
-onos_app (
-    title = 'Null Provider Suite',
-    category = 'Test Utility',
-    url = 'http://onosproject.org',
-    description = 'Suite of device, link, host, flow and packet providers that allow the operator ' +
-        'to test ONOS against completely fictional network topology. This is useful for conducting ' +
-        'ONOS core performance tests and for developing features that require only control plane ' +
-        '- and not data plane - functionality. ',
-)
diff --git a/providers/openflow/app/BUCK b/providers/openflow/app/BUCK
deleted file mode 100644
index 958004c..0000000
--- a/providers/openflow/app/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-APPS = [
-    'org.onosproject.hostprovider',
-    'org.onosproject.lldpprovider',
-    'org.onosproject.openflow-base',
-]
-
-onos_app (
-    app_name = 'org.onosproject.openflow',
-    title = 'OpenFlow Provider Suite',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'Suite of the OpenFlow base providers bundled together with ARP/NDP host ' +
-        'location provider and LLDP link provider.',
-    included_bundles = [ '//utils/osgi:onlab-osgi' ],  # FIXME to allow hollow oar files
-    required_apps = APPS,
-)
diff --git a/providers/openflow/base/BUCK b/providers/openflow/base/BUCK
deleted file mode 100644
index 0513e6f..0000000
--- a/providers/openflow/base/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-BUNDLES = [
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-    '//protocols/openflow/ctl:onos-protocols-openflow-ctl',
-    '//providers/openflow/device:onos-providers-openflow-device',
-    '//providers/openflow/packet:onos-providers-openflow-packet',
-    '//providers/openflow/flow:onos-providers-openflow-flow',
-    '//providers/openflow/group:onos-providers-openflow-group',
-    '//providers/openflow/meter:onos-providers-openflow-meter',
-]
-
-APPS = [
-    'org.onosproject.optical-model',
-]
-
-onos_app (
-    app_name = 'org.onosproject.openflow-base',
-    title = 'OpenFlow Base Provider',
-    category = 'Provider',
-    url = 'https://wiki.onosproject.org/display/ONOS/OpenFlow',
-    description = 'Provides the base suite of device, flow and packet providers that rely on the ' +
-        'OpenFlow protocol to interact with network devices.',
-    included_bundles = BUNDLES,
-    required_apps = APPS,
-)
diff --git a/providers/openflow/device/BUCK b/providers/openflow/device/BUCK
deleted file mode 100644
index 4d9269c..0000000
--- a/providers/openflow/device/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-    '//apps/optical-model:onos-apps-optical-model',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/openflow/flow/BUCK b/providers/openflow/flow/BUCK
deleted file mode 100644
index 77af1be..0000000
--- a/providers/openflow/flow/BUCK
+++ /dev/null
@@ -1,11 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/providers/openflow/group/BUCK b/providers/openflow/group/BUCK
deleted file mode 100644
index 6c3a325..0000000
--- a/providers/openflow/group/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-    '//providers/openflow/flow:onos-providers-openflow-flow',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/openflow/message/BUCK b/providers/openflow/message/BUCK
deleted file mode 100644
index 9abaabd..0000000
--- a/providers/openflow/message/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:METRICS',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-    '//apps/cpman/api:onos-apps-cpman-api',
-]
-
-BUNDLES = [
-    '//apps/cpman/api:onos-apps-cpman-api',
-    ':onos-providers-openflow-message',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.openflow-message',
-    title = 'Control Message Stats Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'ONOS OpenFlow control message provider.',
-    included_bundles = BUNDLES,
-)
diff --git a/providers/openflow/meter/BUCK b/providers/openflow/meter/BUCK
deleted file mode 100644
index 0e94809..0000000
--- a/providers/openflow/meter/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/openflow/packet/BUCK b/providers/openflow/packet/BUCK
deleted file mode 100644
index cacd1b1..0000000
--- a/providers/openflow/packet/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:openflowj',
-    '//protocols/openflow/api:onos-protocols-openflow-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/providers/ospf/BUCK b/providers/ospf/BUCK
deleted file mode 100644
index 829827e..0000000
--- a/providers/ospf/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-BUNDLES = [
-    '//protocols/ospf/api:onos-protocols-ospf-api',
-    '//protocols/ospf/ctl:onos-protocols-ospf-ctl',
-    '//protocols/ospf/protocol:onos-protocols-ospf-protocol',
-    '//providers/ospf/cfg:onos-providers-ospf-cfg',
-    '//providers/ospf/topology:onos-providers-ospf-topology',
-]
-
-onos_app (
-    title = 'OSPF Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'ONOS OSPF protocol adapters.',
-    included_bundles = BUNDLES,
-)
-
diff --git a/providers/ospf/cfg/BUCK b/providers/ospf/cfg/BUCK
deleted file mode 100644
index 83c5e19..0000000
--- a/providers/ospf/cfg/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//protocols/ospf/api:onos-protocols-ospf-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
diff --git a/providers/ospf/topology/BUCK b/providers/ospf/topology/BUCK
deleted file mode 100644
index bb95985..0000000
--- a/providers/ospf/topology/BUCK
+++ /dev/null
@@ -1,16 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/ospf/api:onos-protocols-ospf-api',
-    '//protocols/ospf/ctl:onos-protocols-ospf-ctl',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//lib:JACKSON',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/providers/ovsdb/BUCK b/providers/ovsdb/BUCK
deleted file mode 100644
index 0f36e70..0000000
--- a/providers/ovsdb/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-APPS = [
-    'org.onosproject.ovsdb-base',
-    'org.onosproject.ovsdbhostprovider',
-]
-
-onos_app (
-    app_name = 'org.onosproject.ovsdb',
-    title = 'OVSDB Southbound Meta',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'ONOS OVSDB southbound meta application',
-    included_bundles = [ '//utils/osgi:onlab-osgi' ],  # FIXME to allow hollow oar files
-    required_apps = APPS,
-)
diff --git a/providers/ovsdb/base/BUCK b/providers/ovsdb/base/BUCK
deleted file mode 100644
index 9261e9a..0000000
--- a/providers/ovsdb/base/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-BUNDLES = [
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/ctl:onos-protocols-ovsdb-ctl',
-
-    '//providers/ovsdb/tunnel:onos-providers-ovsdb-tunnel',
-    '//providers/ovsdb/device:onos-providers-ovsdb-device',
-]
-
-onos_app (
-    app_name = 'org.onosproject.ovsdb-base',
-    title = 'OVSDB Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'ONOS OVSDB provider.',
-    included_bundles = BUNDLES,
-)
diff --git a/providers/ovsdb/device/BUCK b/providers/ovsdb/device/BUCK
deleted file mode 100644
index 582c16e..0000000
--- a/providers/ovsdb/device/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS'
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS
-)
-
diff --git a/providers/ovsdb/host/BUCK b/providers/ovsdb/host/BUCK
deleted file mode 100644
index bdb2b28..0000000
--- a/providers/ovsdb/host/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.ovsdbhostprovider',
-    title = 'OVSDB host Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    description = 'OVSDB Host provider.',
-)
diff --git a/providers/ovsdb/tunnel/BUCK b/providers/ovsdb/tunnel/BUCK
deleted file mode 100644
index 571e5ed..0000000
--- a/providers/ovsdb/tunnel/BUCK
+++ /dev/null
@@ -1,10 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//incubator/api:onos-incubator-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/p4runtime/BUCK b/providers/p4runtime/BUCK
deleted file mode 100644
index 7df28a4..0000000
--- a/providers/p4runtime/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-BUNDLES = [
-    '//providers/p4runtime/packet:onos-providers-p4runtime-packet',
-]
-
-onos_app (
-    app_name = 'org.onosproject.p4runtime',
-    title = 'P4Runtime Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'P4Runtime southbound providers.',
-    required_apps = [
-        'org.onosproject.protocols.p4runtime',
-    ]
-)
-
-
diff --git a/providers/p4runtime/packet/BUCK b/providers/p4runtime/packet/BUCK
deleted file mode 100644
index 995095f..0000000
--- a/providers/p4runtime/packet/BUCK
+++ /dev/null
@@ -1,8 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//protocols/p4runtime/api:onos-protocols-p4runtime-api',
-]
-
-osgi_jar (
-    deps = COMPILE_DEPS,
-)
\ No newline at end of file
diff --git a/providers/pcep/BUCK b/providers/pcep/BUCK
deleted file mode 100644
index 0f5c1d0..0000000
--- a/providers/pcep/BUCK
+++ /dev/null
@@ -1,20 +0,0 @@
-BUNDLES = [
-    '//providers/pcep/topology:onos-providers-pcep-topology',
-    '//providers/pcep/tunnel:onos-providers-pcep-tunnel',
-    '//providers/pcep/cli:onos-providers-pcep-cli',
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-    '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
-    '//protocols/pcep/server/ctl:onos-protocols-pcep-server-ctl',
-    '//apps/pcep-api:onos-apps-pcep-api',
-    '//lib:io_netty_netty',
-]
-
-onos_app (
-    title = 'PCEP Provider',
-    category = 'Provider',
-    url = 'http://onosproject.org',
-    included_bundles = BUNDLES,
-    description = 'PCEP protocol providers root.',
-    required_apps = [ 'org.onosproject.pcep-api', 'org.onosproject.optical-model' ],
-)
-
diff --git a/providers/pcep/cli/BUCK b/providers/pcep/cli/BUCK
deleted file mode 100644
index ed68b8f..0000000
--- a/providers/pcep/cli/BUCK
+++ /dev/null
@@ -1,12 +0,0 @@
-COMPILE_DEPS = [
-  '//lib:CORE_DEPS',
-  '//incubator/api:onos-incubator-api',
-  '//protocols/pcep/server/ctl:onos-protocols-pcep-server-ctl',
-  '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-  '//lib:org.apache.karaf.shell.console',
-  '//cli:onos-cli',
-]
-
-osgi_jar_with_tests (
-  deps = COMPILE_DEPS,
-)
diff --git a/providers/pcep/topology/BUCK b/providers/pcep/topology/BUCK
deleted file mode 100644
index b3daa56..0000000
--- a/providers/pcep/topology/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//apps/pcep-api:onos-apps-pcep-api',
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-    '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
-    '//core/api:onos-api-tests',
-    '//apps/optical-model:onos-apps-optical-model',
-    '//lib:io_netty_netty',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api-tests',
-    '//apps/pcep-api:onos-apps-pcep-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/pcep/tunnel/BUCK b/providers/pcep/tunnel/BUCK
deleted file mode 100644
index 97adbd1..0000000
--- a/providers/pcep/tunnel/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:NETTY',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//apps/pcep-api:onos-apps-pcep-api',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/pcep/pcepio:onos-protocols-pcep-pcepio',
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api',
-    '//protocols/pcep/server/ctl:onos-protocols-pcep-server-ctl',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-    '//lib:io_netty_netty',
-    '//lib:io_netty_netty_transport',
-    '//protocols/pcep/server/api:onos-protocols-pcep-server-api-tests',
-    '//apps/pcep-api:onos-apps-pcep-api-tests',
-    '//incubator/api:onos-incubator-api-tests',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/rest/BUCK b/providers/rest/BUCK
deleted file mode 100644
index b6e2e2b..0000000
--- a/providers/rest/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-BUNDLES = [
-    '//providers/rest/device:onos-providers-rest-device',
-    '//protocols/rest/api:onos-protocols-rest-api',
-    '//protocols/rest/ctl:onos-protocols-rest-ctl',
-    '//lib:jersey-client',
-    '//lib:jersey-security',
-    '//lib:commons-io',
-    '//lib:httpclient-osgi',
-    '//lib:httpcore-osgi',
-]
-
-onos_app (
-    app_name = 'org.onosproject.restsb',
-    title = 'REST Provider',
-    category = 'Provider',
-    url = 'https://wiki.onosproject.org/display/ONOS/REST',
-    included_bundles = BUNDLES,
-    description = 'Provides means for ONOS to discover the existence of a REST API enabled device ' +
-        'or proxy for multiple devices from information given by network configuration.',
-)
-
diff --git a/providers/rest/device/BUCK b/providers/rest/device/BUCK
deleted file mode 100644
index d84b307..0000000
--- a/providers/rest/device/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//protocols/ovsdb/api:onos-protocols-ovsdb-api',
-    '//protocols/ovsdb/rfc:onos-protocols-ovsdb-rfc',
-    '//apps/pcep-api:onos-apps-pcep-api',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/rest/api:onos-protocols-rest-api',
-    '//lib:javax.ws.rs-api',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/snmp/BUCK b/providers/snmp/BUCK
deleted file mode 100644
index 598515d..0000000
--- a/providers/snmp/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-BUNDLES = [
-  '//providers/snmp/device:onos-providers-snmp-device',
-  '//providers/snmp/alarm:onos-providers-snmp-alarm',
-  '//protocols/snmp/api:onos-protocols-snmp-api',
-  '//protocols/snmp/ctl:onos-protocols-snmp-ctl',
-  '//lib:org.apache.servicemix.bundles.snmp4j',
-  '//lib:mibs-rfc',
-  '//lib:snmp-core',
-  '//lib:mibs-net-snmp',
-]
-
-onos_app (
-    app_name = 'org.onosproject.snmp',
-    title = 'SNMP Provider',
-    category = 'Provider',
-    url = 'https://wiki.onosproject.org/display/ONOS/SNMP',
-    included_bundles = BUNDLES,
-    description = 'Provides means for ONOS to discover and trigger the initial handshake procedure ' +
-        'with SNMP enabled devices from information given by network configuration.',
-    required_apps = [ 'org.onosproject.faultmanagement'],
-)
diff --git a/providers/snmp/alarm/BUCK b/providers/snmp/alarm/BUCK
deleted file mode 100644
index a5f0c4b..0000000
--- a/providers/snmp/alarm/BUCK
+++ /dev/null
@@ -1,13 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/snmp/api:onos-protocols-snmp-api',
-    '//protocols/snmp/ctl:onos-protocols-snmp-ctl',
-    '//providers/snmp/device:onos-providers-snmp-device',
-    '//lib:org.apache.servicemix.bundles.snmp4j',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-)
diff --git a/providers/snmp/device/BUCK b/providers/snmp/device/BUCK
deleted file mode 100644
index 317784e..0000000
--- a/providers/snmp/device/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:org.apache.servicemix.bundles.snmp4j',
-    '//lib:snmp-core',
-    '//lib:mibs-net-snmp',
-    '//lib:mibs-rfc',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/snmp/api:onos-protocols-snmp-api',
-    '//protocols/snmp/ctl:onos-protocols-snmp-ctl',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-]
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
diff --git a/providers/tl1/BUCK b/providers/tl1/BUCK
deleted file mode 100644
index 0ccb0ad..0000000
--- a/providers/tl1/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-BUNDLES = [
-    '//providers/tl1/device:onos-providers-tl1-device',
-    '//protocols/tl1/api:onos-protocols-tl1-api',
-    '//protocols/tl1/ctl:onos-protocols-tl1-ctl',
-]
-
-onos_app (
-    app_name = 'org.onosproject.tl1',
-    title = 'TL1 Provider',
-    category = 'Provider',
-    url = 'https://wiki.onosproject.org/display/ONOS/TL1',
-    included_bundles = BUNDLES,
-    description = 'Provides means for ONOS to discover and trigger the initial handshake procedure ' +
-        'with TL1 enable devices from information given by network configuration.',
-)
diff --git a/providers/tl1/device/BUCK b/providers/tl1/device/BUCK
deleted file mode 100644
index 988bfb0..0000000
--- a/providers/tl1/device/BUCK
+++ /dev/null
@@ -1,15 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//incubator/api:onos-incubator-api',
-    '//protocols/tl1/api:onos-protocols-tl1-api',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
diff --git a/providers/xmpp/device/BUCK b/providers/xmpp/device/BUCK
deleted file mode 100644
index 265d928..0000000
--- a/providers/xmpp/device/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:tinder-xmpp',
-    '//protocols/xmpp/core/api:onos-protocols-xmpp-core-api',
-    '//protocols/xmpp/core/ctl:onos-protocols-xmpp-core-ctl',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_ADAPTERS',
-]
-
-osgi_jar_with_tests (
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-)
-
-onos_app (
-    app_name = 'org.onosproject.xmpp.device',
-    title = 'XMPP Device Provider',
-    category = 'Provider',
-    url = 'https://wiki.onosproject.org/display/ONOS/XMPP+as+SBI',
-    description = 'XMPP protocol southbound provider.',
-    required_apps = [
-        'org.onosproject.protocols.xmpp',
-    ]
-)
\ No newline at end of file
diff --git a/tools/build/bazel/generate_workspace.bzl b/tools/build/bazel/generate_workspace.bzl
index 8be53fe..057ab80 100644
--- a/tools/build/bazel/generate_workspace.bzl
+++ b/tools/build/bazel/generate_workspace.bzl
@@ -1,4 +1,4 @@
-# ***** This file was auto-generated at Tue, 23 Oct 2018 17:46:21 GMT. Do not edit this file manually. *****
+# ***** This file was auto-generated at Wed, 24 Oct 2018 19:26:57 GMT. Do not edit this file manually. *****
 # ***** Use onos-lib-gen *****
 
 load("//tools/build/bazel:variables.bzl", "ONOS_GROUP_ID", "ONOS_VERSION")
@@ -1015,9 +1015,9 @@
     if "apache_karaf" not in native.existing_rules():
         java_import_external(
             name = "apache_karaf",
-            jar_sha256 = "ec317bf64c60d81fb17b666fb1c44496e138b8b2e2ffc094e1bae5eedaa9acaa",
+            jar_sha256 = "2c43a844046ea7accbe4e673838b855d438c3f9077e6a900875b267c8c1cd92c",
             licenses = ["notice"],
-            jar_urls = ["http://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.1-base/apache-karaf-offline-4.2.1-base.tar.gz"],        )
+            jar_urls = ["http://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.1-20181024/apache-karaf-offline-4.2.1-20181024.tar.gz"],        )
     if "bndlib" not in native.existing_rules():
         java_import_external(
             name = "bndlib",
@@ -1566,7 +1566,7 @@
 artifact_map["@typesafe_config//:typesafe_config"] = "mvn:com.typesafe:config:jar:1.3.2"
 artifact_map["@validation_api//:validation_api"] = "mvn:javax.validation:validation-api:jar:1.1.0.Final"
 artifact_map["@checkstyle//:checkstyle"] = "mvn:com.puppycrawl.tools:checkstyle:jar:NON-OSGI:8.10"
-artifact_map["@apache_karaf//:apache_karaf"] = "http://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.1-base/apache-karaf-offline-4.2.1-base.tar.gz"
+artifact_map["@apache_karaf//:apache_karaf"] = "http://repo1.maven.org/maven2/org/onosproject/apache-karaf-offline/4.2.1-20181024/apache-karaf-offline-4.2.1-20181024.tar.gz"
 artifact_map["@bndlib//:bndlib"] = "mvn:biz.aQute.bnd:biz.aQute.bndlib:jar:4.0.0"
 artifact_map["@bndexe//:bndexe"] = "mvn:biz.aQute.bnd:biz.aQute.bnd:jar:4.0.0"
 artifact_map["@libthrift//:libthrift"] = "mvn:org.apache.thrift:libthrift:jar:0.11.0"
diff --git a/tools/build/bazel/osgi_java_library.bzl b/tools/build/bazel/osgi_java_library.bzl
index b3497c2..e5065f7 100644
--- a/tools/build/bazel/osgi_java_library.bzl
+++ b/tools/build/bazel/osgi_java_library.bzl
@@ -320,7 +320,7 @@
             executable = True,
             cfg = "host",
             allow_files = True,
-            default = Label("//tools/build/buck-plugin:swagger_generator"),
+            default = Label("//tools/build/swagger:swagger_generator"),
         ),
         "swagger_java": attr.output(),
     },
@@ -344,7 +344,7 @@
             executable = True,
             cfg = "host",
             allow_files = True,
-            default = Label("//tools/build/buck-plugin:swagger_generator"),
+            default = Label("//tools/build/swagger:swagger_generator"),
         ),
         "swagger_json": attr.output(),
     },
diff --git a/tools/build/buck-plugin/BUCK b/tools/build/buck-plugin/BUCK
deleted file mode 100644
index 8593941..0000000
--- a/tools/build/buck-plugin/BUCK
+++ /dev/null
@@ -1,46 +0,0 @@
-# Comment the remote_jar out for local buck development
-remote_jar (
-  name = 'buck-api',
-  out = 'buck.jar',
-  url = 'https://oss.sonatype.org/content/repositories/snapshots/org/onosproject/buck-api/0.1-SNAPSHOT/buck-api-0.1-20161113.012708-6.jar',
-  sha1 = 'da823563b03964eafc9ff76cd721b9253ae473a1',
-  visibility = [],
-)
-
-# Uncomment the prebuilt_jar and copy buck-api to lib/buck.jar for local buck development
-# prebuilt_jar (
-#  name = 'buck-api',
-#  binary_jar = 'lib/buck.jar'
-# )
-
-# Use buck's guava version - 19.0
-remote_jar (
-  name = 'guava',
-  out = 'guava-19.0.jar',
-  url = 'mvn:com.google.guava:guava:jar:19.0',
-  sha1 = '6ce200f6b23222af3d8abb6b6459e6c44f4bb0e9',
-  maven_coords = 'com.google.guava:guava:19.0',
-)
-
-COMPILE = [
-  '//lib:qdox',
-  ':guava',
-  '//lib:bndlib',
-  '//lib:org.apache.felix.scr.bnd'
-]
-
-java_library(
-  name = 'lib',
-  srcs = glob(['src/main/java/**/*.java']),
-  resources = glob(['src/main/resources/**/*']),
-  resources_root = 'src/main/resources',
-  deps = COMPILE,
-  provided_deps = [':buck-api'],
-  visibility = [],
-)
-
-java_binary(
-  name = 'onos',
-  deps = [':lib'],
-  visibility = ['PUBLIC'],
-)
diff --git a/tools/build/buck-plugin/BUILD b/tools/build/buck-plugin/BUILD
deleted file mode 100644
index e8d2c21..0000000
--- a/tools/build/buck-plugin/BUILD
+++ /dev/null
@@ -1,16 +0,0 @@
-SWAGGER_EXECUTABLE = "swagger_generator"
-
-COMPILE_DEPS = JACKSON + [
-    "@com_google_guava_guava//jar",
-    "@qdox//jar",
-    "@org_apache_felix_scr_bnd//jar",
-]
-
-java_binary(
-    name = SWAGGER_EXECUTABLE,
-    srcs = glob(["src/main/java/org/onosproject/onosjar/SwaggerGenerator.java"]),
-    main_class = "org.onosproject.onosjar.SwaggerGenerator",
-    resources = glob(["src/main/resources/registrator.javat"]),
-    visibility = ["//visibility:public"],
-    deps = COMPILE_DEPS,
-)
diff --git a/tools/build/buck-plugin/buck-plugin-install b/tools/build/buck-plugin/buck-plugin-install
deleted file mode 100755
index 15cf0e6..0000000
--- a/tools/build/buck-plugin/buck-plugin-install
+++ /dev/null
@@ -1,14 +0,0 @@
-#!/bin/bash
-
-PLUGINS=$ONOS_ROOT/bin/plugins
-
-set -e
-
-# Build it first
-pluginJar=$(NO_BUCKD=1 onos-buck build //tools/build/buck-plugin:onos --no-cache --show-output | grep onos.jar | cut -d\  -f2)
-
-# Then install it
-mkdir -p $PLUGINS
-cp $ONOS_ROOT/$pluginJar $PLUGINS
-
-ls -l $PLUGINS
diff --git a/tools/build/buck-plugin/buck-plugin-test b/tools/build/buck-plugin/buck-plugin-test
deleted file mode 100755
index cb8fd76..0000000
--- a/tools/build/buck-plugin/buck-plugin-test
+++ /dev/null
@@ -1,3 +0,0 @@
-#!/bin/bash
-
-NO_BUCKD=1 onos-buck build //apps/dhcp/app:onos-apps-dhcp-app --no-cache --show-output
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OSGiWrapper.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OSGiWrapper.java
deleted file mode 100644
index 86c6938..0000000
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OSGiWrapper.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.onosjar;
-
-import aQute.bnd.header.Attrs;
-import aQute.bnd.header.Parameters;
-import aQute.bnd.osgi.Analyzer;
-import aQute.bnd.osgi.Builder;
-import aQute.bnd.osgi.Constants;
-import aQute.bnd.osgi.Descriptors;
-import aQute.bnd.osgi.FileResource;
-import aQute.bnd.osgi.Jar;
-import aQute.bnd.osgi.Packages;
-import aQute.bnd.osgi.Processor;
-import aQute.bnd.osgi.Resource;
-import com.facebook.buck.step.ExecutionContext;
-import com.facebook.buck.step.Step;
-import com.facebook.buck.step.StepExecutionResult;
-import com.google.common.base.MoreObjects;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-import org.apache.felix.scrplugin.bnd.SCRDescriptorBndPlugin;
-import org.codehaus.plexus.util.DirectoryScanner;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.PrintStream;
-import java.nio.file.FileVisitResult;
-import java.nio.file.FileVisitor;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.nio.file.SimpleFileVisitor;
-import java.nio.file.attribute.BasicFileAttributes;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.jar.Manifest;
-import java.util.stream.Collectors;
-
-import static java.nio.file.Files.walkFileTree;
-
-/**
- * BND-based wrapper to convert Buck JARs to OSGi-compatible JARs.
- */
-public class OSGiWrapper implements Step {
-
-    private static final String EMBED_DEPENDENCY = "Embed-Dependency";
-    private static final String EMBEDDED_ARTIFACTS = "Embedded-Artifacts";
-
-    private Path inputJar;
-    private Path outputJar;
-    private Path sourcesDir;
-    private Path classesDir;
-    private List<String> classpath;
-
-    private String bundleName;
-    private String groupId;
-    private String bundleSymbolicName;
-    private String bundleVersion;
-
-    private String importPackages;
-    private String privatePackages;
-    private String dynamicimportPackages;
-    private String embeddedDependencies;
-
-    private String exportPackages;
-    private String includeResources;
-    private Set<String> includedResources = Sets.newHashSet();
-
-    private String bundleDescription;
-    private String bundleLicense;
-
-    private String bundleClasspath;
-
-    private String webContext;
-
-    private PrintStream stderr = System.err;
-
-    public OSGiWrapper(Path inputJar,
-                       Path outputJar,
-                       Path sourcesDir,
-                       Path classesDir,
-                       ImmutableSortedSet<Path> classpath,
-                       String bundleName,
-                       String groupId,
-                       String bundleVersion,
-                       String bundleLicense,
-                       String importPackages,
-                       String exportPackages,
-                       String includeResources,
-                       String webContext,
-                       String dynamicimportPackages,
-                       String embeddedDependencies,
-                       String bundleDescription,
-                       String privatePackages,
-                       String bundleClasspath) {
-        this.inputJar = inputJar;
-        this.sourcesDir = sourcesDir;
-        this.classesDir = classesDir;
-        this.classpath = Lists.newArrayList(
-                classpath.stream().map(Path::toString).collect(Collectors.toList()));
-        if (!this.classpath.contains(inputJar.toString())) {
-            this.classpath.add(0, inputJar.toString());
-        }
-        this.outputJar = outputJar;
-
-        this.bundleName = bundleName;
-        this.groupId = groupId;
-        this.bundleSymbolicName = String.format("%s.%s", groupId, bundleName);
-
-        this.bundleVersion = bundleVersion;
-        this.bundleLicense = bundleLicense;
-        this.bundleDescription = bundleDescription;
-
-        this.importPackages = importPackages;
-        this.privatePackages = privatePackages;
-        this.dynamicimportPackages = dynamicimportPackages;
-        this.embeddedDependencies = embeddedDependencies;
-        this.exportPackages = exportPackages;
-        this.includeResources = includeResources;
-
-        this.webContext = webContext;
-
-        this.bundleClasspath = bundleClasspath;
-    }
-
-    private void setProperties(Analyzer analyzer) {
-
-        analyzer.setProperty(Analyzer.BUNDLE_NAME, bundleName);
-        analyzer.setProperty(Analyzer.BUNDLE_SYMBOLICNAME, bundleSymbolicName);
-        analyzer.setProperty(Analyzer.BUNDLE_VERSION, bundleVersion.replace('-', '.'));
-
-        if (bundleDescription != null) {
-            analyzer.setProperty(Analyzer.BUNDLE_DESCRIPTION, bundleDescription);
-        }
-        if (bundleLicense != null) {
-            analyzer.setProperty(Analyzer.BUNDLE_LICENSE, bundleLicense);
-        }
-
-        //TODO consider using stricter version policy
-        //analyzer.setProperty("-provider-policy", "${range;[===,==+)}");
-        //analyzer.setProperty("-consumer-policy", "${range;[===,==+)}");
-
-        if (privatePackages != null) {
-            analyzer.setProperty(Analyzer.PRIVATE_PACKAGE, privatePackages);
-        }
-        analyzer.setProperty(Analyzer.REMOVEHEADERS, "Private-Package,Include-Resource");
-
-        analyzer.setProperty(Analyzer.DYNAMICIMPORT_PACKAGE,
-                             dynamicimportPackages);
-
-        // TODO include version in export, but not in import
-        analyzer.setProperty(Analyzer.EXPORT_PACKAGE, exportPackages);
-
-        // TODO we may need INCLUDE_RESOURCE, or that might be done by Buck
-        // FIXME NOTE we handle this manually below
-        if (includeResources != null) {
-            analyzer.setProperty(Analyzer.INCLUDE_RESOURCE, includeResources);
-        }
-
-        if (embeddedDependencies != null) {
-            analyzer.setProperty(EMBED_DEPENDENCY, embeddedDependencies);
-        }
-
-        // There are no good defaults so make sure you set the Import-Package
-        analyzer.setProperty(Analyzer.IMPORT_PACKAGE, importPackages);
-
-        if (isWab()) {
-            analyzer.setProperty(Analyzer.WAB, "src/main/webapp/");
-            analyzer.setProperty("Web-ContextPath", webContext);
-            analyzer.setProperty(Analyzer.IMPORT_PACKAGE, importPackages +
-                    ",org.glassfish.jersey.servlet,org.jvnet.mimepull\n");
-        }
-    }
-
-    public boolean execute() {
-        Builder analyzer = new Builder();
-        try {
-
-            Jar jar = new Jar(inputJar.toFile());   // where our data is
-            analyzer.setJar(jar);                   // give bnd the contents
-
-            // You can provide additional class path entries to allow
-            // bnd to pickup export version from the packageinfo file,
-            // Version annotation, or their manifests.
-            analyzer.addClasspath(classpath);
-
-            setProperties(analyzer);
-
-            // Analyze the target JAR first
-            analyzer.analyze();
-
-            // Scan the JAR for Felix SCR annotations and generate XML files
-            Map<String, String> properties = Maps.newHashMap();
-            properties.put("destdir", classesDir.toAbsolutePath().toString());
-            SCRDescriptorBndPlugin scrDescriptorBndPlugin = new SCRDescriptorBndPlugin();
-            scrDescriptorBndPlugin.setProperties(properties);
-            scrDescriptorBndPlugin.setReporter(analyzer);
-            scrDescriptorBndPlugin.analyzeJar(analyzer);
-
-            //Add local packges to jar file.
-            //FIXME removing this call for now; not sure what exactly it's doing
-            //addLocalPackages(new File(classesDir.toString()), analyzer);
-
-            //add resources.
-            if (includeResources != null || embeddedDependencies != null) {
-                doIncludeResources(analyzer);
-            }
-
-            // Repack the JAR as a WAR
-            doWabStaging(analyzer);
-
-            // Calculate the manifest
-            Manifest manifest = analyzer.calcManifest();
-
-            //Build the jar files
-            //FIXME this call conflicts with some of the above
-//            analyzer.build();
-
-            if (analyzer.isOk()) {
-                //add calculated manifest file.
-                analyzer.getJar().setManifest(manifest);
-                if (analyzer.save(outputJar.toFile(), true)) {
-                    log("Saved!\n");
-                } else {
-                    warn("Failed to create jar \n");
-                    return false;
-                }
-            } else {
-                warn("Analyzer Errors:\n%s\n", analyzer.getErrors());
-                return false;
-            }
-
-            analyzer.close();
-
-            return true;
-        } catch (Exception e) {
-            e.printStackTrace();
-            return false;
-        }
-    }
-
-    private static void addLocalPackages(File outputDirectory, Analyzer analyzer) throws IOException {
-        Packages packages = new Packages();
-
-        if (outputDirectory != null && outputDirectory.isDirectory()) {
-            // scan classes directory for potential packages
-            DirectoryScanner scanner = new DirectoryScanner();
-            scanner.setBasedir(outputDirectory);
-            scanner.setIncludes(new String[]
-                                        {"**/*.class"});
-
-            scanner.addDefaultExcludes();
-            scanner.scan();
-
-            String[] paths = scanner.getIncludedFiles();
-            for (int i = 0; i < paths.length; i++) {
-                packages.put(analyzer.getPackageRef(getPackageName(paths[i])));
-            }
-        }
-
-        Packages exportedPkgs = new Packages();
-        Packages privatePkgs = new Packages();
-
-        boolean noprivatePackages = "!*".equals(analyzer.getProperty(Analyzer.PRIVATE_PACKAGE));
-
-        for (Descriptors.PackageRef pkg : packages.keySet()) {
-            // mark all source packages as private by default (can be overridden by export list)
-            privatePkgs.put(pkg);
-
-            // we can't export the default package (".") and we shouldn't export internal packages
-            String fqn = pkg.getFQN();
-            if (noprivatePackages || !(".".equals(fqn) || fqn.contains(".internal") || fqn.contains(".impl"))) {
-                exportedPkgs.put(pkg);
-            }
-        }
-
-        Properties properties = analyzer.getProperties();
-        String exported = properties.getProperty(Analyzer.EXPORT_PACKAGE);
-        if (exported == null) {
-            if (!properties.containsKey(Analyzer.EXPORT_CONTENTS)) {
-                // no -exportcontents overriding the exports, so use our computed list
-                for (Attrs attrs : exportedPkgs.values()) {
-                    attrs.put(Constants.SPLIT_PACKAGE_DIRECTIVE, "merge-first");
-                }
-                properties.setProperty(Analyzer.EXPORT_PACKAGE, Processor.printClauses(exportedPkgs));
-            } else {
-                // leave Export-Package empty (but non-null) as we have -exportcontents
-                properties.setProperty(Analyzer.EXPORT_PACKAGE, "");
-            }
-        }
-
-        String internal = properties.getProperty(Analyzer.PRIVATE_PACKAGE);
-        if (internal == null) {
-            if (!privatePkgs.isEmpty()) {
-                for (Attrs attrs : privatePkgs.values()) {
-                    attrs.put(Constants.SPLIT_PACKAGE_DIRECTIVE, "merge-first");
-                }
-                properties.setProperty(Analyzer.PRIVATE_PACKAGE, Processor.printClauses(privatePkgs));
-            } else {
-                // if there are really no private packages then use "!*" as this will keep the Bnd Tool happy
-                properties.setProperty(Analyzer.PRIVATE_PACKAGE, "!*");
-            }
-        }
-    }
-
-    private static String getPackageName(String filename) {
-        int n = filename.lastIndexOf(File.separatorChar);
-        return n < 0 ? "." : filename.substring(0, n).replace(File.separatorChar, '.');
-    }
-
-    private boolean isWab() {
-        return webContext != null;
-    }
-
-    private void doWabStaging(Analyzer analyzer) throws Exception {
-        if (!isWab()) {
-            return;
-        }
-        String wab = analyzer.getProperty(analyzer.WAB);
-        Jar dot = analyzer.getJar();
-
-        log("wab %s", wab);
-
-        if (bundleClasspath != null) {
-            analyzer.setBundleClasspath("WEB-INF/classes," + bundleClasspath);
-        }
-
-        Set<String> paths = new HashSet<>(dot.getResources().keySet());
-
-        for (String path : paths) {
-            if (path.indexOf('/') > 0 && !Character.isUpperCase(path.charAt(0))) {
-                log("wab: moving: %s", path);
-                dot.rename(path, "WEB-INF/classes/" + path);
-            }
-        }
-
-        Path wabRoot = Paths.get(wab);
-        includeFiles(dot, null, wabRoot.toString());
-    }
-
-    /**
-     * Parse the Bundle-Includes header. Files in the bundles Include header are
-     * included in the jar. The source can be a directory or a file.
-     *
-     * @throws Exception
-     */
-    private void doIncludeResources(Analyzer analyzer) throws Exception {
-        String includes = analyzer.getProperty(Analyzer.INCLUDE_RESOURCE);
-        if (includes == null) {
-            return;
-        }
-        Parameters clauses = analyzer.parseHeader(includes);
-        Jar jar = analyzer.getJar();
-
-        for (Map.Entry<String, Attrs> entry : clauses.entrySet()) {
-            String name = entry.getKey();
-            Map<String, String> extra = entry.getValue();
-            // TODO consider doing something with extras
-
-            String[] parts = name.split("\\s*=\\s*");
-            String source = parts[0];
-            String destination = parts[0];
-            if (parts.length == 2) {
-                source = parts[1];
-            }
-
-            includeFiles(jar, destination, source);
-        }
-    }
-
-    private void includeFiles(Jar jar, String destinationRoot, String sourceRoot)
-            throws IOException {
-
-        Path classesBasedPath = classesDir.resolve(sourceRoot);
-        Path sourceBasedPath = sourcesDir.resolve(sourceRoot);
-
-        File classFile = classesBasedPath.toFile();
-        File sourceFile = sourceBasedPath.toFile();
-
-        if (classFile.isFile()) {
-            addFileToJar(jar, destinationRoot, classesBasedPath.toAbsolutePath().toString());
-        } else if (sourceFile.isFile()) {
-            addFileToJar(jar, destinationRoot, sourceBasedPath.toAbsolutePath().toString());
-        } else if (classFile.isDirectory()) {
-            includeDirectory(jar, destinationRoot, classesBasedPath);
-        } else if (sourceFile.isDirectory()) {
-            includeDirectory(jar, destinationRoot, sourceBasedPath);
-        } else {
-            warn("Skipping resource in bundle %s: %s (File Not Found)\n",
-                 bundleSymbolicName, sourceRoot);
-        }
-    }
-
-    private void includeDirectory(Jar jar, String destinationRoot, Path sourceRoot)
-            throws IOException {
-        // iterate through sources
-        // put each source on the jar
-        FileVisitor<Path> visitor = new SimpleFileVisitor<Path>() {
-            @Override
-            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
-                Path relativePath = sourceRoot.relativize(file);
-                String destination = destinationRoot != null ?
-                        destinationRoot + "/" + relativePath.toString() : //TODO
-                        relativePath.toString();
-
-                addFileToJar(jar, destination, file.toAbsolutePath().toString());
-                return FileVisitResult.CONTINUE;
-            }
-        };
-
-        walkFileTree(sourceRoot, visitor);
-    }
-
-    private boolean addFileToJar(Jar jar, String destination, String sourceAbsPath) {
-        if (includedResources.contains(sourceAbsPath)) {
-            log("Skipping already included resource: %s\n", sourceAbsPath);
-            return false;
-        }
-        File file = new File(sourceAbsPath);
-        if (!file.isFile()) {
-            throw new RuntimeException(
-                    String.format("Skipping non-existent file: %s\n", sourceAbsPath));
-        }
-        Resource resource = new FileResource(file);
-        if (jar.getResource(destination) != null) {
-            warn("Skipping duplicate resource: %s\n", destination);
-            return false;
-        }
-        jar.putResource(destination, resource);
-        includedResources.add(sourceAbsPath);
-        log("Adding resource: %s\n", destination);
-        return true;
-    }
-
-    private void log(String format, Object... objects) {
-        //System.err.printf(format, objects);
-    }
-
-    private void warn(String format, Object... objects) {
-        stderr.printf(format, objects);
-    }
-
-    @Override
-    public String toString() {
-        return MoreObjects.toStringHelper(this)
-                .add("inputJar", inputJar)
-                .add("outputJar", outputJar)
-                .add("classpath", classpath)
-                .add("bundleName", bundleName)
-                .add("groupId", groupId)
-                .add("bundleSymbolicName", bundleSymbolicName)
-                .add("bundleVersion", bundleVersion)
-                .add("bundleDescription", bundleDescription)
-                .add("bundleLicense", bundleLicense)
-                .toString();
-    }
-
-    @Override
-    public StepExecutionResult execute(ExecutionContext executionContext)
-            throws IOException, InterruptedException {
-        stderr = executionContext.getStdErr();
-        boolean success = execute();
-        stderr = System.err;
-        return success ? StepExecutionResult.SUCCESS : StepExecutionResult.ERROR;
-    }
-
-    @Override
-    public String getShortName() {
-        return "osgiwrap";
-    }
-
-    @Override
-    public String getDescription(ExecutionContext executionContext) {
-        return "osgiwrap"; //FIXME
-    }
-}
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
deleted file mode 100644
index b9ec3d6..0000000
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJar.java
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.onosjar;
-
-import com.facebook.buck.jvm.java.CompileToJarStepFactory;
-import com.facebook.buck.jvm.java.DefaultJavaLibrary;
-import com.facebook.buck.jvm.java.HasMavenCoordinates;
-import com.facebook.buck.jvm.java.JavaLibrary;
-import com.facebook.buck.jvm.java.MavenPublishable;
-import com.facebook.buck.model.BuildTarget;
-import com.facebook.buck.rules.AddToRuleKey;
-import com.facebook.buck.rules.BuildRule;
-import com.facebook.buck.rules.BuildRuleParams;
-import com.facebook.buck.rules.SourcePath;
-import com.facebook.buck.rules.SourcePathResolver;
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedMap;
-import com.google.common.collect.ImmutableSortedSet;
-
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.URL;
-import java.nio.file.Path;
-import java.security.DigestInputStream;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.util.Set;
-import java.util.regex.Pattern;
-
-/**
- * Implementation of a build rule that generates a onosjar.json file for a set
- * of Java sources.
- */
-public class OnosJar extends DefaultJavaLibrary
-        implements MavenPublishable{
-
-    // Inject the SHA of this rule's jar into the rule key
-    private static String RULE_VERSION;
-    static {
-        URL pluginJarLocation = OnosJar.class.getProtectionDomain().getCodeSource().getLocation();
-        try {
-            MessageDigest md = MessageDigest.getInstance("SHA");
-            DigestInputStream dis = new DigestInputStream(pluginJarLocation.openStream(), md);
-            // Consume the InputStream...
-            while (dis.read() != -1);
-            RULE_VERSION = String.format("%032x", new BigInteger(1, md.digest()));
-        } catch (NoSuchAlgorithmException | IOException e) {
-            System.err.println("Failed to compute hash for OnosJar rule");
-            RULE_VERSION = "nil";
-            //TODO consider bailing here instead
-        }
-    }
-    @AddToRuleKey
-    private final String ruleVersion = RULE_VERSION;
-
-    @AddToRuleKey
-    final Optional<String> webContext;
-
-    @AddToRuleKey
-    final Optional<String> apiTitle;
-
-    @AddToRuleKey
-    final Optional<String> apiVersion;
-
-    @AddToRuleKey
-    final Optional<String> apiPackage;
-
-    @AddToRuleKey
-    final Optional<String> apiDescription;
-
-    @AddToRuleKey
-    final Optional<ImmutableSortedMap<String, SourcePath>> includedResources;
-
-    private final ImmutableSortedSet<HasMavenCoordinates> mavenDeps;
-
-    public OnosJar(BuildRuleParams params,
-                   SourcePathResolver resolver,
-                   Set<? extends SourcePath> srcs,
-                   Set<? extends SourcePath> resources,
-                   Optional<Path> generatedSourceFolder,
-                   Optional<SourcePath> proguardConfig,
-                   ImmutableList<String> postprocessClassesCommands,
-                   ImmutableSortedSet<BuildRule> exportedDeps,
-                   ImmutableSortedSet<BuildRule> providedDeps,
-                   SourcePath abiJar, boolean trackClassUsage,
-                   ImmutableSet<Path> additionalClasspathEntries,
-                   CompileToJarStepFactory compileStepFactory,
-                   Optional<Path> resourcesRoot,
-                   Optional<SourcePath> manifestFile,
-                   Optional<String> mavenCoords,
-                   ImmutableSortedSet<BuildTarget> tests,
-                   ImmutableSet<Pattern> classesToRemoveFromJar,
-                   Optional<String> webContext,
-                   Optional<String> apiTitle,
-                   Optional<String> apiVersion,
-                   Optional<String> apiPackage,
-                   Optional<String> apiDescription,
-                   Optional<ImmutableSortedMap<String, SourcePath>> includedResources) {
-        super(params, resolver, srcs, resources, generatedSourceFolder,
-              proguardConfig, postprocessClassesCommands, exportedDeps,
-              providedDeps, abiJar, trackClassUsage, additionalClasspathEntries,
-              compileStepFactory, resourcesRoot, manifestFile, mavenCoords,
-              tests, classesToRemoveFromJar);
-        this.webContext = webContext;
-        this.apiTitle = apiTitle;
-        this.apiVersion = apiVersion;
-        this.apiPackage = apiPackage;
-        this.apiDescription = apiDescription;
-        this.includedResources = includedResources;
-        this.mavenDeps = computeMavenDeps();
-    }
-
-    private ImmutableSortedSet<HasMavenCoordinates> computeMavenDeps() {
-        ImmutableSortedSet.Builder<HasMavenCoordinates> mavenDeps = ImmutableSortedSet.naturalOrder();
-        for (JavaLibrary javaLibrary : getTransitiveClasspathDeps()) {
-            if (this.equals(javaLibrary)) {
-                // no need to include ourself
-                continue;
-            } else if (HasMavenCoordinates.MAVEN_COORDS_PRESENT_PREDICATE.apply(javaLibrary)) {
-                mavenDeps.add(javaLibrary);
-                //FIXME BOC do we always want to exclude all of a maven jar's dependencies? probably.
-                mavenDeps.addAll(javaLibrary.getTransitiveClasspathDeps());
-            }
-        }
-        return mavenDeps.build();
-    }
-
-    @Override
-    public Iterable<HasMavenCoordinates> getMavenDeps() {
-        return mavenDeps;
-    }
-
-    @Override
-    public Iterable<BuildRule> getPackagedDependencies() {
-        //FIXME this is not supported at the moment
-        return ImmutableList.of();
-    }
-
-    @Override
-    public Optional<Path> getPomTemplate() {
-        //FIXME we should consider supporting this
-        return Optional.absent();
-    }
-}
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
deleted file mode 100644
index 3f27760..0000000
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarDescription.java
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.onosjar;
-
-import com.facebook.buck.cli.BuckConfig;
-import com.facebook.buck.jvm.java.CalculateAbi;
-import com.facebook.buck.jvm.java.DefaultJavaLibrary;
-import com.facebook.buck.jvm.java.JavaBuckConfig;
-import com.facebook.buck.jvm.java.JavaLibrary;
-import com.facebook.buck.jvm.java.JavaLibraryDescription;
-import com.facebook.buck.jvm.java.JavaOptions;
-import com.facebook.buck.jvm.java.JavaSourceJar;
-import com.facebook.buck.jvm.java.JavacOptions;
-import com.facebook.buck.jvm.java.JavacOptionsAmender;
-import com.facebook.buck.jvm.java.JavacOptionsFactory;
-import com.facebook.buck.jvm.java.JavacToJarStepFactory;
-import com.facebook.buck.jvm.java.JavadocJar;
-import com.facebook.buck.jvm.java.MavenUberJar;
-import com.facebook.buck.maven.AetherUtil;
-import com.facebook.buck.model.BuildTarget;
-import com.facebook.buck.model.Flavor;
-import com.facebook.buck.model.Flavored;
-import com.facebook.buck.model.ImmutableFlavor;
-import com.facebook.buck.parser.NoSuchBuildTargetException;
-import com.facebook.buck.rules.BuildRule;
-import com.facebook.buck.rules.BuildRuleParams;
-import com.facebook.buck.rules.BuildRuleResolver;
-import com.facebook.buck.rules.BuildRuleType;
-import com.facebook.buck.rules.BuildRules;
-import com.facebook.buck.rules.BuildTargetSourcePath;
-import com.facebook.buck.rules.Description;
-import com.facebook.buck.rules.SourcePath;
-import com.facebook.buck.rules.SourcePathResolver;
-import com.facebook.buck.rules.SourcePaths;
-import com.facebook.buck.rules.TargetGraph;
-import com.google.common.base.Function;
-import com.google.common.base.Optional;
-import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedMap;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
-
-import java.nio.file.Path;
-import java.util.List;
-
-import static com.facebook.buck.jvm.common.ResourceValidator.validateResources;
-
-/**
- * Description for the onos_jar rules.
- *
- * Currently, this only does Swagger generation.
- */
-public class OnosJarDescription implements Description<OnosJarDescription.Arg>, Flavored {
-    public static final BuildRuleType TYPE = BuildRuleType.of("onos_jar");
-    public static final Flavor NON_OSGI_JAR = ImmutableFlavor.of("non-osgi");
-
-    public static final ImmutableSet<Flavor> SUPPORTED_FLAVORS = ImmutableSet.of(
-            JavaLibrary.SRC_JAR,
-            JavaLibrary.MAVEN_JAR,
-            JavaLibrary.JAVADOC_JAR,
-            NON_OSGI_JAR);
-
-    private final JavacOptions defaultJavacOptions;
-    private final JavaOptions defaultJavaOptions;
-
-    public OnosJarDescription(BuckConfig config) {
-        JavaBuckConfig javaConfig = new JavaBuckConfig(config);
-        defaultJavacOptions = javaConfig.getDefaultJavacOptions();
-        defaultJavaOptions = javaConfig.getDefaultJavaOptions();
-    }
-
-    @Override
-    public BuildRuleType getBuildRuleType() {
-        return TYPE;
-    }
-
-    @Override
-    public Arg createUnpopulatedConstructorArg() {
-        return new Arg();
-    }
-
-    @Override
-    public <A extends Arg> BuildRule createBuildRule(TargetGraph targetGraph,
-                                                     BuildRuleParams params,
-                                                     BuildRuleResolver resolver,
-                                                     A args)
-            throws NoSuchBuildTargetException {
-
-
-        SourcePathResolver pathResolver = new SourcePathResolver(resolver);
-        BuildTarget target = params.getBuildTarget();
-
-        // We know that the flavour we're being asked to create is valid, since the check is done when
-        // creating the action graph from the target graph.
-
-        ImmutableSortedSet<Flavor> flavors = target.getFlavors();
-        BuildRuleParams paramsWithMavenFlavor = null;
-
-        if (flavors.contains(JavaLibrary.MAVEN_JAR)) {
-            paramsWithMavenFlavor = params;
-
-            // Maven rules will depend upon their vanilla versions, so the latter have to be constructed
-            // without the maven flavor to prevent output-path conflict
-            params = params.copyWithBuildTarget(
-                    params.getBuildTarget().withoutFlavors(ImmutableSet.of(JavaLibrary.MAVEN_JAR)));
-        }
-
-        if (flavors.contains(JavaLibrary.SRC_JAR)) {
-            args.mavenCoords = args.mavenCoords.transform(
-                    new Function<String, String>() {
-                        @Override
-                        public String apply(String input) {
-                            return AetherUtil.addClassifier(input, AetherUtil.CLASSIFIER_SOURCES);
-                        }
-                    });
-
-            if (!flavors.contains(JavaLibrary.MAVEN_JAR)) {
-                return new JavaSourceJar(
-                        params,
-                        pathResolver,
-                        args.srcs.get(),
-                        args.mavenCoords);
-            } else {
-                return MavenUberJar.SourceJar.create(
-                        Preconditions.checkNotNull(paramsWithMavenFlavor),
-                        pathResolver,
-                        args.srcs.get(),
-                        args.mavenCoords,
-                        Optional.absent()); //FIXME
-            }
-        }
-
-        if (flavors.contains(JavaLibrary.JAVADOC_JAR)) {
-            args.mavenCoords = args.mavenCoords.transform(
-                    new Function<String, String>() {
-                        @Override
-                        public String apply(String input) {
-                            return AetherUtil.addClassifier(input, AetherUtil.CLASSIFIER_JAVADOC);
-                        }
-                    });
-
-            JavadocJar.JavadocArgs.Builder javadocArgs = JavadocJar.JavadocArgs.builder()
-                    .addArg("-windowtitle", target.getShortName())
-                    .addArg("-link", "http://docs.oracle.com/javase/8/docs/api")
-                    .addArg("-tag", "onos.rsModel:a:\"onos model\""); //FIXME from buckconfig + rule
-
-            final ImmutableSortedMap.Builder<SourcePath, Path> javadocFiles = ImmutableSortedMap.naturalOrder();
-            if (args.javadocFiles.isPresent()) {
-                for (SourcePath path : args.javadocFiles.get()) {
-                    javadocFiles.put(path,
-                                     JavadocJar.getDocfileWithPath(pathResolver, path, args.javadocFilesRoot.orNull()));
-                }
-            }
-
-
-            if (!flavors.contains(JavaLibrary.MAVEN_JAR)) {
-                return new JavadocJar(
-                        params,
-                        pathResolver,
-                        args.srcs.get(),
-                        javadocFiles.build(),
-                        javadocArgs.build(),
-                        args.mavenCoords);
-            } else {
-                return MavenUberJar.MavenJavadocJar.create(
-                        Preconditions.checkNotNull(paramsWithMavenFlavor),
-                        pathResolver,
-                        args.srcs.get(),
-                        javadocFiles.build(),
-                        javadocArgs.build(),
-                        args.mavenCoords,
-                        Optional.absent()); //FIXME
-            }
-        }
-
-        JavacOptions javacOptions = JavacOptionsFactory.create(
-                defaultJavacOptions,
-                params,
-                resolver,
-                pathResolver,
-                args
-        );
-
-        BuildTarget abiJarTarget = params.getBuildTarget().withAppendedFlavors(CalculateAbi.FLAVOR);
-
-        ImmutableSortedSet<BuildRule> exportedDeps = resolver.getAllRules(args.exportedDeps.get());
-
-        // Build the resources string
-        List<String> resourceMappings = Lists.newArrayList();
-
-        if (args.includeResources.isPresent()) {
-            args.includeResources.get().entrySet().forEach(p ->
-                resourceMappings.add(String.format("%s=%s", p.getKey(), p.getValue())));
-        }
-
-        if (args.apiTitle.isPresent()) {
-            resourceMappings.add("WEB-INF/classes/apidoc/swagger.json=swagger.json");
-        }
-
-        Optional<String> includedResourcesString = Optional.of(String.join(",", resourceMappings));
-        final DefaultJavaLibrary defaultJavaLibrary;
-        if (!flavors.contains(NON_OSGI_JAR)) {
-            defaultJavaLibrary =
-                    resolver.addToIndex(
-                            new OnosJar(
-                                    params.appendExtraDeps(
-                                            Iterables.concat(
-                                                    BuildRules.getExportedRules(
-                                                            Iterables.concat(
-                                                                    params.getDeclaredDeps().get(),
-                                                                    exportedDeps,
-                                                                    resolver.getAllRules(args.providedDeps.get()))),
-                                                    pathResolver.filterBuildRuleInputs(
-                                                            javacOptions.getInputs(pathResolver)))),
-                                    pathResolver,
-                                    args.srcs.get(),
-                                    validateResources(
-                                            pathResolver,
-                                            params.getProjectFilesystem(),
-                                            args.resources.get()),
-                                    javacOptions.getGeneratedSourceFolderName(),
-                                    args.proguardConfig.transform(
-                                            SourcePaths.toSourcePath(params.getProjectFilesystem())),
-                                    args.postprocessClassesCommands.get(), // FIXME this should be forbidden
-                                    exportedDeps,
-                                    resolver.getAllRules(args.providedDeps.get()),
-                                    new BuildTargetSourcePath(abiJarTarget),
-                                    javacOptions.trackClassUsage(),
-                                /* additionalClasspathEntries */ ImmutableSet.<Path>of(),
-                                    new OnosJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY,
-                                                           args.webContext, args.apiTitle, args.apiVersion,
-                                                           args.apiPackage, args.apiDescription, args.resources,
-                                                           args.groupId, args.bundleName, args.bundleVersion,
-                                                           args.bundleLicense, args.bundleDescription, args.importPackages,
-                                                           args.exportPackages, includedResourcesString,
-                                                           args.dynamicimportPackages, args.privatePackages, args.embeddedDependencies, args.bundleClasspath),
-                                    args.resourcesRoot,
-                                    args.manifestFile,
-                                    args.mavenCoords,
-                                    args.tests.get(),
-                                    javacOptions.getClassesToRemoveFromJar(),
-                                    args.webContext,
-                                    args.apiTitle,
-                                    args.apiVersion,
-                                    args.apiPackage,
-                                    args.apiDescription,
-                                    args.includeResources));
-        } else {
-            defaultJavaLibrary =
-                    resolver.addToIndex(
-                            new DefaultJavaLibrary(
-                                    params.appendExtraDeps(
-                                            Iterables.concat(
-                                                    BuildRules.getExportedRules(
-                                                            Iterables.concat(
-                                                                    params.getDeclaredDeps().get(),
-                                                                    exportedDeps,
-                                                                    resolver.getAllRules(args.providedDeps.get()))),
-                                                    pathResolver.filterBuildRuleInputs(
-                                                            javacOptions.getInputs(pathResolver)))),
-                                    pathResolver,
-                                    args.srcs.get(),
-                                    validateResources(
-                                            pathResolver,
-                                            params.getProjectFilesystem(),
-                                            args.resources.get()),
-                                    javacOptions.getGeneratedSourceFolderName(),
-                                    args.proguardConfig.transform(
-                                            SourcePaths.toSourcePath(params.getProjectFilesystem())),
-                                    args.postprocessClassesCommands.get(),
-                                    exportedDeps,
-                                    resolver.getAllRules(args.providedDeps.get()),
-                                    new BuildTargetSourcePath(abiJarTarget),
-                                    javacOptions.trackClassUsage(),
-                                    /* additionalClasspathEntries */ ImmutableSet.<Path>of(),
-                                    new JavacToJarStepFactory(javacOptions, JavacOptionsAmender.IDENTITY),
-                                    args.resourcesRoot,
-                                    args.manifestFile,
-                                    args.mavenCoords,
-                                    args.tests.get(),
-                                    javacOptions.getClassesToRemoveFromJar()));
-        }
-
-        resolver.addToIndex(
-                CalculateAbi.of(
-                        abiJarTarget,
-                        pathResolver,
-                        params,
-                        new BuildTargetSourcePath(defaultJavaLibrary.getBuildTarget())));
-
-        return defaultJavaLibrary;
-    }
-
-    @Override
-    public boolean hasFlavors(ImmutableSet<Flavor> flavors) {
-        return SUPPORTED_FLAVORS.containsAll(flavors);
-    }
-
-    public static class Arg extends JavaLibraryDescription.Arg {
-        public Optional<String> webContext;
-        public Optional<String> apiTitle;
-        public Optional<String> apiVersion;
-        public Optional<String> apiPackage;
-        public Optional<String> apiDescription;
-
-        public Optional<String> groupId;
-        public Optional<String> bundleName;
-        public Optional<String> bundleVersion;
-        public Optional<String> bundleLicense;
-        public Optional<String> bundleDescription;
-
-        public Optional<String> importPackages;
-        public Optional<String> privatePackages;
-        public Optional<String> exportPackages;
-        public Optional<ImmutableSortedMap<String, SourcePath>> includeResources;
-        public Optional<String> dynamicimportPackages;
-        public Optional<String> embeddedDependencies;
-        public Optional<String> bundleClasspath;
-    }
-}
\ No newline at end of file
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarStepFactory.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarStepFactory.java
deleted file mode 100644
index 6550d89..0000000
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/OnosJarStepFactory.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.onosjar;
-
-import com.facebook.buck.io.ProjectFilesystem;
-import com.facebook.buck.jvm.core.SuggestBuildRules;
-import com.facebook.buck.jvm.java.ClassUsageFileWriter;
-import com.facebook.buck.jvm.java.JarDirectoryStep;
-import com.facebook.buck.jvm.java.JavacOptions;
-import com.facebook.buck.jvm.java.JavacOptionsAmender;
-import com.facebook.buck.jvm.java.JavacToJarStepFactory;
-import com.facebook.buck.model.BuildTarget;
-import com.facebook.buck.rules.BuildContext;
-import com.facebook.buck.rules.BuildableContext;
-import com.facebook.buck.rules.SourcePath;
-import com.facebook.buck.rules.SourcePathResolver;
-import com.facebook.buck.step.Step;
-import com.facebook.buck.step.fs.CopyStep;
-import com.google.common.base.Optional;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedSet;
-
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-/**
- * Creates the list of build steps for the onos_jar rules.
- */
-public class OnosJarStepFactory extends JavacToJarStepFactory {
-
-    private static final String DEFINITIONS = "/definitions/";
-    private final String webContext;
-    private final String apiTitle;
-    private final String apiVersion;
-    private final String apiPackage;
-    private final String apiDescription;
-    private final Optional<ImmutableSortedSet<SourcePath>> resources;
-    private final String groupId;
-    private final String bundleName;
-    private final String bundleVersion;
-    private final String bundleLicense;
-    private final String bundleDescription;
-    private final String importPackages;
-    private final String privatePackages;
-    private final String exportPackages;
-    private final String includeResources;
-    private final String dynamicimportPackages;
-    private final String embeddedDependencies;
-    private final String bundleClasspath;
-
-    public OnosJarStepFactory(JavacOptions javacOptions,
-                              JavacOptionsAmender amender,
-                              Optional<String> webContext,
-                              Optional<String> apiTitle,
-                              Optional<String> apiVersion,
-                              Optional<String> apiPackage,
-                              Optional<String> apiDescription,
-                              Optional<ImmutableSortedSet<SourcePath>> resources,
-                              Optional<String> groupId,
-                              Optional<String> bundleName,
-                              Optional<String> bundleVersion,
-                              Optional<String> bundleLicense,
-                              Optional<String> bundleDescription,
-                              Optional<String> importPackages,
-                              Optional<String> exportPackages,
-                              Optional<String> includeResources,
-                              Optional<String> dynamicimportPackages,
-                              Optional<String> privatePackages,
-                              Optional<String> embeddedDependencies,
-                              Optional<String> bundleClasspath) {
-        super(javacOptions, amender);
-        this.bundleDescription = processParameter(bundleDescription);
-        this.importPackages = processParameter(importPackages);
-        this.privatePackages = processParameter(privatePackages);
-        this.exportPackages = processParameter(exportPackages);
-        this.includeResources = processParameter(includeResources);
-        this.dynamicimportPackages = processParameter(dynamicimportPackages);
-        this.groupId = processParameter(groupId);
-        this.bundleName = processParameter(bundleName);
-        this.bundleVersion = processParameter(bundleVersion);
-        this.bundleLicense = processParameter(bundleLicense);
-        this.webContext = processParameter(webContext);
-        this.apiTitle = processParameter(apiTitle);
-        this.apiVersion = processParameter(apiVersion);
-        this.apiPackage = processParameter(apiPackage);
-        this.apiDescription = processParameter(apiDescription);
-        this.resources = resources;
-        this.embeddedDependencies = processParameter(embeddedDependencies);
-        this.bundleClasspath = processParameter(bundleClasspath);
-    }
-
-    private String processParameter(Optional<String> p) {
-        return !p.isPresent() || p.get().equals("NONE") ? null : p.get();
-    }
-
-    @Override
-    public void createCompileToJarStep(BuildContext context,
-                                       ImmutableSortedSet<Path> sourceFilePaths,
-                                       BuildTarget invokingRule,
-                                       SourcePathResolver resolver,
-                                       ProjectFilesystem filesystem,
-                                       ImmutableSortedSet<Path> declaredClasspathEntries,
-                                       Path outputDirectory,
-                                       Optional<Path> workingDirectory,
-                                       Path pathToSrcsList,
-                                       Optional<SuggestBuildRules> suggestBuildRules,
-                                       ImmutableList<String> postprocessClassesCommands,
-                                       ImmutableSortedSet<Path> entriesToJar,
-                                       Optional<String> mainClass,
-                                       Optional<Path> manifestFile,
-                                       Path outputJar,
-                                       ClassUsageFileWriter usedClassesFileWriter,
-                                       ImmutableList.Builder<Step> steps,
-                                       BuildableContext buildableContext,
-                                       ImmutableSet<Pattern> classesToRemoveFromJar) {
-
-        ImmutableSet.Builder<Path> sourceFilePathBuilder = ImmutableSet.builder();
-        sourceFilePathBuilder.addAll(sourceFilePaths);
-
-        ImmutableSet.Builder<Pattern> blacklistBuilder = ImmutableSet.builder();
-        blacklistBuilder.addAll(classesToRemoveFromJar);
-
-        // precompilation steps
-        //   - generate sources
-        //     add all generated sources ot pathToSrcsList
-        if (webContext != null && apiTitle != null && resources.isPresent()) {
-            ImmutableSortedSet<Path> resourceFilePaths = findSwaggerModelDefs(resolver, resources.get());
-            blacklistBuilder.addAll(resourceFilePaths.stream()
-                                            .map(rp -> Pattern.compile(rp.getFileName().toString(), Pattern.LITERAL))
-                                            .collect(Collectors.toSet()));
-            Path genSourcesOutput = workingDirectory.get();
-
-            SwaggerStep swaggerStep = new SwaggerStep(filesystem, sourceFilePaths, resourceFilePaths,
-                                                      genSourcesOutput, outputDirectory,
-                                                      webContext, apiTitle, apiVersion,
-                                                      apiPackage, apiDescription);
-            sourceFilePathBuilder.add(swaggerStep.apiRegistratorPath());
-            steps.add(swaggerStep);
-
-//            steps.addAll(sourceFilePaths.stream()
-//                    .filter(sp -> sp.startsWith("src/main/webapp/"))
-//                    .map(sp -> CopyStep.forFile(filesystem, sp, outputDirectory))
-//                    .iterator());
-        }
-
-        createCompileStep(context,
-                          ImmutableSortedSet.copyOf(sourceFilePathBuilder.build()),
-                          invokingRule,
-                          resolver,
-                          filesystem,
-                          declaredClasspathEntries,
-                          outputDirectory,
-                          workingDirectory,
-                          pathToSrcsList,
-                          suggestBuildRules,
-                          usedClassesFileWriter,
-                          steps,
-                          buildableContext);
-
-        // post compilation steps
-
-
-        // FIXME BOC: add mechanism to inject new Steps
-        //context.additionalStepFactory(JavaStep.class);
-
-        // build the jar
-        steps.add(new JarDirectoryStep(filesystem,
-                                       outputJar,
-                                       ImmutableSortedSet.of(outputDirectory),
-                                       mainClass.orNull(),
-                                       manifestFile.orNull(),
-                                       true,
-                                       blacklistBuilder.build()));
-
-        OSGiWrapper osgiStep = new OSGiWrapper(
-                outputJar, //input jar
-                outputJar, //Paths.get(outputJar.toString() + ".jar"), //output jar
-                invokingRule.getBasePath(), // sources dir
-                outputDirectory, // classes dir
-                declaredClasspathEntries, // classpath
-                bundleName, // bundle name
-                groupId, // groupId
-                bundleVersion, // bundle version
-                bundleLicense, // bundle license
-                importPackages, // import packages
-                exportPackages, // export packages
-                includeResources, // include resources
-                webContext, // web context
-                dynamicimportPackages, // dynamic import packages
-                embeddedDependencies, // embedded dependencies
-                bundleDescription,  // bundle description
-                privatePackages, // private packages
-                bundleClasspath // bundle classpath
-        );
-        steps.add(osgiStep);
-
-        //steps.add(CopyStep.forFile(filesystem, Paths.get(outputJar.toString() + ".jar"), outputJar));
-
-    }
-
-    private ImmutableSortedSet<Path> findSwaggerModelDefs(SourcePathResolver resolver,
-                                                          ImmutableSortedSet<SourcePath> resourcePaths) {
-        if (resourcePaths == null) {
-            return ImmutableSortedSet.of();
-        }
-        return ImmutableSortedSet.copyOf(resourcePaths.stream()
-                                                 .filter(sp -> sp.toString().contains(DEFINITIONS))
-                                                 .map(resolver::getRelativePath)
-                                                 .collect(Collectors.toList()));
-    }
-}
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/ProjectJavadocDescription.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/ProjectJavadocDescription.java
deleted file mode 100644
index 12cf48e..0000000
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/ProjectJavadocDescription.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.onosjar;
-
-import com.facebook.buck.cli.BuckConfig;
-import com.facebook.buck.jvm.java.JavaLibrary;
-import com.facebook.buck.jvm.java.JavadocJar;
-import com.facebook.buck.model.BuildTarget;
-import com.facebook.buck.model.Flavor;
-import com.facebook.buck.model.Flavored;
-import com.facebook.buck.model.Pair;
-import com.facebook.buck.parser.NoSuchBuildTargetException;
-import com.facebook.buck.rules.BuildRule;
-import com.facebook.buck.rules.BuildRuleParams;
-import com.facebook.buck.rules.BuildRuleResolver;
-import com.facebook.buck.rules.BuildRuleType;
-import com.facebook.buck.rules.Description;
-import com.facebook.buck.rules.SourcePath;
-import com.facebook.buck.rules.SourcePathResolver;
-import com.facebook.buck.rules.TargetGraph;
-import com.google.common.base.Optional;
-import com.google.common.base.Suppliers;
-import com.google.common.collect.FluentIterable;
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSortedMap;
-import com.google.common.collect.ImmutableSortedSet;
-import com.google.common.collect.Ordering;
-
-import java.nio.file.Path;
-import java.util.Map;
-
-/**
- * Description for the onos_jar rules.
- *
- * Currently, this only does Swagger generation.
- */
-public class ProjectJavadocDescription implements Description<ProjectJavadocDescription.Arg>, Flavored {
-    public static final BuildRuleType TYPE = BuildRuleType.of("project_javadoc");
-
-    public ProjectJavadocDescription(BuckConfig config) {
-        //TODO
-    }
-
-    @Override
-    public BuildRuleType getBuildRuleType() {
-        return TYPE;
-    }
-
-    @Override
-    public Arg createUnpopulatedConstructorArg() {
-        return new Arg();
-    }
-
-    @Override
-    public <A extends Arg> BuildRule createBuildRule(TargetGraph targetGraph,
-                                                     BuildRuleParams params,
-                                                     BuildRuleResolver resolver,
-                                                     A args)
-            throws NoSuchBuildTargetException {
-
-        ImmutableSet.Builder<SourcePath> srcs = ImmutableSet.builder();
-        ImmutableSet.Builder<BuildRule> deps = ImmutableSet.builder();
-        ImmutableSortedMap.Builder<SourcePath, Path> docfiles = ImmutableSortedMap.naturalOrder();
-        for(BuildTarget dep : args.deps) {
-            BuildRule rule = resolver.requireRule(dep.withFlavors(JavaLibrary.JAVADOC_JAR));
-            if (rule instanceof JavadocJar) {
-                JavadocJar jarRule = (JavadocJar) rule;
-                srcs.addAll(jarRule.getSources());
-                deps.addAll(jarRule.getDeps());
-                docfiles.putAll(jarRule.getDocFiles());
-            } else {
-                throw new RuntimeException("rule is not a javalib"); //FIXME
-            }
-        }
-
-        BuildRuleParams newParams = params.copyWithDeps(
-                Suppliers.ofInstance(
-                    FluentIterable.from(deps.build())
-                                  .toSortedSet(Ordering.<BuildRule>natural())),
-                Suppliers.ofInstance(ImmutableSortedSet.<BuildRule>of()));
-
-        SourcePathResolver sourceResolver = new SourcePathResolver(resolver);
-        ImmutableList.Builder<SourcePath> auxSources = ImmutableList.builder();
-
-        JavadocJar.JavadocArgs.Builder javadocArgs = JavadocJar.JavadocArgs.builder()
-                .addArg("-windowtitle", args.projectTitle)
-                .addArg("-doctitle", args.projectTitle)
-                .addArg("-link", "http://docs.oracle.com/javase/8/docs/api")
-                .addArg("-tag", "onos.rsModel:a:\"onos model\""); //FIXME from buckconfig + rule
-
-        if (args.groups.isPresent()) {
-            for (Pair<String, ImmutableList<String>> pair : args.groups.get()) {
-                javadocArgs.addArg("-group", pair.getFirst(), pair.getSecond());
-            }
-        }
-
-        if (args.excludePackages.isPresent() &&
-                !args.excludePackages.get().isEmpty()) {
-            javadocArgs.addArg("-exclude", args.excludePackages.get());
-        }
-
-        if (args.overview.isPresent()) {
-            javadocArgs.addArg("-overview",
-                   sourceResolver.getAbsolutePath(args.overview.get()).toString());
-
-        }
-
-        if (args.javadocFiles.isPresent()) {
-            for (SourcePath path : args.javadocFiles.get()) {
-                docfiles.put(path,
-                             JavadocJar.getDocfileWithPath(sourceResolver, path, args.javadocFilesRoot.orNull()));
-            }
-        }
-
-
-        JavadocJar javadocJar =  new JavadocJar(newParams,
-                              sourceResolver,
-                              ImmutableSortedSet.copyOf(srcs.build()),
-                              docfiles.build(),
-                              javadocArgs.build(),
-                              /* mavenCoords */ Optional.absent());
-        return javadocJar;
-
-    }
-
-    @Override
-    public boolean hasFlavors(ImmutableSet<Flavor> flavors) {
-        return false;
-    }
-
-    public static class Arg {
-        public ImmutableSortedSet<BuildTarget> deps;
-        public String projectTitle;
-
-        public Optional<SourcePath> overview;
-        public Optional<ImmutableSortedSet<SourcePath>> javadocFiles;
-        public Optional<Path> javadocFilesRoot;
-
-        public Optional<ImmutableList<String>> excludePackages;
-        public Optional<ImmutableList<Pair<String, ImmutableList<String>>>> groups;
-    }
-}
\ No newline at end of file
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerGenerator.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerGenerator.java
deleted file mode 100644
index 518bf8c..0000000
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerGenerator.java
+++ /dev/null
@@ -1,566 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.onosjar;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ArrayNode;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-import com.google.common.collect.ImmutableList;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Files;
-import com.thoughtworks.qdox.JavaProjectBuilder;
-import com.thoughtworks.qdox.model.DocletTag;
-import com.thoughtworks.qdox.model.JavaAnnotation;
-import com.thoughtworks.qdox.model.JavaClass;
-import com.thoughtworks.qdox.model.JavaMethod;
-import com.thoughtworks.qdox.model.JavaParameter;
-import com.thoughtworks.qdox.model.JavaType;
-
-import java.io.File;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.time.Year;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-
-import static com.google.common.base.Strings.isNullOrEmpty;
-
-/**
- * Generates Swagger JSON artifacts from the Java source files.
- */
-public class SwaggerGenerator {
-
-    private final ObjectMapper mapper = new ObjectMapper();
-
-    private static final String JSON_FILE = "swagger.json";
-    private static final String GEN_SRC = "generated-sources";
-    private static final String REG_SRC = "/registrator.javat";
-
-    private static final String PATH = "javax.ws.rs.Path";
-    private static final String PATH_PARAM = "javax.ws.rs.PathParam";
-    private static final String QUERY_PARAM = "javax.ws.rs.QueryParam";
-    private static final String POST = "javax.ws.rs.POST";
-    private static final String PATCH = "javax.ws.rs.PATCH";
-    private static final String GET = "javax.ws.rs.GET";
-    private static final String PUT = "javax.ws.rs.PUT";
-    private static final String DELETE = "javax.ws.rs.DELETE";
-    private static final String PRODUCES = "javax.ws.rs.Produces";
-    private static final String CONSUMES = "javax.ws.rs.Consumes";
-    private static final String JSON = "MediaType.APPLICATION_JSON";
-    private static final String OCTET_STREAM = "MediaType.APPLICATION_OCTET_STREAM";
-    private static final String RESPONSES = "io.swagger.annotations.ApiResponses";
-
-    private final List<File> srcs;
-    private final List<File> resources;
-    private final File srcDirectory;
-    private final File resourceDirectory;
-    private final File genSrcOutputDirectory;
-    private final File genResourcesOutputDirectory;
-    private final String webContext;
-    private final String apiTitle;
-    private final String apiVersion;
-    private final String apiPackage;
-    private final String apiDescription;
-
-    private String x(File f) {
-        return f == null ? "null" : f.getAbsolutePath();
-    }
-
-    public SwaggerGenerator(List<File> srcs, List<File> resources,
-                            File srcDirectory, File resourceDirectory,
-                            File genSrcOutputDirectory, File genResourcesOutputDirectory,
-                            String webContext, String apiTitle, String apiVersion,
-                            String apiPackage, String apiDescription) {
-        this.srcs = srcs;
-        this.resources = resources;
-        this.srcDirectory = srcDirectory;
-        this.resourceDirectory = resourceDirectory;
-        this.genSrcOutputDirectory = genSrcOutputDirectory;
-        this.genResourcesOutputDirectory = genResourcesOutputDirectory;
-        this.webContext = webContext;
-
-        this.apiTitle = apiTitle;
-        this.apiVersion = apiVersion;
-        this.apiPackage = apiPackage;
-        this.apiDescription = apiDescription;
-    }
-
-    public void execute() {
-        try {
-            JavaProjectBuilder builder = new JavaProjectBuilder();
-            if (srcDirectory != null) {
-                builder.addSourceTree(new File(srcDirectory, "src/main/java"));
-            }
-            if (srcs != null) {
-                srcs.forEach(src -> {
-                    if (src.toString().endsWith(".java")) {
-                        try {
-                            builder.addSource(src);
-                        } catch (IOException e) {
-                            throw new RuntimeException(e);
-                        }
-                    }
-                });
-            }
-
-            ObjectNode root = initializeRoot(webContext, apiTitle, apiVersion, apiDescription);
-            ArrayNode tags = mapper.createArrayNode();
-            ObjectNode paths = mapper.createObjectNode();
-            ObjectNode definitions = mapper.createObjectNode();
-
-            root.set("tags", tags);
-            root.set("paths", paths);
-            root.set("definitions", definitions);
-
-            // TODO: Process resources to allow lookup of files by name
-
-            builder.getClasses().forEach(jc -> processClass(jc, paths, tags, definitions, srcDirectory));
-
-            if (paths.size() > 0) {
-                genCatalog(genResourcesOutputDirectory, root);
-                if (!isNullOrEmpty(apiPackage)) {
-                    genRegistrator(genSrcOutputDirectory, webContext, apiTitle, apiVersion,
-                                   apiPackage, apiDescription);
-                }
-            }
-        } catch (Exception e) {
-            e.printStackTrace();
-            throw new RuntimeException("Unable to generate ONOS REST API documentation", e);
-        }
-    }
-
-    // initializes top level root with Swagger required specifications
-    private ObjectNode initializeRoot(String webContext, String apiTitle,
-                                      String apiVersion, String apiDescription) {
-        ObjectNode root = mapper.createObjectNode();
-        root.put("swagger", "2.0");
-        ObjectNode info = mapper.createObjectNode();
-        root.set("info", info);
-
-        root.put("basePath", webContext);
-        info.put("version", apiVersion);
-        info.put("title", apiTitle);
-        info.put("description", apiDescription);
-
-        ArrayNode produces = mapper.createArrayNode();
-        produces.add("application/json");
-        root.set("produces", produces);
-
-        ArrayNode consumes = mapper.createArrayNode();
-        consumes.add("application/json");
-        root.set("consumes", consumes);
-
-        return root;
-    }
-
-    // Checks whether javaClass has a path tag associated with it and if it does
-    // processes its methods and creates a tag for the class on the root
-    void processClass(JavaClass javaClass, ObjectNode paths, ArrayNode tags,
-                      ObjectNode definitions, File srcDirectory) {
-        // If the class does not have a Path tag then ignore it
-        JavaAnnotation annotation = getPathAnnotation(javaClass);
-        if (annotation == null) {
-            return;
-        }
-
-        String path = getPath(annotation);
-        if (path == null) {
-            return;
-        }
-
-        String resourcePath = "/" + path;
-        String tagPath = path.isEmpty() ? "/" : path;
-
-        // Create tag node for this class.
-        ObjectNode tagObject = mapper.createObjectNode();
-        tagObject.put("name", tagPath);
-        if (javaClass.getComment() != null) {
-            tagObject.put("description", shortText(javaClass.getComment()));
-        }
-        tags.add(tagObject);
-
-        // Create an array node add to all methods from this class.
-        ArrayNode tagArray = mapper.createArrayNode();
-        tagArray.add(tagPath);
-
-        processAllMethods(javaClass, resourcePath, paths, tagArray, definitions, srcDirectory);
-    }
-
-    private JavaAnnotation getPathAnnotation(JavaClass javaClass) {
-        Optional<JavaAnnotation> optional = javaClass.getAnnotations()
-                .stream().filter(a -> a.getType().getName().equals(PATH)).findAny();
-        return optional.orElse(null);
-    }
-
-    // Checks whether a class's methods are REST methods and then places all the
-    // methods under a specific path into the paths node
-    private void processAllMethods(JavaClass javaClass, String resourcePath,
-                                   ObjectNode paths, ArrayNode tagArray, ObjectNode definitions,
-                                   File srcDirectory) {
-        // map of the path to its methods represented by an ObjectNode
-        Map<String, ObjectNode> pathMap = new HashMap<>();
-
-        javaClass.getMethods().forEach(javaMethod -> {
-            javaMethod.getAnnotations().forEach(annotation -> {
-                String name = annotation.getType().getName();
-                if (name.equals(PATCH) || name.equals(POST) || name.equals(GET) || name.equals(DELETE) ||
-                        name.equals(PUT)) {
-                    // substring(12) removes "javax.ws.rs."
-                    String method = annotation.getType().toString().substring(12).toLowerCase();
-                    processRestMethod(javaMethod, method, pathMap, resourcePath, tagArray, definitions, srcDirectory);
-                }
-            });
-        });
-
-        // for each path add its methods to the path node
-        for (Map.Entry<String, ObjectNode> entry : pathMap.entrySet()) {
-            paths.set(entry.getKey(), entry.getValue());
-        }
-
-
-    }
-
-    private void processRestMethod(JavaMethod javaMethod, String method,
-                                   Map<String, ObjectNode> pathMap,
-                                   String resourcePath, ArrayNode tagArray,
-                                   ObjectNode definitions, File srcDirectory) {
-        String fullPath = resourcePath, consumes = "", produces = "",
-                comment = javaMethod.getComment();
-        DocletTag tag = javaMethod.getTagByName("onos.rsModel");
-        for (JavaAnnotation annotation : javaMethod.getAnnotations()) {
-            String name = annotation.getType().getName();
-            if (name.equals(PATH)) {
-                fullPath = resourcePath + "/" + getPath(annotation);
-                fullPath = fullPath.replaceFirst("^//", "/");
-            }
-            if (name.equals(CONSUMES)) {
-                consumes = getIOType(annotation);
-            }
-            if (name.equals(PRODUCES)) {
-                produces = getIOType(annotation);
-            }
-        }
-        ObjectNode methodNode = mapper.createObjectNode();
-        methodNode.set("tags", tagArray);
-
-        addSummaryDescriptions(methodNode, comment);
-        addJsonSchemaDefinition(srcDirectory, definitions, tag);
-
-        processParameters(javaMethod, methodNode, method, tag);
-
-        processConsumesProduces(methodNode, "consumes", consumes);
-        processConsumesProduces(methodNode, "produces", produces);
-        if (tag == null || !(tag.getParameters().size() > 1)) {
-            addResponses(javaMethod, methodNode, tag, false);
-        } else {
-            addResponses(javaMethod, methodNode, tag, true);
-        }
-
-        ObjectNode operations = pathMap.get(fullPath);
-        if (operations == null) {
-            operations = mapper.createObjectNode();
-            operations.set(method, methodNode);
-            pathMap.put(fullPath, operations);
-        } else {
-            operations.set(method, methodNode);
-        }
-    }
-
-    private void addJsonSchemaDefinition(File srcDirectory, ObjectNode definitions, DocletTag tag) {
-        final File definitionsDirectory;
-        if (resourceDirectory != null) {
-            definitionsDirectory = new File(resourceDirectory, "definitions");
-        } else if (srcDirectory != null) {
-            definitionsDirectory = new File(srcDirectory + "/src/main/resources/definitions");
-        } else {
-            definitionsDirectory = null;
-        }
-        if (tag != null) {
-            tag.getParameters().forEach(param -> {
-                try {
-                    File config;
-                    if (definitionsDirectory != null) {
-                        config = new File(definitionsDirectory.getAbsolutePath() + "/" + param + ".json");
-                    } else {
-                        config = resources.stream().filter(f -> f.getName().equals(param + ".json")).findFirst().orElse(null);
-                    }
-                    definitions.set(param, mapper.readTree(config));
-                } catch (IOException e) {
-                    throw new RuntimeException(String.format("Could not process %s in %s@%s: %s",
-                                                             tag.getName(), tag.getContext(), tag.getLineNumber(),
-                                                             e.getMessage()), e);
-                }
-            });
-        }
-    }
-
-    private void processConsumesProduces(ObjectNode methodNode, String type, String io) {
-        if (!io.equals("")) {
-            ArrayNode array = mapper.createArrayNode();
-            methodNode.set(type, array);
-            array.add(io);
-        }
-    }
-
-    private void addSummaryDescriptions(ObjectNode methodNode, String comment) {
-        String summary = "", description;
-        if (comment != null) {
-            if (comment.contains(".")) {
-                int periodIndex = comment.indexOf(".");
-                summary = comment.substring(0, periodIndex);
-                description = comment.length() > periodIndex + 1 ?
-                        comment.substring(periodIndex + 1).trim() : "";
-            } else {
-                description = comment;
-            }
-            methodNode.put("summary", summary);
-            methodNode.put("description", description);
-        }
-    }
-
-    private Optional<JavaAnnotation> getResponsesAnnotation(JavaMethod javaMethod) {
-        return javaMethod.getAnnotations().stream().filter(
-                a -> a.getType().getName().equals(RESPONSES)
-        ).findAny();
-    }
-
-    // TODO: add json schema for responses
-    private void addResponses(JavaMethod javaMethod, ObjectNode methodNode, DocletTag tag, boolean responseJson) {
-        ObjectNode responses = mapper.createObjectNode();
-        methodNode.set("responses", responses);
-
-        Optional<JavaAnnotation> responsesAnnotation = getResponsesAnnotation(javaMethod);
-
-        if (responsesAnnotation.isPresent()) {
-            Object annotationsObj = responsesAnnotation.get().getNamedParameter("value");
-            if (annotationsObj != null && annotationsObj instanceof List) {
-                List<JavaAnnotation> responseAnnotation = (List<JavaAnnotation>) annotationsObj;
-                responseAnnotation.forEach(
-                        javaAnnotation -> {
-                            ObjectNode response = mapper.createObjectNode();
-                            response.put("description",
-                                    String.valueOf(javaAnnotation.getNamedParameter("message"))
-                                            .replaceAll("^\"|\"$", ""));
-                            responses.set(String.valueOf(javaAnnotation.getNamedParameter("code")), response);
-                        }
-                );
-            }
-        } else {
-            ObjectNode success = mapper.createObjectNode();
-            success.put("description", "successful operation");
-            responses.set("200", success);
-
-            ObjectNode defaultObj = mapper.createObjectNode();
-            defaultObj.put("description", "Unexpected error");
-            responses.set("default", defaultObj);
-
-            if (tag != null && responseJson) {
-                ObjectNode schema = mapper.createObjectNode();
-                tag.getParameters().stream().forEach(
-                        param -> schema.put("$ref", "#/definitions/" + param));
-                success.set("schema", schema);
-            }
-        }
-    }
-
-    // Checks if the annotations has a value of JSON and returns the string
-    // that Swagger requires
-    private String getIOType(JavaAnnotation annotation) {
-        if (annotation.getNamedParameter("value").toString().equals(JSON)) {
-            return "application/json";
-        } else if (annotation.getNamedParameter("value").toString().equals(OCTET_STREAM)) {
-            return "application/octet_stream";
-        }
-        return "";
-    }
-
-    // If the annotation has a Path tag, returns the value with leading and
-    // trailing double quotes and slash removed.
-    private String getPath(JavaAnnotation annotation) {
-        String path = annotation.getNamedParameter("value").toString();
-        return path == null ? null : path.replaceAll("(^[\\\"/]*|[/\\\"]*$)", "");
-    }
-
-    // Processes parameters of javaMethod and enters the proper key-values into the methodNode
-    private void processParameters(JavaMethod javaMethod, ObjectNode methodNode, String method, DocletTag tag) {
-        ArrayNode parameters = mapper.createArrayNode();
-        methodNode.set("parameters", parameters);
-        boolean required = true;
-
-        for (JavaParameter javaParameter : javaMethod.getParameters()) {
-            ObjectNode individualParameterNode = mapper.createObjectNode();
-            Optional<JavaAnnotation> optional = javaParameter.getAnnotations().stream().filter(
-                    annotation -> annotation.getType().getName().equals(PATH_PARAM) ||
-                            annotation.getType().getName().equals(QUERY_PARAM)).findAny();
-            JavaAnnotation pathType = optional.orElse(null);
-
-            String annotationName = javaParameter.getName();
-
-
-            if (pathType != null) { //the parameter is a path or query parameter
-                individualParameterNode.put("name",
-                                            pathType.getNamedParameter("value")
-                                                    .toString().replace("\"", ""));
-                if (pathType.getType().getName().equals(PATH_PARAM)) {
-                    individualParameterNode.put("in", "path");
-                } else if (pathType.getType().getName().equals(QUERY_PARAM)) {
-                    individualParameterNode.put("in", "query");
-                }
-                individualParameterNode.put("type", getType(javaParameter.getType()));
-            } else { // the parameter is a body parameter
-                individualParameterNode.put("name", annotationName);
-                individualParameterNode.put("in", "body");
-
-                // Adds the reference to the Json model for the input
-                // that goes in the post or put operation
-                if (tag != null && (method.toLowerCase().equals("post") ||
-                        method.toLowerCase().equals("put"))) {
-                    ObjectNode schema = mapper.createObjectNode();
-                    tag.getParameters().stream().forEach(param -> {
-                        schema.put("$ref", "#/definitions/" + param);
-                    });
-                    individualParameterNode.set("schema", schema);
-                }
-            }
-            for (DocletTag p : javaMethod.getTagsByName("param")) {
-                if (p.getValue().contains(annotationName)) {
-                    String description = "";
-                    if (p.getValue().split(" ", 2).length >= 2) {
-                        description = p.getValue().split(" ", 2)[1].trim();
-                        if (description.contains("optional")) {
-                            required = false;
-                        }
-                    } else {
-                        throw new RuntimeException(String.format("No description for parameter \"%s\" in " +
-                                                                         "method \"%s\" in %s (line %d)",
-                                                                 p.getValue(), javaMethod.getName(),
-                                                                 javaMethod.getDeclaringClass().getName(),
-                                                                 javaMethod.getLineNumber()));
-                    }
-                    individualParameterNode.put("description", description);
-                }
-            }
-            individualParameterNode.put("required", required);
-            parameters.add(individualParameterNode);
-        }
-    }
-
-    // Returns the Swagger specified strings for the type of a parameter
-    private String getType(JavaType javaType) {
-        String type = javaType.getFullyQualifiedName();
-        String value;
-        if (type.equals(String.class.getName())) {
-            value = "string";
-        } else if (type.equals("int")) {
-            value = "integer";
-        } else if (type.equals(boolean.class.getName())) {
-            value = "boolean";
-        } else if (type.equals(long.class.getName())) {
-            value = "number";
-        } else {
-            value = "";
-        }
-        return value;
-    }
-
-    // Writes the swagger.json file using the supplied JSON root.
-    private void genCatalog(File dstDirectory, ObjectNode root) {
-        File swaggerCfg = new File(dstDirectory, JSON_FILE);
-        if (dstDirectory.exists() || dstDirectory.mkdirs()) {
-            try (FileWriter fw = new FileWriter(swaggerCfg);
-                 PrintWriter pw = new PrintWriter(fw)) {
-                pw.println(root.toString());
-            } catch (IOException e) {
-                throw new RuntimeException("Unable to write " + JSON_FILE, e);
-            }
-        } else {
-            throw new RuntimeException("Unable to create " + dstDirectory);
-        }
-    }
-
-    // Generates the registrator Java component.
-    private void genRegistrator(File dstDirectory, String webContext,
-                                String apiTitle, String apiVersion,
-                                String apiPackage, String apiDescription) {
-        File dir = new File(dstDirectory, resourceDirectory != null ? GEN_SRC : ".");
-        File reg = new File(dir, apiRegistratorPath(apiPackage));
-        File pkg = reg.getParentFile();
-        if (pkg.exists() || pkg.mkdirs()) {
-            try {
-                String src = new String(ByteStreams.toByteArray(getClass().getResourceAsStream(REG_SRC)));
-                src = src.replace("${api.package}", apiPackage)
-                        .replace("${web.context}", webContext)
-                        .replace("${api.title}", apiTitle)
-                        .replace("${api.description}", apiDescription)
-                        .replace("${year}", Year.now().toString());
-
-                Files.write(src.getBytes(), reg);
-            } catch (IOException e) {
-                throw new RuntimeException("Unable to write " + reg, e);
-            }
-        } else {
-            throw new RuntimeException("Unable to create " + reg);
-        }
-    }
-
-    private String shortText(String comment) {
-        int i = comment.indexOf('.');
-        return i > 0 ? comment.substring(0, i) : comment;
-    }
-
-    public static String apiRegistratorPath(String apiPackage) {
-        return apiPackage.replaceAll("\\.", "/") + "/ApiDocRegistrator.java";
-    }
-
-    private static List<File> getFiles(String commaSeparatedList) {
-        String[] fileNames = commaSeparatedList.split(",");
-        ImmutableList.Builder<File> files = ImmutableList.builder();
-        Arrays.stream(fileNames).forEach(filename -> files.add(new File(filename)));
-        return files.build();
-    }
-
-    public static void main(String args[]) {
-        List<File> srcs = getFiles(args[0]);
-        List<File> resources = getFiles(args[1]);
-        File srcDirectory = null;//new File(args[2]);
-        File resourceDirectory = new File(args[3]);
-        File genSrcOutputDirectory = new File(args[4]);
-        File genResourcesOutputDirectory = new File(args[5]);
-        String webContext = args[6];
-        String apiTitle = args[7];
-        String apiVersion = args[8];
-        String apiPackage = args[9];
-        String apiDescription = args[10];
-
-        SwaggerGenerator generator = new SwaggerGenerator(
-                srcs,
-                resources,
-                srcDirectory, resourceDirectory,
-                genSrcOutputDirectory,
-                genResourcesOutputDirectory,
-                webContext,
-                apiTitle,
-                apiVersion,
-                apiPackage,
-                apiDescription);
-        generator.execute();
-    }
-}
\ No newline at end of file
diff --git a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerStep.java b/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerStep.java
deleted file mode 100644
index cbb6e82..0000000
--- a/tools/build/buck-plugin/src/main/java/org/onosproject/onosjar/SwaggerStep.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.onosjar;
-
-import com.facebook.buck.io.ProjectFilesystem;
-import com.facebook.buck.rules.SourcePathResolver;
-import com.facebook.buck.step.AbstractExecutionStep;
-import com.facebook.buck.step.ExecutionContext;
-import com.facebook.buck.step.StepExecutionResult;
-import com.google.common.collect.ImmutableSortedSet;
-
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * Buck build step to trigger SwaggerGenerator.
- */
-public class SwaggerStep extends AbstractExecutionStep {
-
-    private final ProjectFilesystem filesystem;
-
-    private final ImmutableSortedSet<Path> srcs;
-    private final ImmutableSortedSet<Path> resources;
-    private final Path genSourcesOutput;
-    private final Path genResourcesOutput;
-
-    private final String webContext;
-    private final String apiTitle;
-    private final String apiVersion;
-    private final String apiPackage;
-    private final String apiDescription;
-
-
-    public SwaggerStep(ProjectFilesystem filesystem,
-                       ImmutableSortedSet<Path> srcs,
-                       ImmutableSortedSet<Path> resources,
-                       Path genSourcesOutput, Path genResourcesOutput,
-                       String webContext, String apiTitle, String apiVersion,
-                       String apiPackage, String apiDescription) {
-        super("swagger");
-        this.filesystem = filesystem;
-        this.srcs = srcs;
-        this.resources = resources;
-        this.genSourcesOutput = genSourcesOutput;
-        this.genResourcesOutput = genResourcesOutput;
-        this.webContext = webContext;
-        this.apiTitle = apiTitle;
-        this.apiVersion = apiVersion;
-        this.apiPackage = apiPackage;
-        this.apiDescription = apiDescription;
-    }
-
-    @Override
-    public StepExecutionResult execute(ExecutionContext executionContext)
-            throws IOException, InterruptedException {
-        try {
-            List<File> srcFiles = srcs.stream()
-                    .map(src -> filesystem.resolve(src).toFile())
-                    .collect(Collectors.toList());
-            List<File> resourceFiles = resources.stream()
-                    .map(rsrc -> filesystem.resolve(rsrc).toFile())
-                    .collect(Collectors.toList());
-            new SwaggerGenerator(srcFiles, resourceFiles, null, null,
-                                 filesystem.resolve(genSourcesOutput).toFile(),
-                                 filesystem.resolve(genResourcesOutput).toFile(),
-                                 webContext,
-                                 apiTitle,
-                                 apiVersion,
-                                 apiPackage,
-                                 apiDescription).execute();
-
-            return StepExecutionResult.SUCCESS;
-        } catch (Exception e) {
-            e.printStackTrace();
-            // FIXME print the exception
-            return StepExecutionResult.ERROR;
-        }
-    }
-
-    Path apiRegistratorPath() {
-        return genSourcesOutput.resolve(SwaggerGenerator.apiRegistratorPath(apiPackage));
-    }
-}
diff --git a/tools/build/buck-publish b/tools/build/buck-publish
deleted file mode 100755
index 01ed7d9..0000000
--- a/tools/build/buck-publish
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/bash
-# -----------------------------------------------------------------------------
-# Build and publish the ONOS version of buck.
-# -----------------------------------------------------------------------------
-
-if [ $# -ne 3  -a $# -ne 4 ]; then
-    echo "Usage: buck-publish-setup buck-branch onos-branch yang-branch [version] [--dry-run]"
-    echo "For example, to build buck branch 11-11-2016, onos branch master, and onos-yang-tools master:"
-    echo "buck-publish 11-11-2016 master master"
-    exit 1
-fi
-
-if [ $# -eq 4 -a "${4}" != "--dry-run" ]; then
-    echo "$4 is an invalid parameter - only --dry-run allowed"
-    exit 1
-fi
-
-BUCK_BRANCH="$1"
-ONOS_BRANCH="$2"
-YANG_BRANCH="$3"
-
-if [ -z "$4" ]; then
-    onos-release-prerequisites
-fi
-
-DIR=$(mktemp -d /tmp/buck-publish.XXXXX) || { echo "Failed to create temp file"; exit 1; }
-
-buck-publish-setup $BUCK_BRANCH $ONOS_BRANCH $YANG_BRANCH $DIR
-pushd $DIR && buck-publish-package $4 && popd
-cp $DIR/onos/tools/build/onos-buck $ONOS_ROOT/tools/build/onos-buck
-
-
diff --git a/tools/build/buck-publish-api b/tools/build/buck-publish-api
deleted file mode 100755
index e27f1d0..0000000
--- a/tools/build/buck-publish-api
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/bin/bash
-
-BUCK_LOCAL_CONFIG=${BUCK_LOCAL_CONFIG:-$ONOS_ROOT/.buckconfig.local}
-MVN_REPO="https://oss.sonatype.org/content/repositories/snapshots"
-NO_BUCKD=1
-
-set -e
-set -x
-
-#FIXME if pwd != buck
-pushd buck
-
-# build buck
-scripts/create_tag.sh
-buck build buck --show-output
-
-# publish cli:main-fixed as buck-api
-cp $BUCK_LOCAL_CONFIG .
-buck publish //src/com/facebook/buck/cli:main-fixed \
-    --remote-repo=https://oss.sonatype.org/content/repositories/snapshots/ \
-    | tee ../api-publish.txt
-
-# Alternatively, we can deploy org.onosproject:buck-api with the following:
-#mvn deploy:deploy-file -DgroupId=org.onosproject -DartifactId=buck-api \
-#  -Dversion=0.1-SNAPSHOT -DgeneratePom=true -Dpackaging=jar \
-#  -DrepositoryId=snapshot -Durl=https://oss.sonatype.org/content/repositories/snapshots/ \
-#  -Dfile=buck-out/gen/src/com/facebook/buck/cli/main-fixed/main-fixed.jar
-
-#FIXME upload API to S3 for backup
-
-popd #buck
-
-SNAPSHOT_VERSION=$(cat api-publish.txt | grep "^org.onosproject:buck-api:jar" \
-                       | cut -d' ' -f1 | cut -d: -f4)
-BUCK_API_URL="$MVN_REPO/org/onosproject/buck-api/0.1-SNAPSHOT/buck-api-$SNAPSHOT_VERSION.jar"
-echo $BUCK_API_URL
-
-BUCK_API_SHA=$(shasum buck/buck-out/gen/src/com/facebook/buck/cli/main-fixed/main-fixed.jar | cut -d' ' -f1)
-echo $BUCK_API_SHA
-
-pushd onos
-sed -i "" -E "s#url =.*#url = '$BUCK_API_URL',#" tools/build/buck-plugin/BUCK
-sed -i "" -E "s#sha1 =.*#sha1 = '$BUCK_API_SHA',#" tools/build/buck-plugin/BUCK
-popd #onos
-
-#pushd onos-yang-tools
-#FIXME update version (assume 0.1-SNAPSHOT for now)
-#popd #onos-yang-tools
-
-set +x
-
-echo
-echo "Please build and verify the ONOS Buck plugin and the Yang tools plugin:"
-echo "  cd onos; buck build //tools/build/buck-plugin:onos"
-echo "  cd onos-yang-tools; mvn clean package"
-echo "You should commit and push any required changes."
diff --git a/tools/build/buck-publish-package b/tools/build/buck-publish-package
deleted file mode 100755
index 09d1612..0000000
--- a/tools/build/buck-publish-package
+++ /dev/null
@@ -1,71 +0,0 @@
-#!/bin/bash
-
-for NEXT_VERSION in 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20; do
-    DEFAULT_TAG=${TAG:-$(date +v%Y.%m.%d.$NEXT_VERSION)}
-    BUCK_ZIP="buck-$DEFAULT_TAG.zip"
-    DOWNLOAD_BASE="http://repo1.maven.org/maven2/org/onosproject/onos-buck/$DEFAULT_TAG"
-
-    if ! curl --output /dev/null --silent --head --fail "$DOWNLOAD_BASE/$BUCK_ZIP"; then
-        break;
-    fi
-done
-
-NO_BUCKD=1
-
-UPLOAD_BASE="https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-buck/$DEFAULT_TAG"
-BUCK_ZIP="buck-$DEFAULT_TAG.zip"
-ZIP_STAGE="buck-bin"
-
-rm -rf $ZIP_STAGE
-
-set -e
-set -x
-
-# build plugins
-
-pushd buck
-onos-buck build buck
-popd #buck
-
-pushd onos
-onos-buck build //tools/build/buck-plugin:onos
-popd #onos
-
-pushd onos-yang-tools
-mvn clean package
-popd #onos-yang-tools
-
-# assemble zip
-
-mkdir -p buck-bin/plugins
-
-cp buck/buck-out/gen/programs/buck.pex $ZIP_STAGE/buck
-cp onos/buck-out/gen/tools/build/buck-plugin/onos.jar $ZIP_STAGE/plugins/onos.jar
-cp onos-yang-tools/compiler/plugin/buck/target/onos-yang-compiler-buck-plugin-*.jar $ZIP_STAGE/plugins/yang.jar
-
-BUCK_VERSION=$(buck/buck-out/gen/programs/buck.pex -V)
-echo $BUCK_VERSION > $ZIP_STAGE/.buck_version
-
-chmod 555 $ZIP_STAGE/buck
-chmod 444 $ZIP_STAGE/.buck_version
-
-pushd $ZIP_STAGE
-zip -r ../$BUCK_ZIP buck .buck_version plugins
-popd #$ZIP_STAGE
-
-if [ "$1" != "--dry-run" ]; then
-    # publish zip
-    curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $BUCK_ZIP $UPLOAD_BASE/$BUCK_ZIP
-    echo "New buck release is in " $BUCK_ZIP
-fi
-
-# update version in onos-buck
-URL="$DOWNLOAD_BASE/$BUCK_ZIP"
-SHA=$(shasum $BUCK_ZIP | cut -d' ' -f1)
-
-sed -i "" -E "s#BUCK_URL=.*#BUCK_URL=\"$URL\"#" onos/tools/build/onos-buck
-sed -i "" -E "s#BUCK_SHA=.*#BUCK_SHA=\"$SHA\"#" onos/tools/build/onos-buck
-
-set +x
-echo
-echo "Commit and push change to onos-buck on the onos directory."
diff --git a/tools/build/buck-publish-setup b/tools/build/buck-publish-setup
deleted file mode 100755
index d180479..0000000
--- a/tools/build/buck-publish-setup
+++ /dev/null
@@ -1,28 +0,0 @@
-#!/bin/bash
-
-BUCK_REF=${1:-"11-11-2016"}
-ONOS_REF=${2:-"master"}
-YANG_REF=${3:-"master"}
-DIR=$4
-
-set -x
-
-if [ -z "$4" ]; then
-    DIR=$(mktemp -d /tmp/buck-publish.XXXXX) || { echo "Failed to create temp file"; exit 1; }
-fi
-# change to tmpdir
-cd $DIR
-
-# checkout buck
-git clone -b $BUCK_REF https://github.com/bocon13/buck
-
-# checkout plugins
-git clone -b $ONOS_REF https://gerrit.onosproject.org/onos.git
-git clone -b $YANG_REF https://gerrit.onosproject.org/onos-yang-tools.git
-
-set +x
-
-echo
-echo "Buck publish area:"
-echo "  cd $DIR"
-
diff --git a/tools/build/conf/BUCK b/tools/build/conf/BUCK
deleted file mode 100644
index 11ab279..0000000
--- a/tools/build/conf/BUCK
+++ /dev/null
@@ -1,81 +0,0 @@
-checkstyle_source = 'src/main/resources/onos/checkstyle.xml'
-suppression_source = 'src/main/resources/onos/suppressions.xml'
-header_source = 'src/main/resources/onos/onos-java.header'
-
-export_file (
-  name = 'checkstyle-xml',
-  src = checkstyle_source,
-  visibility = [ 'PUBLIC' ],
-)
-
-export_file (
-  name = 'suppressions-xml',
-  src = suppression_source,
-  visibility = [ 'PUBLIC' ],
-)
-
-export_file (
-  name = 'onos-java-header',
-  src = header_source,
-  visibility = [ 'PUBLIC' ],
-)
-
-export_file (
-  name = 'start-buck-daemon',
-  visibility = [ 'PUBLIC' ],
-)
-
-COMPILE = [
-  '//lib:com_google_guava_guava',
-  '//lib:checkstyle',
-]
-
-RUN = [
-  '//lib:commons-logging',
-  '//lib:commons-beanutils',
-  '//lib:commons-lang3',
-  '//lib:commons-collections',
-  '//lib:antlr',
-]
-
-java_library (
-  name = 'checkstyle',
-  srcs = glob([ 'src/main/java/**/*.java' ]),
-  deps = COMPILE,
-)
-
-java_binary (
-  name = 'buck-daemon-jar',
-  deps = [ ':checkstyle' ] + RUN,
-  main_class = 'org.onosproject.buckdaemon.BuckDaemon',
-  blacklist = [ 'META-INF/.*' ],
-  visibility = [ 'PUBLIC' ],
-)
-
-osgi_jar (
-  name = 'onos-build-conf',
-  srcs = [],
-  deps = [ ':checkstyle' ] + RUN,
-)
-
-# cmd = '#!/bin/bash\n'
-# cmd += '$1 &>/dev/null < /dev/null &'
-#
-# genrule(
-#   name = 'checkstyle-sh',
-#   bash = "echo '%s' > $OUT && chmod +x $OUT" % cmd,
-#   out = 'checkstyle.sh',
-# )
-#
-# sh_test(
-#   name = 'checkstyle-runner',
-#   test = ':checkstyle-sh',
-#   args = [
-#   '$(exe :checkstyle-jar)',
-#   '$(location //lib:checkstyle)',
-#   '$(location //tools/build/conf:checkstyle-xml)',
-#   '`mktemp /tmp/%s-checkstyle-XXXXXX`',
-#   ],
-#   labels = [ 'checkstyle' ],
-#   visibility = [ 'PUBLIC' ],
-# )
diff --git a/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckDaemon.java b/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckDaemon.java
deleted file mode 100644
index a253995..0000000
--- a/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckDaemon.java
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.buckdaemon;
-
-import com.puppycrawl.tools.checkstyle.api.CheckstyleException;
-import org.onosproject.checkstyle.CheckstyleRunner;
-
-import java.io.IOException;
-import java.io.PrintStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.net.ServerSocket;
-import java.net.Socket;
-import java.nio.ByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.channels.FileLock;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-
-import static java.nio.file.StandardOpenOption.CREATE;
-import static java.nio.file.StandardOpenOption.WRITE;
-
-/**
- * Buck daemon process.
- */
-public final class BuckDaemon {
-
-    private static final long POLLING_INTERVAL = 1000; //ms
-
-    private final Map<String, BuckTask> tasks = new HashMap<>();
-    private final String portLock;
-    private final String buckPid;
-
-    // Public construction forbidden
-    private BuckDaemon(String[] args) {
-        portLock = args[0];
-        buckPid = args[1];
-    }
-
-    /**
-     * Main entry point for the daemon.
-     *
-     * @param args command-line arguments
-     * @throws CheckstyleException on checkstyle error
-     * @throws IOException on I/O error
-     */
-    public static void main(String[] args)
-            throws CheckstyleException, IOException {
-        BuckDaemon daemon = new BuckDaemon(args);
-        daemon.registerTasks();
-        daemon.startServer();
-    }
-
-    /**
-     * Registers re-entrant tasks by their task name.
-     */
-    private void registerTasks() {
-        tasks.put("checkstyle", new CheckstyleRunner(System.getProperty("checkstyle.config"),
-                                                     System.getProperty("checkstyle.suppressions")));
-        // tasks.put("swagger", new SwaggerGenerator());
-    }
-
-    /**
-     * Monitors another PID and exit when that process exits.
-     */
-    private void watchProcess(String pid) {
-        if (pid == null || pid.equals("0")) {
-            return;
-        }
-        Timer timer = new Timer(true); // start as a daemon, so we don't hang shutdown
-        timer.scheduleAtFixedRate(new TimerTask() {
-            private String cmd = "kill -s 0 " + pid;
-
-            @Override
-            public void run() {
-                try {
-                    Process p = Runtime.getRuntime().exec(cmd);
-                    p.waitFor();
-                    if (p.exitValue() != 0) {
-                        debug("shutting down...");
-                        System.exit(0);
-                    }
-                } catch (IOException | InterruptedException e) {
-                    //no-op
-                    e.printStackTrace();
-                }
-            }
-        }, POLLING_INTERVAL, POLLING_INTERVAL);
-    }
-
-    /**
-     * Initiates a server.
-     */
-    private void startServer() throws IOException, CheckstyleException {
-        // Use a file lock to ensure only one copy of the daemon runs
-        Path portLockPath = Paths.get(portLock);
-        FileChannel channel = FileChannel.open(portLockPath, WRITE, CREATE);
-        FileLock lock = channel.tryLock();
-        if (lock == null) {
-            debug("Server is already running");
-            System.exit(1);
-        } //else, hold the lock until the JVM exits
-
-        // Start the server and bind it to a random port
-        ServerSocket server = new ServerSocket(0);
-
-        // Monitor the parent buck process
-        watchProcess(buckPid);
-
-        // Set up hook to clean up after ourselves
-        Runtime.getRuntime().addShutdownHook(new Thread(() -> {
-            try {
-                channel.truncate(0);
-                channel.close();
-                debug("tear down...");
-                Files.delete(portLockPath);
-            } catch (IOException e) {
-                //no-op: shutting down
-                e.printStackTrace();
-            }
-        }));
-
-        // Write the bound port to the port file
-        int port = server.getLocalPort();
-        channel.truncate(0);
-        channel.write(ByteBuffer.wrap(Integer.toString(port).getBytes()));
-        channel.force(false); // flush the port number to disk
-
-        // Instantiate a Checkstyle runner and executor; serve until exit...
-        ExecutorService executor = Executors.newCachedThreadPool();
-        while (true) {
-            try {
-                executor.submit(new BuckTaskRunner(server.accept()));
-            } catch (Exception e) {
-                e.printStackTrace();
-                //no-op
-            }
-        }
-    }
-
-    /**
-     * Runnable capable of invoking the appropriate Buck task with input
-     * consumed form the specified socket and output produced back to that
-     * socket.
-     */
-    private class BuckTaskRunner implements Runnable {
-
-        private final Socket socket;
-
-        public BuckTaskRunner(Socket socket) {
-            this.socket = socket;
-        }
-
-        @Override
-        public void run() {
-            try {
-                try {
-                    socket.setSoTimeout(1_000); //reads should time out after 1 second
-                    BuckTaskContext context = BuckTaskContext.createBuckTaskContext(socket.getInputStream());
-                    if (context == null) {
-                        socket.close();
-                        return;
-                    }
-
-                    String taskName = context.taskName();
-                    BuckTask task = tasks.get(taskName);
-                    if (task != null) {
-                        debug(String.format("Executing task '%s'", taskName));
-                        try {
-                            task.execute(context);
-                            for (String line : context.output()) {
-                                send(socket, line);
-                            }
-                            // TODO should we catch Exception, RuntimeException, or something specific?
-                        } catch (Throwable e) {
-                            e.printStackTrace(new PrintStream(socket.getOutputStream()));
-                        }
-                    } else {
-                        String message = String.format("No task named '%s'", taskName);
-                        debug(message);
-                        send(socket, message);
-                    }
-                } catch (Throwable e) {
-                    StringWriter writer = new StringWriter();
-                    e.printStackTrace(new PrintWriter(writer));
-                    String stacktrace = writer.toString();
-                    debug(stacktrace);
-                    send(socket, stacktrace);
-                }
-                socket.getOutputStream().flush();
-                socket.close();
-            } catch (IOException e) {
-                e.printStackTrace();
-            }
-        }
-
-    }
-
-    private static void send(Socket socket, String line) throws IOException {
-        socket.getOutputStream().write((line + "\n").getBytes());
-    }
-
-    private static void debug(String message) {
-        // no-op; print to System.out if needed
-    }
-}
diff --git a/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckTask.java b/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckTask.java
deleted file mode 100644
index d579305..0000000
--- a/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckTask.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.buckdaemon;
-
-/**
- * Abstraction of a Buck task that can be spawned by the Buck daemon.
- */
-public interface BuckTask {
-
-    /**
-     * Executes the task, consuming the specified input and producing output.
-     *
-     * @param context context for the tast operation
-     */
-    void execute(BuckTaskContext context);
-
-}
diff --git a/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckTaskContext.java b/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckTaskContext.java
deleted file mode 100644
index 8dabfd2..0000000
--- a/tools/build/conf/src/main/java/org/onosproject/buckdaemon/BuckTaskContext.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.onosproject.buckdaemon;
-
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.Lists;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.util.List;
-
-/**
- * Context for executing a single Buck task.
- */
-public class BuckTaskContext {
-
-    private final String taskName;
-    private final ImmutableList<String> input;
-    private final List<String> output;
-
-    public static BuckTaskContext createBuckTaskContext(InputStream inputStream) throws IOException {
-        ImmutableList<String> lines = slurpInput(inputStream);
-        if (lines.size() == 0) {
-            return null;
-        } else {
-            return new BuckTaskContext(lines);
-        }
-    }
-
-    BuckTaskContext(ImmutableList<String> lines) {
-        this.taskName = lines.get(0);
-        this.input = lines.subList(1, lines.size());
-        this.output = Lists.newArrayList();
-    }
-
-    /**
-     * Reads all input, line by line, from a stream until an empty line or EOF is encountered.
-     *
-     * @param stream input stream
-     * @return the lines of the input
-     * @throws IOException
-     */
-    private static ImmutableList<String> slurpInput(InputStream stream) throws IOException {
-        ImmutableList.Builder<String> lines = ImmutableList.builder();
-        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(stream));
-        while (true) {
-            String line = bufferedReader.readLine();
-            if (line == null || line.trim().length() == 0) {
-                // Empty line or EOF
-                break;
-            }
-            lines.add(line);
-        }
-        return lines.build();
-    }
-
-    /**
-     * Returns the symbolic task name.
-     *
-     * @return symbolic task name
-     */
-    public String taskName() {
-        return taskName;
-    }
-
-    /**
-     * Returns the input data a list of strings.
-     *
-     * @return input data
-     */
-    public List<String> input() {
-        return ImmutableList.copyOf(input);
-    }
-
-    /**
-     * Returns the output data a list of strings.
-     *
-     * @return output data
-     */
-    List<String> output() {
-        return ImmutableList.copyOf(output);
-    }
-
-    /**
-     * Adds a line to the output data.
-     *
-     * @param line line of output data
-     */
-    public void output(String line) {
-        output.add(line);
-    }
-
-}
diff --git a/tools/build/conf/start-buck-daemon b/tools/build/conf/start-buck-daemon
deleted file mode 100755
index b747376..0000000
--- a/tools/build/conf/start-buck-daemon
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/bash
-# -----------------------------------------------------------------------------
-# Launches Buck daemon if not already running and requests Buck task execution.
-# -----------------------------------------------------------------------------
-
-BUCK_DAEMON=$1
-TASK=${2:-unspecified}
-DATA=${3}
-
-# TODO: Figure out how to parametrize better
-BUCK_PROPS="-Dcheckstyle.config=$4 -Dcheckstyle.suppressions=$5"
-
-PORT_FILE="$1.port"
-
-function ppid() {
-    ps -p ${1:-$$} -o ppid= -o pid= -o comm=
-}
-
-function buck_pid() {
-    BUCK_PID=($(ppid))
-    while [ ${BUCK_PID[0]} -ne 0 ]; do
-        BUCK_PID=($(ppid $BUCK_PID))
-        if [ "${BUCK_PID[2]}" == "buck" ]; then
-            # use parent PID of buck
-            echo ${BUCK_PID[0]}
-            return
-        fi
-        if [ "${BUCK_PID[2]}" == "buckd" ] ||
-           [[ "${BUCK_PID[2]}" == *"python"* ]]; then
-            # use PID of buckd or python
-            echo ${BUCK_PID[1]}
-            return
-        fi
-    done
-    # fallback last read PID
-    echo ${BUCK_PID[1]}
-}
-
-function port() {
-    cat $PORT_FILE 2>/dev/null || echo 0
-}
-
-function check_socket() {
-    printf "\n" | nc localhost $(port) 2>/dev/null
-    return $?
-}
-
-# check to see if buck daemon is running; if not, start it
-if ! check_socket; then
-    # Starting buck daemon...
-    #FIXME change to /dev/null if/when we are confident
-    nohup java $BUCK_PROPS -jar $BUCK_DAEMON $PORT_FILE $(buck_pid) >>/tmp/buck.daemon 2>&1 &
-
-    TRIES=20
-    i=0
-    # Wait for buck daemon to start for 2 seconds
-    while [ $i -lt $TRIES ]; do
-        if check_socket; then
-            CONNECTED=true
-            break
-        fi
-        let i=i+1
-        sleep 0.1
-    done
-    if [ -z "$CONNECTED" ]; then
-        echo "Failed to start buck daemon"
-        exit 3
-    fi
-fi
-
-# run the actual buck daemon client
-OUT=$((printf "%s\n" $TASK; cat $DATA) | nc localhost $(port))
-if [ $? -ne 0 ]; then
-    echo "Error connecting to buck daemon server"
-    exit 2
-fi
-if [ -n "$OUT" ]; then
-    printf "$OUT"
-    exit 1
-fi
\ No newline at end of file
diff --git a/tools/build/jenkins/onos-buck-gerrit b/tools/build/jenkins/onos-buck-gerrit
deleted file mode 100644
index 7638a2a..0000000
--- a/tools/build/jenkins/onos-buck-gerrit
+++ /dev/null
@@ -1,37 +0,0 @@
-#!groovy
-
-pipeline {
-
-    agent { node { label 'ubuntu16.04-basebuild-8c-15g' } }
-
-    stages {
-
-        stage('build') {
-            steps {
-                sh '''#!/bin/bash -l
-                    ONOS_ROOT=`pwd`
-                    source tools/build/envDefaults
-                    onos-buck build onos
-                '''
-            }
-        }
-
-        stage('test') {
-            steps {
-                parallel (
-                    "unit-tests": {
-                        sh '''#!/bin/bash -l
-                            ONOS_ROOT=`pwd`
-                            source tools/build/envDefaults
-                            onos-buck test
-                            onos-buck build //docs:external //docs:internal --show-output
-                        '''
-                    },
-                    // additional steps here (STC, docker buld, etc)
-                )
-            }
-        }
-    }
-
-}
-
diff --git a/tools/build/libgen/pom.xml b/tools/build/libgen/pom.xml
index 9288bb3..e28cbb7 100644
--- a/tools/build/libgen/pom.xml
+++ b/tools/build/libgen/pom.xml
@@ -31,7 +31,7 @@
     <packaging>jar</packaging>
     <version>1.6-SNAPSHOT</version>
 
-    <description>Third-party library generator for Buck and Bazel workspaces</description>
+    <description>Third-party library generator for ONOS Bazel workspace</description>
     <url>http://onosproject.org/</url>
 
     <scm>
@@ -116,7 +116,7 @@
                     <transformers>
                         <transformer
                                 implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
-                            <mainClass>org.onosproject.libgen.BuckLibGenerator</mainClass>
+                            <mainClass>org.onosproject.libgen.BazelLibGenerator</mainClass>
                         </transformer>
                     </transformers>
                     <filters>
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/AetherResolver.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/AetherResolver.java
index e97bad5..23ffc9e 100755
--- a/tools/build/libgen/src/main/java/org/onosproject/libgen/AetherResolver.java
+++ b/tools/build/libgen/src/main/java/org/onosproject/libgen/AetherResolver.java
@@ -24,10 +24,9 @@
 import org.eclipse.aether.connector.basic.BasicRepositoryConnectorFactory;
 import org.eclipse.aether.impl.DefaultServiceLocator;
 import org.eclipse.aether.repository.LocalRepository;
+import org.eclipse.aether.repository.Proxy;
 import org.eclipse.aether.repository.RemoteRepository;
 import org.eclipse.aether.repository.RepositoryPolicy;
-import org.eclipse.aether.repository.Proxy;
-import org.eclipse.aether.util.repository.AuthenticationBuilder;
 import org.eclipse.aether.resolution.ArtifactRequest;
 import org.eclipse.aether.resolution.ArtifactResult;
 import org.eclipse.aether.resolution.VersionRangeRequest;
@@ -37,6 +36,7 @@
 import org.eclipse.aether.spi.connector.transport.TransporterFactory;
 import org.eclipse.aether.transport.file.FileTransporterFactory;
 import org.eclipse.aether.transport.http.HttpTransporterFactory;
+import org.eclipse.aether.util.repository.AuthenticationBuilder;
 import org.eclipse.aether.version.Version;
 
 import java.io.BufferedReader;
@@ -49,8 +49,8 @@
 import java.util.List;
 import java.util.jar.Attributes;
 import java.util.jar.JarFile;
-import java.util.regex.Pattern;
 import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import static org.eclipse.aether.repository.RepositoryPolicy.CHECKSUM_POLICY_WARN;
 import static org.eclipse.aether.repository.RepositoryPolicy.UPDATE_POLICY_ALWAYS;
@@ -68,40 +68,38 @@
 
     static {
         DefaultServiceLocator locator = MavenRepositorySystemUtils.newServiceLocator();
-        locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class );
-        locator.addService(TransporterFactory.class, FileTransporterFactory.class );
-        locator.addService(TransporterFactory.class, HttpTransporterFactory.class );
+        locator.addService(RepositoryConnectorFactory.class, BasicRepositoryConnectorFactory.class);
+        locator.addService(TransporterFactory.class, FileTransporterFactory.class);
+        locator.addService(TransporterFactory.class, HttpTransporterFactory.class);
 
-        locator.setErrorHandler( new DefaultServiceLocator.ErrorHandler()
-        {
+        locator.setErrorHandler(new DefaultServiceLocator.ErrorHandler() {
             @Override
-            public void serviceCreationFailed( Class<?> type, Class<?> impl, Throwable exception )
-            {
+            public void serviceCreationFailed(Class<?> type, Class<?> impl, Throwable exception) {
                 exception.printStackTrace();
             }
-        } );
+        });
 
-        AetherResolver.system = locator.getService( RepositorySystem.class );
+        AetherResolver.system = locator.getService(RepositorySystem.class);
 
         DefaultRepositorySystemSession session = MavenRepositorySystemUtils.newSession();
 
-        LocalRepository localRepo = new LocalRepository("target/local-repo" );
-        session.setLocalRepositoryManager( system.newLocalRepositoryManager( session, localRepo ) );
+        LocalRepository localRepo = new LocalRepository("target/local-repo");
+        session.setLocalRepositoryManager(system.newLocalRepositoryManager(session, localRepo));
 
         //session.setTransferListener( new ConsoleTransferListener() );
         //session.setRepositoryListener( new ConsoleRepositoryListener() );
         AetherResolver.session = session;
     }
 
-    public static BuckArtifact getArtifact(String name, String uri, String repo, boolean generateForBazel) {
-        return new AetherResolver(repo).build(name, uri, generateForBazel);
+    public static BazelArtifact getArtifact(String name, String uri, String repo) {
+        return new AetherResolver(repo).build(name, uri);
     }
 
     private AetherResolver(String repoUrl) {
         this.repoUrl = repoUrl;
     }
 
-    private BuckArtifact build(String name, String uri, boolean generateForBazel) {
+    private BazelArtifact build(String name, String uri) {
         uri = uri.replaceFirst("mvn:", "");
         Artifact artifact = new DefaultArtifact(uri);
         String originalVersion = artifact.getVersion();
@@ -113,20 +111,20 @@
 
             if (originalVersion.endsWith("-SNAPSHOT")) {
                 String url = String.format("%s/%s/%s/%s/%s-%s.%s",
-                                            repoUrl,
-                                            artifact.getGroupId().replace('.', '/'),
-                                            artifact.getArtifactId(),
-                                            originalVersion,
-                                            artifact.getArtifactId(),
-                                            artifact.getVersion(),
-                                            artifact.getExtension());
+                                           repoUrl,
+                                           artifact.getGroupId().replace('.', '/'),
+                                           artifact.getArtifactId(),
+                                           originalVersion,
+                                           artifact.getArtifactId(),
+                                           artifact.getVersion(),
+                                           artifact.getExtension());
                 String mavenCoords = String.format("%s:%s:%s",
                                                    artifact.getGroupId(),
                                                    artifact.getArtifactId(),
                                                    originalVersion);
-                return BuckArtifact.getArtifact(name, url, sha, mavenCoords, osgiReady, generateForBazel);
+                return BazelArtifact.getArtifact(name, url, sha, mavenCoords, osgiReady);
             }
-            return BuckArtifact.getArtifact(name, artifact, sha, repoUrl, osgiReady, generateForBazel);
+            return BazelArtifact.getArtifact(name, artifact, sha, repoUrl, osgiReady);
         } catch (Exception e) {
             throw new RuntimeException(e);
         }
@@ -157,13 +155,13 @@
 
         // artifactId-version[-classifier].version.sha1
         file.append(artifact.getArtifactId())
-            .append('-').append(artifact.getVersion());
+                .append('-').append(artifact.getVersion());
 
         if (!artifact.getClassifier().isEmpty()) {
             file.append('-').append(artifact.getClassifier());
         }
         file.append('.').append(artifact.getExtension())
-            .append(".sha1");
+                .append(".sha1");
 
         String shaPath = Paths.get(directory, file.toString()).toString();
 
@@ -177,7 +175,7 @@
         rangeRequest.setArtifact(artifact);
         rangeRequest.setRepositories(repositories());
 
-        VersionRangeResult rangeResult = system.resolveVersionRange(session, rangeRequest );
+        VersionRangeResult rangeResult = system.resolveVersionRange(session, rangeRequest);
 
         Version newestVersion = rangeResult.getHighestVersion();
 
@@ -195,19 +193,19 @@
             // set authentication
             if ((proxyHostInfo.get(2) != null) && (proxyHostInfo.get(3) != null)) {
                 central.setProxy(
-                    new Proxy(Proxy.TYPE_HTTP, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1)),
-                          new AuthenticationBuilder()
-                          .addUsername(proxyHostInfo.get(2)).addPassword(proxyHostInfo.get(3)).build()));
+                        new Proxy(Proxy.TYPE_HTTP, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1)),
+                                  new AuthenticationBuilder()
+                                          .addUsername(proxyHostInfo.get(2)).addPassword(proxyHostInfo.get(3)).build()));
             } else {
                 central.setProxy(
-                    new Proxy(Proxy.TYPE_HTTP, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1))));
+                        new Proxy(Proxy.TYPE_HTTP, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1))));
             }
         }
 
         if (repoUrl != null && repoUrl.length() > 0) {
             RemoteRepository.Builder other =
-                new RemoteRepository.Builder("temp", "default", repoUrl)
-                    .setSnapshotPolicy(new RepositoryPolicy(true, UPDATE_POLICY_ALWAYS, CHECKSUM_POLICY_WARN));
+                    new RemoteRepository.Builder("temp", "default", repoUrl)
+                            .setSnapshotPolicy(new RepositoryPolicy(true, UPDATE_POLICY_ALWAYS, CHECKSUM_POLICY_WARN));
 
             // set https_proxy
             String env_https_proxy = System.getenv("HTTPS_PROXY");
@@ -217,12 +215,12 @@
                 // set authentication
                 if ((proxyHostInfo.get(2) != null) && (proxyHostInfo.get(3) != null)) {
                     other.setProxy(
-                        new Proxy(Proxy.TYPE_HTTPS, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1)),
-                            new AuthenticationBuilder()
-                            .addUsername(proxyHostInfo.get(2)).addPassword(proxyHostInfo.get(3)).build()));
+                            new Proxy(Proxy.TYPE_HTTPS, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1)),
+                                      new AuthenticationBuilder()
+                                              .addUsername(proxyHostInfo.get(2)).addPassword(proxyHostInfo.get(3)).build()));
                 } else {
                     other.setProxy(
-                        new Proxy(Proxy.TYPE_HTTPS, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1))));
+                            new Proxy(Proxy.TYPE_HTTPS, proxyHostInfo.get(0), Integer.valueOf(proxyHostInfo.get(1))));
                 }
             }
 
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelArtifact.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelArtifact.java
new file mode 100644
index 0000000..ae13b56
--- /dev/null
+++ b/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelArtifact.java
@@ -0,0 +1,235 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.libgen;
+
+import org.eclipse.aether.artifact.Artifact;
+
+/**
+ * Representation of a remote artifact for Bazel.
+ */
+public abstract class BazelArtifact {
+
+    private final String name;
+    private final String sha;
+    private final boolean osgiReady;
+
+    public static BazelArtifact getArtifact(String name, Artifact artifact, String sha, String repo,
+                                            boolean osgiReady) {
+        return new MavenArtifact(name, artifact, sha, repo, osgiReady);
+    }
+
+    public static BazelArtifact getArtifact(String name, String url, String sha, String mavenCoords,
+                                            boolean osgiReady) {
+        return new HTTPArtifact(name, url, sha, mavenCoords, osgiReady);
+    }
+
+    public static org.onosproject.libgen.BazelArtifact getArtifact(String name, String url, String sha) {
+        return new HTTPArtifact(name, url, sha, null, true);
+    }
+
+    public BazelArtifact(String name, String sha, boolean osgiReady) {
+        this.name = name;
+        this.sha = sha;
+        this.osgiReady = osgiReady;
+    }
+
+    public String name() {
+        return name.replaceAll("[.-]", "_");
+    }
+
+    abstract String fileName();
+
+    abstract String url();
+
+    abstract String url(boolean withClassifier);
+
+    private String jarTarget() {
+        return name != null ? name() : fileName();
+    }
+
+    private boolean isPublic() {
+        return name != null;
+    }
+
+    boolean isOsgiReady() {
+        return osgiReady;
+    }
+
+    String httpUrl() {
+        return "";
+    }
+
+    String mavenCoords() {
+        return null;
+    }
+
+    String bazelExport() {
+        return "@" + jarTarget() + "//:" + jarTarget();
+    }
+
+    private boolean isJar() {
+        return fileName().endsWith(".jar");
+    }
+
+    String getMavenJarFragment() {
+        System.out.println(name + " == " + httpUrl());
+        String sha256 = BazelLibGenerator.getHttpSha256(name, httpUrl());
+        String format = "\n" +
+                "    if \"%s\" not in native.existing_rules():\n" +
+                "        java_import_external(\n" +
+                "            name = \"%s\",\n" +
+                "            jar_sha256 = \"%s\",\n" +
+                "            licenses = [\"notice\"],\n" +
+                "            jar_urls = [\"%s\"]," +
+                "        )";
+
+        return String.format(format, jarTarget(), jarTarget(), sha256, httpUrl());
+
+    }
+
+    String getFragment() {
+        String visibility = isPublic() ? "[ 'PUBLIC' ]" : "[]";
+
+        String output = (isJar() ? "remote_jar" : "remote_file") + " (\n" +
+                "  name = '%s',\n" + // jar target
+                "  out = '%s',\n" + // jar file name
+                "  url = '%s',\n" + // maven url
+                "  sha1 = '%s',\n" + // artifact sha
+                (isJar() && mavenCoords() != null ?
+                        "  maven_coords = '" + mavenCoords() + "',\n" : "") +
+                "  visibility = %s,\n" +
+                ")\n\n";
+
+        return String.format(output, jarTarget(), fileName(), url(), sha, visibility);
+    }
+
+    private static class HTTPArtifact extends BazelArtifact {
+        private final String url;
+        private final String mavenCoords;
+
+        public HTTPArtifact(String name, String url, String sha,
+                            String mavenCoords, boolean osgiReady) {
+            super(name, sha, osgiReady);
+            this.url = url;
+            this.mavenCoords = mavenCoords;
+        }
+
+        @Override
+        String fileName() {
+            String[] parts = url.split("/");
+            return parts[parts.length - 1];
+        }
+
+        @Override
+        String mavenCoords() {
+            return mavenCoords;
+        }
+
+        @Override
+        String url() {
+            return url;
+        }
+
+        @Override
+        String url(boolean withClassifier) {
+            return url;
+        }
+
+        @Override
+        String httpUrl() {
+            return url;
+        }
+    }
+
+    private static class MavenArtifact extends BazelArtifact {
+        private final Artifact artifact;
+        private final String repo;
+
+        private MavenArtifact(String name, Artifact artifact, String sha,
+                              String repo, boolean osgiReady) {
+            super(name, sha, osgiReady);
+            this.artifact = artifact;
+            this.repo = repo;
+        }
+
+        @Override
+        String url() {
+            //mvn:[repo:]groupId:artifactId:[extension:[classifier:]]:version
+            StringBuilder mvnUrl = new StringBuilder("mvn:");
+            if (repo != null && repo.length() > 0) {
+                mvnUrl.append(repo).append(':');
+            }
+            mvnUrl.append(artifact.getGroupId()).append(':')
+                    .append(artifact.getArtifactId()).append(':')
+                    .append(artifact.getExtension()).append(':');
+            if (artifact.getClassifier() != null && artifact.getClassifier().length() > 0) {
+                mvnUrl.append(artifact.getClassifier()).append(':');
+            }
+            mvnUrl.append(artifact.getVersion());
+            return mvnUrl.toString();
+        }
+
+        @Override
+        String httpUrl() {
+            return "http://repo1.maven.org/maven2/" +
+                    artifact.getGroupId().replace(".", "/") +
+                    "/" + artifact.getArtifactId() +
+                    "/" + artifact.getVersion() +
+                    "/" + artifact.getFile().getName();
+        }
+
+        @Override
+        String url(boolean withClassifier) {
+            String url = url();
+            if (withClassifier && !isOsgiReady()) {
+                int i = url.lastIndexOf(':');
+                if (i > 0) {
+                    url = url.substring(0, i) + ":NON-OSGI" + url.substring(i);
+                }
+            }
+            return url;
+        }
+
+        //FIXME get sources jars
+
+        @Override
+        String mavenCoords() {
+            String classifer = artifact.getClassifier();
+            if ("jar".equals(artifact.getExtension().toLowerCase()) &&
+                    classifer.length() == 0) {
+                // shorter form
+                return String.format("%s:%s:%s",
+                                     artifact.getGroupId(),
+                                     artifact.getArtifactId(),
+                                     artifact.getVersion());
+            }
+            return String.format("%s:%s:%s:%s:%s",
+                                 artifact.getGroupId(),
+                                 artifact.getArtifactId(),
+                                 artifact.getExtension(),
+                                 classifer,
+                                 artifact.getVersion());
+        }
+
+        @Override
+        String fileName() {
+            return String.format("%s-%s.%s",
+                                 artifact.getArtifactId(),
+                                 artifact.getVersion(),
+                                 artifact.getExtension());
+        }
+    }
+}
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelLibGenerator.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelLibGenerator.java
new file mode 100755
index 0000000..991d4dd
--- /dev/null
+++ b/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelLibGenerator.java
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.libgen;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PrintWriter;
+import java.net.Authenticator;
+import java.net.InetSocketAddress;
+import java.net.PasswordAuthentication;
+import java.net.Proxy;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Stream;
+
+/**
+ * Generates a worspace inclusion file from a JSON file containing third-party
+ * library dependencies.
+ */
+public class BazelLibGenerator {
+
+    private final ObjectNode jsonRoot;
+    private final List<BazelArtifact> artifacts = new ArrayList<>();
+    private final List<BazelLibrary> libraries = new ArrayList<>();
+
+    /**
+     * Main entry point.
+     *
+     * @param args command-line arguments; JSON input file and Bazel workspace output file
+     */
+    public static void main(String[] args) throws Exception {
+        if (args.length < 2) {
+            System.err.println("sage: onos-lib-gen <input-deps.json> <output-workspace.bzl>");
+            System.exit(5);
+        }
+
+        // Parse args
+        String jsonFilePath = args[0];
+        String outputWorkspaceFilePath = args[1];
+
+        // Load and parse input JSON file
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
+        ObjectNode json = (ObjectNode) mapper.reader()
+                .readTree(new FileInputStream(jsonFilePath));
+
+        // Traverse dependencies and build a dependency graph (DAG)
+        org.onosproject.libgen.BazelLibGenerator generator = new org.onosproject.libgen.BazelLibGenerator(json).resolve();
+
+        // Write the output workspace file
+        generator.write(outputWorkspaceFilePath);
+        System.out.printf("\nFinish writing %s\n", outputWorkspaceFilePath);
+    }
+
+    public BazelLibGenerator(ObjectNode root) {
+        this.jsonRoot = root;
+    }
+
+    private BazelArtifact parseArtifact(Map.Entry<String, JsonNode> entry) {
+        String name = entry.getKey();
+        JsonNode value = entry.getValue();
+        String uri;
+        String repo = null;
+        if (value.isTextual()) {
+            uri = value.asText();
+        } else if (value.isObject()) {
+            uri = value.get("uri").asText();
+            repo = value.get("repo").asText("");
+        } else {
+            throw new RuntimeException("Unknown element for name: " + name +
+                                               " of type: " + value.getNodeType());
+        }
+
+        System.out.print(name + " ");
+        System.out.flush();
+        BazelArtifact bazelArtifact;
+        if (uri.startsWith("http")) {
+            String sha = getHttpSha256(name, uri);
+            bazelArtifact = BazelArtifact.getArtifact(name, uri, sha);
+        } else if (uri.startsWith("mvn")) {
+            uri = uri.replaceFirst("mvn:", "");
+            bazelArtifact = AetherResolver.getArtifact(name, uri, repo);
+        } else {
+            throw new RuntimeException("Unsupported artifact uri: " + uri);
+        }
+        System.out.println(bazelArtifact.url());
+        return bazelArtifact;
+    }
+
+    private BazelLibrary parseLibrary(Map.Entry<String, JsonNode> entry) {
+        String libraryName = entry.getKey();
+        JsonNode list = entry.getValue();
+        if (list.size() == 0) {
+            throw new RuntimeException("Empty library: " + libraryName);
+        }
+
+        List<String> libraryTargets = new ArrayList<>(list.size());
+        list.forEach(node -> {
+            String name;
+            if (node.isObject()) {
+                name = node.get("name").asText();
+            } else if (node.isTextual()) {
+                name = node.asText();
+            } else {
+                throw new RuntimeException("Unknown node type: " + node.getNodeType());
+            }
+            if (!name.contains(":")) {
+                name = ':' + name;
+            }
+            libraryTargets.add(name);
+        });
+
+        return BazelLibrary.getLibrary(libraryName, libraryTargets);
+    }
+
+    public org.onosproject.libgen.BazelLibGenerator resolve() {
+        jsonRoot.get("artifacts").fields().forEachRemaining(entry -> {
+            BazelArtifact bazelArtifact = parseArtifact(entry);
+            artifacts.add(bazelArtifact);
+        });
+
+        jsonRoot.get("libraries").fields().forEachRemaining(entry -> {
+            BazelLibrary library = parseLibrary(entry);
+            libraries.add(library);
+        });
+
+        return this;
+    }
+
+    private String generateArtifacts() {
+        StringBuilder sb = new StringBuilder();
+        StringBuilder mavenJars = new StringBuilder();
+        mavenJars.append("\ndef generated_maven_jars():");
+        artifacts.forEach(artifact -> {
+            mavenJars.append(artifact.getMavenJarFragment());
+        });
+        sb.append(mavenJars);
+        return sb.toString();
+    }
+
+    private String generateArtifactMap() {
+        StringBuilder artifactMap = new StringBuilder();
+
+        artifactMap.append("\nartifact_map = {}");
+
+        artifacts.forEach(artifact -> {
+            artifactMap.append("\nartifact_map[\"" + artifact.bazelExport() + "\"] = \"" + artifact.url(true) + "\"");
+        });
+
+        artifactMap.append(
+                "\n\n" +
+                        "def maven_coordinates(label):\n" +
+                        "    label_string = str(label)\n" +
+                        "    if label_string in artifact_map:\n" +
+                        "        return artifact_map[label_string]\n" +
+                        "    if (label_string.endswith(\":jar\")):\n" +
+                        "        label_string = label_string.replace(\":jar\", \"\")\n" +
+                        "        if label_string in artifact_map:\n" +
+                        "            return artifact_map[label_string]\n" +
+                        "    if type(label) == \"string\":\n" +
+                        "        return \"mvn:%s:%s:%s\" % (ONOS_GROUP_ID, label_string, ONOS_VERSION)\n" +
+                        "    return \"mvn:%s:%s:%s\" % (ONOS_GROUP_ID, label.name, ONOS_VERSION)\n"
+        );
+
+        return artifactMap.toString();
+    }
+
+    void write(String outputFilePath) {
+        DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME.withZone(ZoneId.of("UTC"));
+        File outputFile = new File(outputFilePath);
+        if (!outputFile.setWritable(true)) {
+            error("Failed to make %s to writeable.", outputFilePath);
+        }
+        try (PrintWriter writer = new PrintWriter(outputFile)) {
+            writer.write(String.format(
+                    "# ***** This file was auto-generated at %s. Do not edit this file manually. *****\n",
+                    formatter.format(Instant.now())));
+            writer.write("# ***** Use onos-lib-gen *****\n");
+
+            writer.write("\nload(\"//tools/build/bazel:variables.bzl\", \"ONOS_GROUP_ID\", \"ONOS_VERSION\")\n\n");
+            writer.write("\nload(\"@bazel_tools//tools/build_defs/repo:java.bzl\", \"java_import_external\")\n\n");
+
+            libraries.forEach(library -> writer.print(library.getFragment()));
+            writer.print(generateArtifacts());
+            writer.print(generateArtifactMap());
+            writer.flush();
+        } catch (FileNotFoundException e) {
+            error("File not found: %s", outputFilePath);
+        }
+        if (!outputFile.setReadOnly()) {
+            error("Failed to set %s to read-only.", outputFilePath);
+        }
+    }
+
+    static String getHttpSha1(String name, String urlStr) {
+        return getHttpSha(name, urlStr, "SHA-1");
+    }
+
+    static String getHttpSha256(String name, String urlStr) {
+        return getHttpSha(name, urlStr, "SHA-256");
+    }
+
+    private static String getHttpSha(String name, String urlStr, String algorithm) {
+        try {
+            MessageDigest md = MessageDigest.getInstance(algorithm);
+            byte[] buffer = new byte[8192];
+
+            URL url = new URL(urlStr);
+
+            Optional<File> cache = Optional.ofNullable(System.getenv("ONOS_ROOT"))
+                    .map(Paths::get)
+                    .map(Stream::of)
+                    .orElseGet(Stream::empty)
+                    .map(Path::toFile)
+                    .filter(File::canRead)
+                    .findAny();
+
+            System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
+
+            URLConnection connection;
+            String env_http_proxy = System.getenv("HTTP_PROXY");
+            if (env_http_proxy != null) {
+                List<String> proxyHostInfo = getProxyHostInfo(env_http_proxy);
+                Proxy http_proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHostInfo.get(0),
+                                                                                    Integer.valueOf(proxyHostInfo.get(1))));
+
+                if ((proxyHostInfo.get(2) != null) && (proxyHostInfo.get(3) != null)) {
+                    Authenticator authenticator = new Authenticator() {
+                        public PasswordAuthentication getPasswordAuthentication() {
+                            return (new PasswordAuthentication(proxyHostInfo.get(2), proxyHostInfo.get(3).toCharArray()));
+                        }
+                    };
+
+                    Authenticator.setDefault(authenticator);
+                }
+
+                connection = url.openConnection(http_proxy);
+            } else {
+                connection = url.openConnection();
+            }
+
+            connection.connect();
+            InputStream stream = connection.getInputStream();
+
+            int read;
+            while ((read = stream.read(buffer)) >= 0) {
+                md.update(buffer, 0, read);
+            }
+            StringBuilder result = new StringBuilder();
+            byte[] digest = md.digest();
+            for (byte b : digest) {
+                result.append(String.format("%02x", b));
+            }
+            return result.toString();
+        } catch (IOException | NoSuchAlgorithmException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    private static List<String> getProxyHostInfo(String proxyUrl) {
+        if (proxyUrl == null) {
+            return null;
+        }
+
+        // matching pattern
+        //  http://(host):(port) or http://(user):(pass)@(host):(port)
+        //  https://(host):(port) or https://(user):(pass)@(host):(port)
+        Pattern p = Pattern.compile("^(http|https):\\/\\/(([^:\\@]+):([^\\@]+)\\@)?([^:\\@\\/]+):([0-9]+)\\/?$");
+        Matcher m = p.matcher(proxyUrl);
+        if (!m.find()) {
+            return null;
+        }
+
+        // matcher group 3:user 4:pass 5:host 6:port (null if not set)
+        return Arrays.asList(m.group(5), m.group(6), m.group(3), m.group(4));
+    }
+
+    private void error(String format, String... args) {
+        if (!format.endsWith("\n")) {
+            format += '\n';
+        }
+        System.err.printf(format, args);
+        System.exit(1);
+    }
+}
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelLibrary.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelLibrary.java
new file mode 100644
index 0000000..1bbbd57
--- /dev/null
+++ b/tools/build/libgen/src/main/java/org/onosproject/libgen/BazelLibrary.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.libgen;
+
+import java.util.List;
+
+/**
+ * Representation of a java library for Bazel.
+ */
+public class BazelLibrary {
+
+    private final String name;
+    private final List<String> targets;
+
+    public static BazelLibrary getLibrary(String libraryName, List<String> libraryTargets) {
+        return new BazelLibrary(libraryName, libraryTargets);
+    }
+
+    private BazelLibrary(String name, List<String> targets) {
+        this.name = name;
+        this.targets = targets;
+    }
+
+    private String normalizeName(String name) {
+        if (!name.startsWith("//")) {
+            return name.replaceAll("[.-]", "_");
+        } else {
+            return name;
+        }
+    }
+
+    private String convertTargetName(String targetName) {
+        return normalizeName((targetName.startsWith("//") ?
+                targetName : targetName.replaceFirst(":", "@")));
+    }
+
+    private boolean isAllUpper(String s) {
+        return s.toUpperCase().equals(s);
+    }
+
+    public String name() {
+        return normalizeName(name);
+    }
+
+    public String getFragment() {
+        StringBuilder output = new StringBuilder()
+                .append(name())
+                .append(" = [");
+
+        targets.forEach(target -> {
+            if (isAllUpper(target)) {
+                output.append(String.format("] + %s + [", target.replaceFirst(":", "")));
+            } else {
+                String pathEnd = target.startsWith("//") ? "" : "//jar";
+                output.append(String.format("\n    \"%s%s\",", convertTargetName(target), pathEnd));
+            }
+        });
+        output.append("\n]\n");
+
+        return output.toString();
+    }
+
+}
\ No newline at end of file
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckArtifact.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckArtifact.java
deleted file mode 100644
index 11f529a..0000000
--- a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckArtifact.java
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.libgen;
-
-import org.eclipse.aether.artifact.Artifact;
-
-/**
- * Representation of a remote artifact for Buck.
- */
-public abstract class BuckArtifact {
-
-    private final String name;
-    private final String sha;
-    private final boolean osgiReady;
-    private final boolean generateForBazel;
-
-    public static BuckArtifact getArtifact(String name, Artifact artifact, String sha, String repo,
-                                           boolean osgiReady, boolean generateForBazel) {
-        return new MavenArtifact(name, artifact, sha, repo, osgiReady, generateForBazel);
-    }
-    public static BuckArtifact getArtifact(String name, String url, String sha, String mavenCoords,
-                                           boolean osgiReady, boolean generateForBazel) {
-        return new HTTPArtifact(name, url, sha, mavenCoords, osgiReady, generateForBazel);
-    }
-    public static BuckArtifact getArtifact(String name, String url, String sha, boolean generateForBazel) {
-        return new HTTPArtifact(name, url, sha, null, true, generateForBazel);
-    }
-
-    public BuckArtifact(String name, String sha, boolean osgiReady, boolean generateForBazel) {
-        this.name = name;
-        this.sha = sha;
-        this.osgiReady = osgiReady;
-        this.generateForBazel = generateForBazel;
-    }
-
-    public String name() {
-        if (!generateForBazel) {
-            return name;
-        } else {
-            return name.replaceAll("[.-]", "_");
-        }
-    }
-
-    abstract String fileName();
-
-    abstract String url();
-
-    abstract String url(boolean withClassifier);
-
-    private String jarTarget() {
-        return name != null ? name() : fileName();
-    }
-
-    private boolean isPublic() {
-        return name != null;
-    }
-
-    boolean isOsgiReady() {
-        return osgiReady;
-    }
-
-    boolean isGenerateForBazel() {
-        return generateForBazel;
-    }
-
-    String httpUrl() {
-        return "";
-    }
-
-    String mavenCoords() {
-        return null;
-    }
-
-    String bazelExport() {
-        return "@" + jarTarget() + "//:" + jarTarget();
-    }
-
-    private boolean isJar() {
-        return fileName().endsWith(".jar");
-    }
-
-    private String extractRepo() {
-        // This is a hack because the code above us already got rid of the maven repo
-        // info for artifacts
-        String url = url();
-        if (url.startsWith("http")) {
-            return url.substring(0, url.indexOf(fileName()) - mavenCoords().length() - 1);
-        } else {
-            return "";
-        }
-    }
-
-    String getBazelMavenJarFragment() {
-        System.out.println(name + " == " + httpUrl());
-
-        //String repo = extractRepo();
-        //String repoAttribute = "";
-        //if (!"".equals(repo)) {
-        //    repoAttribute = "            repository = \"" + repo + "\",\n";
-        //}
-
-        String sha256 = BuckLibGenerator.getHttpSha256(name, httpUrl());
-        String format = "\n" +
-                "    if \"%s\" not in native.existing_rules():\n" +
-                "        java_import_external(\n" +
-                "            name = \"%s\",\n" +
-                "            jar_sha256 = \"%s\",\n" +
-                "            licenses = [\"notice\"],\n" +
-                "            jar_urls = [\"%s\"]," +
-                "        )";
-
-        return String.format(format, jarTarget(), jarTarget(), sha256, httpUrl());
-
-    }
-
-    public String getBuckFragment() {
-        String visibility = isPublic() ? "[ 'PUBLIC' ]" : "[]";
-
-        String output = (isJar() ? "remote_jar" : "remote_file") + " (\n" +
-                "  name = '%s',\n" + // jar target
-                "  out = '%s',\n" + // jar file name
-                "  url = '%s',\n" + // maven url
-                "  sha1 = '%s',\n" + // artifact sha
-                ( isJar() && mavenCoords() != null ?
-                "  maven_coords = '"+ mavenCoords()+"',\n" : "" ) +
-                "  visibility = %s,\n" +
-                ")\n\n";
-
-        return String.format(output, jarTarget(), fileName(), url(), sha, visibility);
-    }
-
-    private static class HTTPArtifact extends BuckArtifact {
-        private final String url;
-        private final String mavenCoords;
-
-        public HTTPArtifact(String name, String url, String sha,
-                            String mavenCoords, boolean osgiReady, boolean generateForBazel) {
-            super(name, sha, osgiReady, generateForBazel);
-            this.url = url;
-            this.mavenCoords = mavenCoords;
-        }
-
-        @Override
-        String fileName() {
-            String[] parts = url.split("/");
-            return parts[parts.length - 1];
-        }
-
-        @Override
-        String mavenCoords() {
-            return mavenCoords;
-        }
-
-        @Override
-        String url() {
-            return url;
-        }
-
-        @Override
-        String url(boolean withClassifier) {
-            return url;
-        }
-
-        @Override
-        String httpUrl() {
-            return url;
-        }
-    }
-
-    private static class MavenArtifact extends BuckArtifact {
-        private final Artifact artifact;
-        private final String repo;
-
-        private MavenArtifact(String name, Artifact artifact, String sha,
-                              String repo, boolean osgiReady, boolean generateForBazel) {
-            super(name, sha, osgiReady, generateForBazel);
-            this.artifact = artifact;
-            this.repo = repo;
-        }
-
-        @Override
-        String url() {
-            //mvn:[repo:]groupId:artifactId:[extension:[classifier:]]:version
-            StringBuilder mvnUrl = new StringBuilder("mvn:");
-            if (repo != null && repo.length() > 0) {
-                mvnUrl.append(repo).append(':');
-            }
-            mvnUrl.append(artifact.getGroupId()).append(':')
-                  .append(artifact.getArtifactId()).append(':')
-                  .append(artifact.getExtension()).append(':');
-            if (artifact.getClassifier() != null && artifact.getClassifier().length() > 0) {
-                mvnUrl.append(artifact.getClassifier()).append(':');
-            }
-            mvnUrl.append(artifact.getVersion());
-            return mvnUrl.toString();
-        }
-
-        @Override
-        String httpUrl() {
-            return "http://repo1.maven.org/maven2/" +
-                    artifact.getGroupId().replace(".", "/") +
-                    "/" + artifact.getArtifactId() +
-                    "/" + artifact.getVersion() +
-                    "/" + artifact.getFile().getName();
-        }
-
-        @Override
-        String url(boolean withClassifier) {
-            String url = url();
-            if (withClassifier && !isOsgiReady()) {
-                int i = url.lastIndexOf(':');
-                if (i > 0) {
-                    url = url.substring(0, i) + ":NON-OSGI" + url.substring(i);
-                }
-            }
-            return url;
-        }
-
-        //FIXME get sources jars
-
-        @Override
-        String mavenCoords() {
-            String classifer = artifact.getClassifier();
-            if (!isOsgiReady() && !isGenerateForBazel()) {
-                classifer = "NON-OSGI" + classifer;
-            }
-
-            if ("jar".equals(artifact.getExtension().toLowerCase()) &&
-                    classifer.length() == 0) {
-                // shorter form
-                return String.format("%s:%s:%s",
-                                     artifact.getGroupId(),
-                                     artifact.getArtifactId(),
-                                     artifact.getVersion());
-            }
-            return String.format("%s:%s:%s:%s:%s",
-                                 artifact.getGroupId(),
-                                 artifact.getArtifactId(),
-                                 artifact.getExtension(),
-                                 classifer,
-                                 artifact.getVersion());
-        }
-
-        @Override
-        String fileName() {
-            return String.format("%s-%s.%s",
-                                 artifact.getArtifactId(),
-                                 artifact.getVersion(),
-                                 artifact.getExtension());
-        }
-    }
-}
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
deleted file mode 100755
index 9be3ef7..0000000
--- a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibGenerator.java
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.libgen;
-
-import com.fasterxml.jackson.core.JsonParser;
-import com.fasterxml.jackson.databind.JsonNode;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.node.ObjectNode;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.net.URL;
-import java.net.URLConnection;
-import java.net.PasswordAuthentication;
-import java.net.Authenticator;
-import java.net.Proxy;
-import java.net.InetSocketAddress;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.time.Instant;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.stream.Stream;
-import java.util.regex.Pattern;
-import java.util.regex.Matcher;
-
-/**
- * Generates a BUCK file from a JSON file containing third-party library
- * dependencies.
- */
-public class BuckLibGenerator {
-
-//    public static final String MAVEN_COORDS = "maven_coords";
-//    public static final String COMPILE_ONLY = "compile_only";
-//    public static final String RUNTIME_ONLY = "runtime_only";
-
-    private final ObjectNode jsonRoot;
-    private final List<BuckArtifact> artifacts = new ArrayList<>();
-    private final List<BuckLibrary> libraries = new ArrayList<>();
-
-    private static boolean generateForBazel = false;
-
-    /**
-     * Main entry point.
-     *
-     * @param args command-line arguments; JSON input file and BUCK output file
-     */
-    public static void main(String[] args) throws Exception {
-        if (args.length < 2) {
-            System.err.println("Not enough args.\n\nUSAGE: <json file> <output>");
-            System.exit(5);
-        }
-
-        if (args.length == 3 && "--bazel".equals(args[2])) {
-            generateForBazel = true;
-        }
-
-        // Parse args
-        String jsonFilePath = args[0];
-        String outputBuckPath = args[1];
-
-        // Load and parse input JSON file
-        ObjectMapper mapper = new ObjectMapper();
-        mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);
-        ObjectNode json = (ObjectNode) mapper.reader()
-                .readTree(new FileInputStream(jsonFilePath));
-
-        // Traverse dependencies and build a dependency graph (DAG)
-        BuckLibGenerator generator = new BuckLibGenerator(json).resolve();
-
-        // Write the output BUCK file
-        generator.write(outputBuckPath);
-        System.out.printf("\nFinish writing %s\n", outputBuckPath);
-    }
-
-    public BuckLibGenerator(ObjectNode root) {
-        this.jsonRoot = root;
-    }
-
-    private BuckArtifact parseArtifact(Map.Entry<String, JsonNode> entry) {
-        String name = entry.getKey();
-        JsonNode value = entry.getValue();
-        String uri;
-        String repo = null;
-        if (value.isTextual()) {
-            uri = value.asText();
-        } else if (value.isObject()) {
-            uri = value.get("uri").asText();
-            repo = value.get("repo").asText("");
-        } else {
-            throw new RuntimeException("Unknown element for name: " + name +
-                                       " of type: " + value.getNodeType());
-        }
-
-        System.out.print(name + " ");
-        System.out.flush();
-        BuckArtifact buckArtifact;
-        if (uri.startsWith("http")) {
-            String sha = generateForBazel ? getHttpSha256(name, uri) : getHttpSha1(name, uri);
-            buckArtifact = BuckArtifact.getArtifact(name, uri, sha, generateForBazel);
-        } else if (uri.startsWith("mvn")) {
-            uri = uri.replaceFirst("mvn:", "");
-//            if (repo != null) {
-//                System.out.println(name + " " + repo);
-//            }
-            buckArtifact = AetherResolver.getArtifact(name, uri, repo, generateForBazel);
-        } else {
-            throw new RuntimeException("Unsupported artifact uri: " + uri);
-        }
-        System.out.println(buckArtifact.url());
-        return buckArtifact;
-    }
-
-    private BuckLibrary parseLibrary(Map.Entry<String, JsonNode> entry) {
-        String libraryName = entry.getKey();
-        JsonNode list = entry.getValue();
-        if (list.size() == 0) {
-            throw new RuntimeException("Empty library: " + libraryName);
-        }
-
-        List<String> libraryTargets = new ArrayList<>(list.size());
-        list.forEach(node -> {
-            String name;
-            if (node.isObject()) {
-                name = node.get("name").asText();
-            } else if (node.isTextual()) {
-                name = node.asText();
-            } else {
-                throw new RuntimeException("Unknown node type: " + node.getNodeType());
-            }
-            if (!name.contains(":")) {
-                name = ':' + name;
-            }
-            libraryTargets.add(name);
-        });
-
-        return BuckLibrary.getLibrary(libraryName, libraryTargets, generateForBazel);
-    }
-
-    public BuckLibGenerator resolve() {
-        jsonRoot.get("artifacts").fields().forEachRemaining(entry -> {
-            BuckArtifact buckArtifact = parseArtifact(entry);
-            artifacts.add(buckArtifact);
-//            String artifactName = buckArtifact.name();
-//            if (artifacts.putIfAbsent(artifactName, buckArtifact) != null) {
-//                error("Duplicate artifact: %s", artifactName);
-//            }
-        });
-
-        jsonRoot.get("libraries").fields().forEachRemaining(entry -> {
-            BuckLibrary library = parseLibrary(entry);
-            libraries.add(library);
-//            String libraryName = library.name();
-//            if (libraries.putIfAbsent(libraryName, library) != null) {
-//                error("Duplicate library: %s", libraryName);
-//            }
-        });
-
-        return this;
-    }
-
-    private String generateArtifacts() {
-        StringBuilder sb = new StringBuilder();
-        if (!generateForBazel) {
-            artifacts.forEach(artifact -> sb.append(artifact.getBuckFragment()));
-        } else {
-            StringBuilder mavenJars = new StringBuilder();
-            mavenJars.append("\ndef generated_maven_jars():");
-            artifacts.forEach(artifact -> {
-                mavenJars.append(artifact.getBazelMavenJarFragment());
-            });
-            sb.append(mavenJars);
-        }
-        return sb.toString();
-    }
-
-    private String generateArtifactMap() {
-        StringBuilder artifactMap = new StringBuilder();
-
-        artifactMap.append("\nartifact_map = {}");
-
-        artifacts.forEach(artifact -> {
-            artifactMap.append("\nartifact_map[\"" + artifact.bazelExport() + "\"] = \"" + artifact.url(true) + "\"");
-        });
-
-        artifactMap.append(
-                "\n\n" +
-                "def maven_coordinates(label):\n" +
-                "    label_string = str(label)\n" +
-                "    if label_string in artifact_map:\n" +
-                "        return artifact_map[label_string]\n" +
-                "    if (label_string.endswith(\":jar\")):\n" +
-                "        label_string = label_string.replace(\":jar\", \"\")\n" +
-                "        if label_string in artifact_map:\n" +
-                "            return artifact_map[label_string]\n" +
-                "    if type(label) == \"string\":\n" +
-                "        return \"mvn:%s:%s:%s\" % (ONOS_GROUP_ID, label_string, ONOS_VERSION)\n" +
-                "    return \"mvn:%s:%s:%s\" % (ONOS_GROUP_ID, label.name, ONOS_VERSION)\n"
-        );
-
-        return artifactMap.toString();
-    }
-
-    void write(String outputFilePath) {
-        DateTimeFormatter formatter = DateTimeFormatter.RFC_1123_DATE_TIME.withZone(ZoneId.of("UTC"));
-        File outputFile = new File(outputFilePath);
-        if (!outputFile.setWritable(true)) {
-            error("Failed to make %s to writeable.", outputFilePath);
-        }
-        try (PrintWriter writer = new PrintWriter(outputFile)) {
-            writer.write(String.format(
-                    "# ***** This file was auto-generated at %s. Do not edit this file manually. *****\n",
-                    formatter.format(Instant.now())));
-            writer.write("# ***** Use onos-lib-gen *****\n");
-
-            if (!generateForBazel) {
-                // TODO - have to do this somehow for bazel
-                // rule to publish the onos dependency pom
-                writer.write("\npass_thru_pom(\n" +
-                        "    name = 'onos-dependencies-pom',\n" +
-                        "    src = 'pom.xml',\n" +
-                        "    out = 'onos-dependencies.pom',\n" +
-                        "    artifactId = 'onos-dependencies',\n" +
-                        ")\n\n");
-            } else {
-                writer.write("\nload(\"//tools/build/bazel:variables.bzl\", \"ONOS_GROUP_ID\", \"ONOS_VERSION\")\n\n");
-                writer.write("\nload(\"@bazel_tools//tools/build_defs/repo:java.bzl\", \"java_import_external\")\n\n");
-            }
-
-            libraries.forEach(library -> writer.print(library.getFragment()));
-            writer.print(generateArtifacts());
-            if (generateForBazel) {
-                writer.print(generateArtifactMap());
-            }
-            writer.flush();
-        } catch (FileNotFoundException e) {
-            error("File not found: %s", outputFilePath);
-        }
-        if (!outputFile.setReadOnly()) {
-            error("Failed to set %s to read-only.", outputFilePath);
-        }
-    }
-
-    static String getHttpSha1(String name, String urlStr) {
-        return getHttpSha(name, urlStr, "SHA-1");
-    }
-
-    static String getHttpSha256(String name, String urlStr) {
-        return getHttpSha(name, urlStr, "SHA-256");
-    }
-
-    private static String getHttpSha(String name, String urlStr, String algorithm) {
-        try {
-            MessageDigest md = MessageDigest.getInstance(algorithm);
-            byte[] buffer = new byte[8192];
-
-            URL url = new URL(urlStr);
-            String fname = new File(url.getPath()).getName();
-
-            // naively look for cache in buck-out/gen/
-            // only works for `buck fetch`-ed artifacts
-            // (=doesn't work for bndexe unless manually fetched)
-            Optional<File> cache = Optional.ofNullable(System.getenv("ONOS_ROOT"))
-                .map(Paths::get)
-                .map(Stream::of)
-                .orElseGet(Stream::empty)
-                // look for remote_file, remote_jar path
-                .flatMap(root -> Stream.of(root.resolve("buck-out/gen/lib/" + name + "/" + fname),
-                                           root.resolve("buck-out/gen/lib/" + fname + "/" + fname)))
-                .map(Path::toFile)
-                .filter(File::canRead)
-                .findAny();
-
-            if (cache.isPresent() && !generateForBazel) {
-                try (FileInputStream stream = new FileInputStream(cache.get())) {
-                    int read;
-                    while ((read = stream.read(buffer)) >= 0) {
-                        md.update(buffer, 0, read);
-                    }
-                    StringBuilder result = new StringBuilder();
-                    byte[] digest = md.digest();
-                    for (byte b : digest) {
-                        result.append(String.format("%02x", b));
-                    }
-                    return result.toString();
-                } catch (IOException e) {
-                    // fall back to regular download
-                }
-            }
-
-            System.setProperty("jdk.http.auth.tunneling.disabledSchemes", "");
-
-            URLConnection connection;
-            String env_http_proxy = System.getenv("HTTP_PROXY");
-            if (env_http_proxy != null) {
-                List<String> proxyHostInfo = getProxyHostInfo(env_http_proxy);
-                Proxy http_proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyHostInfo.get(0),
-                                             Integer.valueOf(proxyHostInfo.get(1))));
-
-                if ((proxyHostInfo.get(2) != null) && (proxyHostInfo.get(3) != null)) {
-                    Authenticator authenticator = new Authenticator() {
-                        public PasswordAuthentication getPasswordAuthentication() {
-                            return (new PasswordAuthentication(proxyHostInfo.get(2), proxyHostInfo.get(3).toCharArray()));
-                        }
-                    };
-
-                    Authenticator.setDefault(authenticator);
-                }
-
-                connection = url.openConnection(http_proxy);
-            } else {
-                connection = url.openConnection();
-            }
-
-            connection.connect();
-            InputStream stream = connection.getInputStream();
-
-            int read;
-            while ((read = stream.read(buffer)) >= 0) {
-                md.update(buffer, 0, read);
-            }
-            StringBuilder result = new StringBuilder();
-            byte[] digest = md.digest();
-            for (byte b : digest) {
-                result.append(String.format("%02x", b));
-            }
-            return result.toString();
-        } catch (IOException | NoSuchAlgorithmException e) {
-            throw new RuntimeException(e);
-        }
-    }
-
-    private static List<String> getProxyHostInfo(String proxyUrl) {
-        if (proxyUrl == null) {
-            return null;
-        }
-
-        // matching pattern
-        //  http://(host):(port) or http://(user):(pass)@(host):(port)
-        //  https://(host):(port) or https://(user):(pass)@(host):(port)
-        Pattern p = Pattern.compile("^(http|https):\\/\\/(([^:\\@]+):([^\\@]+)\\@)?([^:\\@\\/]+):([0-9]+)\\/?$");
-        Matcher m = p.matcher(proxyUrl);
-        if (!m.find()) {
-            return null;
-        }
-
-        // matcher group 3:user 4:pass 5:host 6:port (null if not set)
-        return Arrays.asList(m.group(5), m.group(6), m.group(3), m.group(4));
-    }
-
-    private void error(String format, String... args) {
-        if (!format.endsWith("\n")) {
-            format += '\n';
-        }
-        System.err.printf(format, args);
-        System.exit(1);
-    }
-}
diff --git a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibrary.java b/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibrary.java
deleted file mode 100644
index bb89581..0000000
--- a/tools/build/libgen/src/main/java/org/onosproject/libgen/BuckLibrary.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright 2016-present Open Networking Foundation
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onosproject.libgen;
-
-import org.eclipse.aether.artifact.Artifact;
-
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * Representation of a java library for Buck.
- */
-public class BuckLibrary {
-
-    private final String name;
-    private final List<String> targets;
-    private final boolean generateForBazel;
-
-    private final Set<Artifact> provided = new HashSet<>();
-    private final Set<Artifact> runtime = new HashSet<>();
-
-    public static BuckLibrary getLibrary(String libraryName, List<String> libraryTargets, boolean generateForBazel) {
-        return new BuckLibrary(libraryName, libraryTargets, generateForBazel);
-    }
-
-    private BuckLibrary(String name, List<String> targets, boolean generateForBazel) {
-        this.name = name;
-        this.targets = targets;
-        this.generateForBazel = generateForBazel;
-    }
-
-    private String normalizeName(String name) {
-        if (!name.startsWith("//")) {
-            return name.replaceAll("[.-]", "_");
-        } else {
-            return name;
-        }
-    }
-
-    private String convertBuckTargetName(String buckTargetName) {
-        return normalizeName((buckTargetName.startsWith("//") ?
-                buckTargetName : buckTargetName.replaceFirst(":", "@")));
-    }
-
-    private boolean isAllUpper(String s) {
-        return s.toUpperCase().equals(s);
-    }
-
-    public String name() {
-        if (!generateForBazel) {
-            return name;
-        } else {
-            return normalizeName(name);
-        }
-    }
-
-    public String getFragment() {
-        if (generateForBazel) {
-            return getBazelFragment();
-        } else {
-            return getBuckFragment();
-        }
-    }
-
-    private String getBazelFragment() {
-        StringBuilder output = new StringBuilder()
-                .append(name())
-                .append(" = [");
-
-        targets.forEach(target -> {
-            if (isAllUpper(target)) {
-                output.append(String.format("] + %s + [", target.replaceFirst(":", "")));
-            } else {
-                String pathEnd = target.startsWith("//") ? "" : "//jar";
-                output.append(String.format("\n    \"%s%s\",", convertBuckTargetName(target), pathEnd));
-            }
-        });
-        output.append("\n]\n");
-
-        return output.toString();
-    }
-
-    private String getBuckFragment() {
-        StringBuilder output = new StringBuilder()
-                .append("osgi_feature_group(\n")
-                .append(String.format("  name = '%s',\n", name))
-                .append("  visibility = ['PUBLIC'],\n")
-                .append("  exported_deps = [");
-
-        targets.forEach(target -> output.append(String.format("\n    '%s',", target)));
-        output.append("\n  ],\n)\n\n");
-
-        return output.toString();
-    }
-}
\ No newline at end of file
diff --git a/tools/build/onos-buck b/tools/build/onos-buck
deleted file mode 100755
index 0a839e0..0000000
--- a/tools/build/onos-buck
+++ /dev/null
@@ -1,130 +0,0 @@
-#!/bin/bash
-# -----------------------------------------------------------------------------
-# Runs the custom version of Buck required by ONOS.
-# -----------------------------------------------------------------------------
-
-set -e
-
-BUCK_URL="http://repo1.maven.org/maven2/org/onosproject/onos-buck/v2018.02.09.01/buck-v2018.02.09.01.zip"
-BUCK_SHA="45d8bd28f441991257babf89f7a317edb3a2b536"
-
-# onos-yang-tools buck plugin version
-YANG_VER="2.5"
-ONOS_PLUGIN_VER="1.0.3"
-MAVEN_BASE="https://repo1.maven.org/maven2"
-MAVEN_ONOSPROJECT="$MAVEN_BASE/org/onosproject"
-
-[  "-U" = "$1" ] && shift && FORCE_UPDATE=True
-
-ROOT_DIR=${ONOS_ROOT:-"$( cd "$( dirname "${BASH_SOURCE[0]}" )/../.." && pwd )"}
-
-mkdir -p $ROOT_DIR/bin
-pushd $ROOT_DIR/bin > /dev/null
-
-if [ -n "$FORCE_UPDATE" ] || [ ! -f "buck" ] || [ "$BUCK_SHA" != "$(cat .buck_sha)" ]; then
-    echo "Updating Buck..." >&2
-    rm -fr .buck_version .buck_sha buck plugins
-    mkdir -p cache
-    BUCK_FILE=$(basename $BUCK_URL)
-    # Check the local cache; download to cache if required
-    [ -f "cache/$BUCK_FILE" ] || curl -o cache/$BUCK_FILE -L $BUCK_URL
-    if [ -n "$(which shasum)" ]; then
-        SHA=$(shasum cache/$BUCK_FILE | cut -d' ' -f1)
-        if [ "$SHA" != "$BUCK_SHA" ]; then
-           echo "ERROR: Downloaded SHA ($SHA) does not match expected SHA ($BUCK_SHA)" &&
-           rm -f cache/$BUCK_FILE && exit 1
-        else
-           echo "$SHA" > .buck_sha
-        fi
-    else
-        echo "SHA cannot be verified"
-    fi
-    unzip -qq cache/$BUCK_FILE
-    # Kill buckd
-    ps -ef | egrep buckd | grep -v egrep | cut -c7-11 | xargs kill 2>/dev/null || :
-    rm -rf $ROOT_DIR/buck-out
-    printf "Successfully updated Buck in $ROOT_DIR/bin/buck to $BUCK_FILE\n\n"
-fi
-
-# Fetch & install onos yang tools buck plugin
-YANG_PLUGIN_CACHE="cache/onos-yang-compiler-buck-plugin-$YANG_VER.jar"
-if hash mvn 2>/dev/null; then
-  if [[ $YANG_VER = *"-SNAPSHOT" ]] || [ ! -f "$YANG_PLUGIN_CACHE" ]; then
-    echo "Updating Yang plugin $YANG_VER..." >&2
-    ARTIFACT="org.onosproject:onos-yang-compiler-buck-plugin:$YANG_VER"
-    mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.2:copy \
-        -Dartifact=$ARTIFACT \
-        -Dtransitive=false -Dmdep.overWriteSnapshots=true \
-        -DoutputDirectory=cache > /dev/null
-  fi
-else
-  if [ ! -f "$YANG_PLUGIN_CACHE" ]; then
-    echo "Updating Yang plugin $YANG_VER..." >&2
-    if [[ $YANG_VER = *"-SNAPSHOT" ]]; then
-      echo "mvn command must be installed to handle SNAPSHOT version"
-      exit 1
-    fi
-
-    curl -o "$YANG_PLUGIN_CACHE" \
-      -L $MAVEN_ONOSPROJECT/onos-yang-compiler-buck-plugin/$YANG_VER/onos-yang-compiler-buck-plugin-$YANG_VER.jar
-  fi
-
-  if [[ $YANG_VER != *"-SNAPSHOT" ]] && hash shasum 2>/dev/null; then
-    SHA=$(shasum $YANG_PLUGIN_CACHE | cut -d' ' -f1)
-    if [ ! -f "$YANG_PLUGIN_CACHE".sha1 ]; then
-      curl -o "$YANG_PLUGIN_CACHE".sha1 \
-        -L $MAVEN_ONOSPROJECT/onos-yang-compiler-buck-plugin/$YANG_VER/onos-yang-compiler-buck-plugin-$YANG_VER.jar.sha1
-    fi
-    YANG_PLUGIN_SHA=$(cat "$YANG_PLUGIN_CACHE".sha1)
-    if [ "$SHA" != "$YANG_PLUGIN_SHA" ]; then
-       echo "ERROR: Downloaded SHA ($SHA) did not match expected SHA ($YANG_PLUGIN_SHA)" &&
-       rm -f $YANG_PLUGIN_CACHE $YANG_PLUGIN_CACHE.sha1 && exit 1
-     fi
-  else
-    echo "SHA verification skipped"
-  fi
-fi
-install -Cv "$YANG_PLUGIN_CACHE" plugins/yang.jar >/dev/null
-
-# Fetch & install onos buck plugin
-
-ONOS_PLUGIN_CACHE="cache/onos-buck-plugin-$ONOS_PLUGIN_VER.jar"
-
-if [ ! -f "$ONOS_PLUGIN_CACHE" ]; then
-  echo "Updating ONOS plugin $ONOS_PLUGIN_VER..." >&2
-  curl -o "$ONOS_PLUGIN_CACHE" \
-    -L $MAVEN_ONOSPROJECT/onos-buck-plugin/$ONOS_PLUGIN_VER/onos-buck-plugin-$ONOS_PLUGIN_VER.jar
-fi
-
-
-if hash shasum 2>/dev/null; then
-  SHA=$(shasum $ONOS_PLUGIN_CACHE | cut -d' ' -f1)
-  if [ ! -f "$ONOS_PLUGIN_CACHE".sha1 ]; then
-    curl -o "$ONOS_PLUGIN_CACHE".sha1 \
-         -L $MAVEN_ONOSPROJECT/onos-buck-plugin/$ONOS_PLUGIN_VER/onos-buck-plugin-$ONOS_PLUGIN_VER.jar.sha1
-  fi
-  ONOS_PLUGIN_SHA=$(cat "$ONOS_PLUGIN_CACHE".sha1)
-  if [ "$SHA" != "$ONOS_PLUGIN_SHA" ]; then
-    echo "ERROR: Downloaded SHA ($SHA) did not match expected SHA ($ONOS_PLUGIN_SHA)" &&
-      rm -f $ONOS_PLUGIN_CACHE $ONOS_PLUGIN_CACHE.sha1 && exit 1
-  fi
-else
-    echo "SHA verification skipped"
-fi
-install -Cv "$ONOS_PLUGIN_CACHE" plugins/onos.jar >/dev/null
-
-popd > /dev/null
-
-BUCK=$ROOT_DIR/bin/buck
-
-if [ "${ONOS_NO_BUCKD:-1}" == "1" ]; then
-  export NO_BUCKD=1
-fi
-
-# HACK: Clean-up frequent problem-causers from buck-out
-#rm -fr \
-#    $ONOS_ROOT/buck-out/bin/lib/.netty \
-#    $ONOS_ROOT/buck-out/bin/lib/.KRYO
-
-# Finally, run the Buck command...
-$BUCK "$@"
diff --git a/tools/build/onos-buck-build-docs b/tools/build/onos-buck-build-docs
deleted file mode 100755
index 658a539..0000000
--- a/tools/build/onos-buck-build-docs
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/bash
-# -----------------------------------------------------------------------------
-# Builds the ONOS Java API docs with buck.
-# -----------------------------------------------------------------------------
-
-set -e
-
-[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
-. $ONOS_ROOT/tools/build/envDefaults
-
-onos-buck build  `onos-buck query "filter('.*-javadoc', '//...')"`
-
diff --git a/tools/build/onos-buck-publish b/tools/build/onos-buck-publish
deleted file mode 100755
index a4db536..0000000
--- a/tools/build/onos-buck-publish
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/bin/bash
-#
-# Script that queries buck for main and test artifacts and publishes them to
-# a remote Maven repository. Main artifacts are published with javadoc and sources
-# jars and auto-generated pom.xml files. Test artifacts are published as compiled
-# jars only. All artifacts are signed.
-#
-
-ARTIFACT_PUB=$(mktemp /tmp/onos-publish.XXXXX) &&
-  echo "Created temp file for artifact publish: $ARTIFACT_PUB" ||
-  { echo "Failed to create temp file"; exit 1; }
-
-TEST_PUB=$(mktemp /tmp/onos-publish-tests.XXXXX) &&
-  echo "Created temp file for test artifact publish: $TEST_PUB" ||
-  { echo "Failed to create temp file"; exit 1; }
-
-trap "rm -f $ARTIFACT_PUB $ARTIFACT_PUB.bak $TEST_PUB $TEST_PUB.bak" EXIT
-
-set -e
-set -x
-
-# Prepare artifact publish commands
-cat ${ONOS_ROOT}/tools/build/publish-target-list | grep -v '#' >> $ARTIFACT_PUB
-sed -i.bak 's/^/onos-buck publish --to-maven-central --include-source --include-javadoc --sign /g' $ARTIFACT_PUB
-cp $ARTIFACT_PUB $ARTIFACT_PUB.bak
-( echo "set -e"; cat $ARTIFACT_PUB.bak ) >$ARTIFACT_PUB
-
-# Print commands to be run and then run them
-cat $ARTIFACT_PUB
-bash $ARTIFACT_PUB
-
-# Prepare feature commands
-onos-buck query "filter('.*-feature', deps(filter('.*-oar', deps('//tools/package:onos-package', 1)),1))" > $TEST_PUB
-echo "//tools/package:onos-features" >> $TEST_PUB
-
-# Prepare test commands
-cat ${ONOS_ROOT}/tools/build/publish-test-target-list | grep -v '#' >> $TEST_PUB
-sed -i.bak 's#^#onos-buck publish --to-maven-central --sign #g' $TEST_PUB
-cp $TEST_PUB $TEST_PUB.bak
-( echo "set -e"; cat $TEST_PUB.bak ) >$TEST_PUB
-
-# Print commands to be run and then run them
-cat $TEST_PUB
-bash $TEST_PUB
-
-# stage ONOS poms
-onos-buck publish --to-maven-central --sign //:top-level-pom
-onos-buck publish --to-maven-central --sign //lib:onos-dependencies-pom
-
-if ! grep "maven_url" $ONOS_ROOT/.buckconfig.local | grep -v '#' | grep -q snapshots ; then
-    # Close the staging area
-    onos-close-staging
-fi
diff --git a/tools/build/onos-buck-publish-local b/tools/build/onos-buck-publish-local
deleted file mode 100755
index 6c52db7..0000000
--- a/tools/build/onos-buck-publish-local
+++ /dev/null
@@ -1,10 +0,0 @@
-#!/bin/bash
-
-set -e
-onos-buck -V
-
-for package in `cat ${ONOS_ROOT}/tools/build/publish-target-list ${ONOS_ROOT}/tools/build/publish-test-target-list | grep -v '#'`; do
-    onos-buck publish --to-local-repo ${package}
-done
-
-
diff --git a/tools/build/onos-lib-gen b/tools/build/onos-lib-gen
index 82ddc5f..522c0ae 100755
--- a/tools/build/onos-lib-gen
+++ b/tools/build/onos-lib-gen
@@ -9,7 +9,7 @@
 cd $ONOS_ROOT
 
 REPO=${M2_REPO:-~/.m2/repository}
-VER=1.5
+VER=1.6-SNAPSHOT
 ARTIFACT=org/onosproject/onos-libgen/$VER/onos-libgen-$VER.jar
 JAR=$REPO/$ARTIFACT
 
@@ -21,4 +21,4 @@
     [ -f $JAR ] && printf "Done.\n"
 fi
 
-[ -z "$1" -o "$1" = "bazel" ] && java -jar $JAR lib/deps.json tools/build/bazel/generate_workspace.bzl --bazel
\ No newline at end of file
+java -jar $JAR lib/deps.json tools/build/bazel/generate_workspace.bzl --bazel
\ No newline at end of file
diff --git a/tools/build/push-buck-plugin b/tools/build/push-buck-plugin
deleted file mode 100755
index 97df2e5..0000000
--- a/tools/build/push-buck-plugin
+++ /dev/null
@@ -1,31 +0,0 @@
-#!/bin/bash
-# -----------------------------------------------------------------------------
-# Builds and uploads an ONOS buck plugin release
-# -----------------------------------------------------------------------------
-
-if [ $# -ne 1 ]; then
-    echo "Usage: push-buck-plugin version"
-    exit 1
-fi
-
-PLUGIN_VERSION="$1"
-PLUGIN_FILE="buck-out/gen/tools/build/buck-plugin/onos.jar"
-UPLOAD_BASE="https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-buck-plugin/$PLUGIN_VERSION"
-
-# Build the buck plugin
-onos-buck build //tools/build/buck-plugin:onos
-
-# Make the signature file
-gpg --armor --detach-sig $PLUGIN_FILE
-
-# Make the MD5 checksum file
-md5 -q $PLUGIN_FILE >$PLUGIN_FILE.md5
-
-# Make the SHA1 checksum file
-( shasum $PLUGIN_FILE | cut -d' ' -f1 ) > $PLUGIN_FILE.sha1
-
-curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE $UPLOAD_BASE/onos-buck-plugin-$PLUGIN_VERSION.jar
-curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE.asc $UPLOAD_BASE/onos-buck-plugin-$PLUGIN_VERSION.jar.asc
-curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE.md5 $UPLOAD_BASE/onos-buck-plugin-$PLUGIN_VERSION.jar.md5
-curl -v -u "$SONATYPE_USER:$SONATYPE_PASSWORD" --upload-file $PLUGIN_FILE.sha1 $UPLOAD_BASE/onos-buck-plugin-$PLUGIN_VERSION.jar.sha1
-
diff --git a/tools/build/swagger/BUILD b/tools/build/swagger/BUILD
new file mode 100644
index 0000000..fff3296
--- /dev/null
+++ b/tools/build/swagger/BUILD
@@ -0,0 +1,16 @@
+SWAGGER_EXECUTABLE = "swagger_generator"
+
+COMPILE_DEPS = JACKSON + [
+    "@com_google_guava_guava//jar",
+    "@qdox//jar",
+    "@org_apache_felix_scr_bnd//jar",
+]
+
+java_binary(
+    name = SWAGGER_EXECUTABLE,
+    srcs = glob(["src/main/java/org/onosproject/swagger/SwaggerGenerator.java"]),
+    main_class = "org.onosproject.swagger.SwaggerGenerator",
+    resources = glob(["src/main/resources/registrator.javat"]),
+    visibility = ["//visibility:public"],
+    deps = COMPILE_DEPS,
+)
diff --git a/tools/build/swagger/src/main/java/org/onosproject/swagger/SwaggerGenerator.java b/tools/build/swagger/src/main/java/org/onosproject/swagger/SwaggerGenerator.java
new file mode 100644
index 0000000..f2c6658
--- /dev/null
+++ b/tools/build/swagger/src/main/java/org/onosproject/swagger/SwaggerGenerator.java
@@ -0,0 +1,566 @@
+/*
+ * Copyright 2016-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.swagger;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ArrayNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.ImmutableList;
+import com.google.common.io.ByteStreams;
+import com.google.common.io.Files;
+import com.thoughtworks.qdox.JavaProjectBuilder;
+import com.thoughtworks.qdox.model.DocletTag;
+import com.thoughtworks.qdox.model.JavaAnnotation;
+import com.thoughtworks.qdox.model.JavaClass;
+import com.thoughtworks.qdox.model.JavaMethod;
+import com.thoughtworks.qdox.model.JavaParameter;
+import com.thoughtworks.qdox.model.JavaType;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.time.Year;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
+
+/**
+ * Generates Swagger JSON artifacts from the Java source files.
+ */
+public class SwaggerGenerator {
+
+    private final ObjectMapper mapper = new ObjectMapper();
+
+    private static final String JSON_FILE = "swagger.json";
+    private static final String GEN_SRC = "generated-sources";
+    private static final String REG_SRC = "/registrator.javat";
+
+    private static final String PATH = "javax.ws.rs.Path";
+    private static final String PATH_PARAM = "javax.ws.rs.PathParam";
+    private static final String QUERY_PARAM = "javax.ws.rs.QueryParam";
+    private static final String POST = "javax.ws.rs.POST";
+    private static final String PATCH = "javax.ws.rs.PATCH";
+    private static final String GET = "javax.ws.rs.GET";
+    private static final String PUT = "javax.ws.rs.PUT";
+    private static final String DELETE = "javax.ws.rs.DELETE";
+    private static final String PRODUCES = "javax.ws.rs.Produces";
+    private static final String CONSUMES = "javax.ws.rs.Consumes";
+    private static final String JSON = "MediaType.APPLICATION_JSON";
+    private static final String OCTET_STREAM = "MediaType.APPLICATION_OCTET_STREAM";
+    private static final String RESPONSES = "io.swagger.annotations.ApiResponses";
+
+    private final List<File> srcs;
+    private final List<File> resources;
+    private final File srcDirectory;
+    private final File resourceDirectory;
+    private final File genSrcOutputDirectory;
+    private final File genResourcesOutputDirectory;
+    private final String webContext;
+    private final String apiTitle;
+    private final String apiVersion;
+    private final String apiPackage;
+    private final String apiDescription;
+
+    private String x(File f) {
+        return f == null ? "null" : f.getAbsolutePath();
+    }
+
+    public SwaggerGenerator(List<File> srcs, List<File> resources,
+                            File srcDirectory, File resourceDirectory,
+                            File genSrcOutputDirectory, File genResourcesOutputDirectory,
+                            String webContext, String apiTitle, String apiVersion,
+                            String apiPackage, String apiDescription) {
+        this.srcs = srcs;
+        this.resources = resources;
+        this.srcDirectory = srcDirectory;
+        this.resourceDirectory = resourceDirectory;
+        this.genSrcOutputDirectory = genSrcOutputDirectory;
+        this.genResourcesOutputDirectory = genResourcesOutputDirectory;
+        this.webContext = webContext;
+
+        this.apiTitle = apiTitle;
+        this.apiVersion = apiVersion;
+        this.apiPackage = apiPackage;
+        this.apiDescription = apiDescription;
+    }
+
+    public void execute() {
+        try {
+            JavaProjectBuilder builder = new JavaProjectBuilder();
+            if (srcDirectory != null) {
+                builder.addSourceTree(new File(srcDirectory, "src/main/java"));
+            }
+            if (srcs != null) {
+                srcs.forEach(src -> {
+                    if (src.toString().endsWith(".java")) {
+                        try {
+                            builder.addSource(src);
+                        } catch (IOException e) {
+                            throw new RuntimeException(e);
+                        }
+                    }
+                });
+            }
+
+            ObjectNode root = initializeRoot(webContext, apiTitle, apiVersion, apiDescription);
+            ArrayNode tags = mapper.createArrayNode();
+            ObjectNode paths = mapper.createObjectNode();
+            ObjectNode definitions = mapper.createObjectNode();
+
+            root.set("tags", tags);
+            root.set("paths", paths);
+            root.set("definitions", definitions);
+
+            // TODO: Process resources to allow lookup of files by name
+
+            builder.getClasses().forEach(jc -> processClass(jc, paths, tags, definitions, srcDirectory));
+
+            if (paths.size() > 0) {
+                genCatalog(genResourcesOutputDirectory, root);
+                if (!isNullOrEmpty(apiPackage)) {
+                    genRegistrator(genSrcOutputDirectory, webContext, apiTitle, apiVersion,
+                                   apiPackage, apiDescription);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("Unable to generate ONOS REST API documentation", e);
+        }
+    }
+
+    // initializes top level root with Swagger required specifications
+    private ObjectNode initializeRoot(String webContext, String apiTitle,
+                                      String apiVersion, String apiDescription) {
+        ObjectNode root = mapper.createObjectNode();
+        root.put("swagger", "2.0");
+        ObjectNode info = mapper.createObjectNode();
+        root.set("info", info);
+
+        root.put("basePath", webContext);
+        info.put("version", apiVersion);
+        info.put("title", apiTitle);
+        info.put("description", apiDescription);
+
+        ArrayNode produces = mapper.createArrayNode();
+        produces.add("application/json");
+        root.set("produces", produces);
+
+        ArrayNode consumes = mapper.createArrayNode();
+        consumes.add("application/json");
+        root.set("consumes", consumes);
+
+        return root;
+    }
+
+    // Checks whether javaClass has a path tag associated with it and if it does
+    // processes its methods and creates a tag for the class on the root
+    void processClass(JavaClass javaClass, ObjectNode paths, ArrayNode tags,
+                      ObjectNode definitions, File srcDirectory) {
+        // If the class does not have a Path tag then ignore it
+        JavaAnnotation annotation = getPathAnnotation(javaClass);
+        if (annotation == null) {
+            return;
+        }
+
+        String path = getPath(annotation);
+        if (path == null) {
+            return;
+        }
+
+        String resourcePath = "/" + path;
+        String tagPath = path.isEmpty() ? "/" : path;
+
+        // Create tag node for this class.
+        ObjectNode tagObject = mapper.createObjectNode();
+        tagObject.put("name", tagPath);
+        if (javaClass.getComment() != null) {
+            tagObject.put("description", shortText(javaClass.getComment()));
+        }
+        tags.add(tagObject);
+
+        // Create an array node add to all methods from this class.
+        ArrayNode tagArray = mapper.createArrayNode();
+        tagArray.add(tagPath);
+
+        processAllMethods(javaClass, resourcePath, paths, tagArray, definitions, srcDirectory);
+    }
+
+    private JavaAnnotation getPathAnnotation(JavaClass javaClass) {
+        Optional<JavaAnnotation> optional = javaClass.getAnnotations()
+                .stream().filter(a -> a.getType().getName().equals(PATH)).findAny();
+        return optional.orElse(null);
+    }
+
+    // Checks whether a class's methods are REST methods and then places all the
+    // methods under a specific path into the paths node
+    private void processAllMethods(JavaClass javaClass, String resourcePath,
+                                   ObjectNode paths, ArrayNode tagArray, ObjectNode definitions,
+                                   File srcDirectory) {
+        // map of the path to its methods represented by an ObjectNode
+        Map<String, ObjectNode> pathMap = new HashMap<>();
+
+        javaClass.getMethods().forEach(javaMethod -> {
+            javaMethod.getAnnotations().forEach(annotation -> {
+                String name = annotation.getType().getName();
+                if (name.equals(PATCH) || name.equals(POST) || name.equals(GET) || name.equals(DELETE) ||
+                        name.equals(PUT)) {
+                    // substring(12) removes "javax.ws.rs."
+                    String method = annotation.getType().toString().substring(12).toLowerCase();
+                    processRestMethod(javaMethod, method, pathMap, resourcePath, tagArray, definitions, srcDirectory);
+                }
+            });
+        });
+
+        // for each path add its methods to the path node
+        for (Map.Entry<String, ObjectNode> entry : pathMap.entrySet()) {
+            paths.set(entry.getKey(), entry.getValue());
+        }
+
+
+    }
+
+    private void processRestMethod(JavaMethod javaMethod, String method,
+                                   Map<String, ObjectNode> pathMap,
+                                   String resourcePath, ArrayNode tagArray,
+                                   ObjectNode definitions, File srcDirectory) {
+        String fullPath = resourcePath, consumes = "", produces = "",
+                comment = javaMethod.getComment();
+        DocletTag tag = javaMethod.getTagByName("onos.rsModel");
+        for (JavaAnnotation annotation : javaMethod.getAnnotations()) {
+            String name = annotation.getType().getName();
+            if (name.equals(PATH)) {
+                fullPath = resourcePath + "/" + getPath(annotation);
+                fullPath = fullPath.replaceFirst("^//", "/");
+            }
+            if (name.equals(CONSUMES)) {
+                consumes = getIOType(annotation);
+            }
+            if (name.equals(PRODUCES)) {
+                produces = getIOType(annotation);
+            }
+        }
+        ObjectNode methodNode = mapper.createObjectNode();
+        methodNode.set("tags", tagArray);
+
+        addSummaryDescriptions(methodNode, comment);
+        addJsonSchemaDefinition(srcDirectory, definitions, tag);
+
+        processParameters(javaMethod, methodNode, method, tag);
+
+        processConsumesProduces(methodNode, "consumes", consumes);
+        processConsumesProduces(methodNode, "produces", produces);
+        if (tag == null || !(tag.getParameters().size() > 1)) {
+            addResponses(javaMethod, methodNode, tag, false);
+        } else {
+            addResponses(javaMethod, methodNode, tag, true);
+        }
+
+        ObjectNode operations = pathMap.get(fullPath);
+        if (operations == null) {
+            operations = mapper.createObjectNode();
+            operations.set(method, methodNode);
+            pathMap.put(fullPath, operations);
+        } else {
+            operations.set(method, methodNode);
+        }
+    }
+
+    private void addJsonSchemaDefinition(File srcDirectory, ObjectNode definitions, DocletTag tag) {
+        final File definitionsDirectory;
+        if (resourceDirectory != null) {
+            definitionsDirectory = new File(resourceDirectory, "definitions");
+        } else if (srcDirectory != null) {
+            definitionsDirectory = new File(srcDirectory + "/src/main/resources/definitions");
+        } else {
+            definitionsDirectory = null;
+        }
+        if (tag != null) {
+            tag.getParameters().forEach(param -> {
+                try {
+                    File config;
+                    if (definitionsDirectory != null) {
+                        config = new File(definitionsDirectory.getAbsolutePath() + "/" + param + ".json");
+                    } else {
+                        config = resources.stream().filter(f -> f.getName().equals(param + ".json")).findFirst().orElse(null);
+                    }
+                    definitions.set(param, mapper.readTree(config));
+                } catch (IOException e) {
+                    throw new RuntimeException(String.format("Could not process %s in %s@%s: %s",
+                                                             tag.getName(), tag.getContext(), tag.getLineNumber(),
+                                                             e.getMessage()), e);
+                }
+            });
+        }
+    }
+
+    private void processConsumesProduces(ObjectNode methodNode, String type, String io) {
+        if (!io.equals("")) {
+            ArrayNode array = mapper.createArrayNode();
+            methodNode.set(type, array);
+            array.add(io);
+        }
+    }
+
+    private void addSummaryDescriptions(ObjectNode methodNode, String comment) {
+        String summary = "", description;
+        if (comment != null) {
+            if (comment.contains(".")) {
+                int periodIndex = comment.indexOf(".");
+                summary = comment.substring(0, periodIndex);
+                description = comment.length() > periodIndex + 1 ?
+                        comment.substring(periodIndex + 1).trim() : "";
+            } else {
+                description = comment;
+            }
+            methodNode.put("summary", summary);
+            methodNode.put("description", description);
+        }
+    }
+
+    private Optional<JavaAnnotation> getResponsesAnnotation(JavaMethod javaMethod) {
+        return javaMethod.getAnnotations().stream().filter(
+                a -> a.getType().getName().equals(RESPONSES)
+        ).findAny();
+    }
+
+    // TODO: add json schema for responses
+    private void addResponses(JavaMethod javaMethod, ObjectNode methodNode, DocletTag tag, boolean responseJson) {
+        ObjectNode responses = mapper.createObjectNode();
+        methodNode.set("responses", responses);
+
+        Optional<JavaAnnotation> responsesAnnotation = getResponsesAnnotation(javaMethod);
+
+        if (responsesAnnotation.isPresent()) {
+            Object annotationsObj = responsesAnnotation.get().getNamedParameter("value");
+            if (annotationsObj != null && annotationsObj instanceof List) {
+                List<JavaAnnotation> responseAnnotation = (List<JavaAnnotation>) annotationsObj;
+                responseAnnotation.forEach(
+                        javaAnnotation -> {
+                            ObjectNode response = mapper.createObjectNode();
+                            response.put("description",
+                                    String.valueOf(javaAnnotation.getNamedParameter("message"))
+                                            .replaceAll("^\"|\"$", ""));
+                            responses.set(String.valueOf(javaAnnotation.getNamedParameter("code")), response);
+                        }
+                );
+            }
+        } else {
+            ObjectNode success = mapper.createObjectNode();
+            success.put("description", "successful operation");
+            responses.set("200", success);
+
+            ObjectNode defaultObj = mapper.createObjectNode();
+            defaultObj.put("description", "Unexpected error");
+            responses.set("default", defaultObj);
+
+            if (tag != null && responseJson) {
+                ObjectNode schema = mapper.createObjectNode();
+                tag.getParameters().stream().forEach(
+                        param -> schema.put("$ref", "#/definitions/" + param));
+                success.set("schema", schema);
+            }
+        }
+    }
+
+    // Checks if the annotations has a value of JSON and returns the string
+    // that Swagger requires
+    private String getIOType(JavaAnnotation annotation) {
+        if (annotation.getNamedParameter("value").toString().equals(JSON)) {
+            return "application/json";
+        } else if (annotation.getNamedParameter("value").toString().equals(OCTET_STREAM)) {
+            return "application/octet_stream";
+        }
+        return "";
+    }
+
+    // If the annotation has a Path tag, returns the value with leading and
+    // trailing double quotes and slash removed.
+    private String getPath(JavaAnnotation annotation) {
+        String path = annotation.getNamedParameter("value").toString();
+        return path == null ? null : path.replaceAll("(^[\\\"/]*|[/\\\"]*$)", "");
+    }
+
+    // Processes parameters of javaMethod and enters the proper key-values into the methodNode
+    private void processParameters(JavaMethod javaMethod, ObjectNode methodNode, String method, DocletTag tag) {
+        ArrayNode parameters = mapper.createArrayNode();
+        methodNode.set("parameters", parameters);
+        boolean required = true;
+
+        for (JavaParameter javaParameter : javaMethod.getParameters()) {
+            ObjectNode individualParameterNode = mapper.createObjectNode();
+            Optional<JavaAnnotation> optional = javaParameter.getAnnotations().stream().filter(
+                    annotation -> annotation.getType().getName().equals(PATH_PARAM) ||
+                            annotation.getType().getName().equals(QUERY_PARAM)).findAny();
+            JavaAnnotation pathType = optional.orElse(null);
+
+            String annotationName = javaParameter.getName();
+
+
+            if (pathType != null) { //the parameter is a path or query parameter
+                individualParameterNode.put("name",
+                                            pathType.getNamedParameter("value")
+                                                    .toString().replace("\"", ""));
+                if (pathType.getType().getName().equals(PATH_PARAM)) {
+                    individualParameterNode.put("in", "path");
+                } else if (pathType.getType().getName().equals(QUERY_PARAM)) {
+                    individualParameterNode.put("in", "query");
+                }
+                individualParameterNode.put("type", getType(javaParameter.getType()));
+            } else { // the parameter is a body parameter
+                individualParameterNode.put("name", annotationName);
+                individualParameterNode.put("in", "body");
+
+                // Adds the reference to the Json model for the input
+                // that goes in the post or put operation
+                if (tag != null && (method.toLowerCase().equals("post") ||
+                        method.toLowerCase().equals("put"))) {
+                    ObjectNode schema = mapper.createObjectNode();
+                    tag.getParameters().stream().forEach(param -> {
+                        schema.put("$ref", "#/definitions/" + param);
+                    });
+                    individualParameterNode.set("schema", schema);
+                }
+            }
+            for (DocletTag p : javaMethod.getTagsByName("param")) {
+                if (p.getValue().contains(annotationName)) {
+                    String description = "";
+                    if (p.getValue().split(" ", 2).length >= 2) {
+                        description = p.getValue().split(" ", 2)[1].trim();
+                        if (description.contains("optional")) {
+                            required = false;
+                        }
+                    } else {
+                        throw new RuntimeException(String.format("No description for parameter \"%s\" in " +
+                                                                         "method \"%s\" in %s (line %d)",
+                                                                 p.getValue(), javaMethod.getName(),
+                                                                 javaMethod.getDeclaringClass().getName(),
+                                                                 javaMethod.getLineNumber()));
+                    }
+                    individualParameterNode.put("description", description);
+                }
+            }
+            individualParameterNode.put("required", required);
+            parameters.add(individualParameterNode);
+        }
+    }
+
+    // Returns the Swagger specified strings for the type of a parameter
+    private String getType(JavaType javaType) {
+        String type = javaType.getFullyQualifiedName();
+        String value;
+        if (type.equals(String.class.getName())) {
+            value = "string";
+        } else if (type.equals("int")) {
+            value = "integer";
+        } else if (type.equals(boolean.class.getName())) {
+            value = "boolean";
+        } else if (type.equals(long.class.getName())) {
+            value = "number";
+        } else {
+            value = "";
+        }
+        return value;
+    }
+
+    // Writes the swagger.json file using the supplied JSON root.
+    private void genCatalog(File dstDirectory, ObjectNode root) {
+        File swaggerCfg = new File(dstDirectory, JSON_FILE);
+        if (dstDirectory.exists() || dstDirectory.mkdirs()) {
+            try (FileWriter fw = new FileWriter(swaggerCfg);
+                 PrintWriter pw = new PrintWriter(fw)) {
+                pw.println(root.toString());
+            } catch (IOException e) {
+                throw new RuntimeException("Unable to write " + JSON_FILE, e);
+            }
+        } else {
+            throw new RuntimeException("Unable to create " + dstDirectory);
+        }
+    }
+
+    // Generates the registrator Java component.
+    private void genRegistrator(File dstDirectory, String webContext,
+                                String apiTitle, String apiVersion,
+                                String apiPackage, String apiDescription) {
+        File dir = new File(dstDirectory, resourceDirectory != null ? GEN_SRC : ".");
+        File reg = new File(dir, apiRegistratorPath(apiPackage));
+        File pkg = reg.getParentFile();
+        if (pkg.exists() || pkg.mkdirs()) {
+            try {
+                String src = new String(ByteStreams.toByteArray(getClass().getResourceAsStream(REG_SRC)));
+                src = src.replace("${api.package}", apiPackage)
+                        .replace("${web.context}", webContext)
+                        .replace("${api.title}", apiTitle)
+                        .replace("${api.description}", apiDescription)
+                        .replace("${year}", Year.now().toString());
+
+                Files.write(src.getBytes(), reg);
+            } catch (IOException e) {
+                throw new RuntimeException("Unable to write " + reg, e);
+            }
+        } else {
+            throw new RuntimeException("Unable to create " + reg);
+        }
+    }
+
+    private String shortText(String comment) {
+        int i = comment.indexOf('.');
+        return i > 0 ? comment.substring(0, i) : comment;
+    }
+
+    public static String apiRegistratorPath(String apiPackage) {
+        return apiPackage.replaceAll("\\.", "/") + "/ApiDocRegistrator.java";
+    }
+
+    private static List<File> getFiles(String commaSeparatedList) {
+        String[] fileNames = commaSeparatedList.split(",");
+        ImmutableList.Builder<File> files = ImmutableList.builder();
+        Arrays.stream(fileNames).forEach(filename -> files.add(new File(filename)));
+        return files.build();
+    }
+
+    public static void main(String args[]) {
+        List<File> srcs = getFiles(args[0]);
+        List<File> resources = getFiles(args[1]);
+        File srcDirectory = null;//new File(args[2]);
+        File resourceDirectory = new File(args[3]);
+        File genSrcOutputDirectory = new File(args[4]);
+        File genResourcesOutputDirectory = new File(args[5]);
+        String webContext = args[6];
+        String apiTitle = args[7];
+        String apiVersion = args[8];
+        String apiPackage = args[9];
+        String apiDescription = args[10];
+
+        SwaggerGenerator generator = new SwaggerGenerator(
+                srcs,
+                resources,
+                srcDirectory, resourceDirectory,
+                genSrcOutputDirectory,
+                genResourcesOutputDirectory,
+                webContext,
+                apiTitle,
+                apiVersion,
+                apiPackage,
+                apiDescription);
+        generator.execute();
+    }
+}
\ No newline at end of file
diff --git a/tools/build/buck-plugin/src/main/resources/registrator.javat b/tools/build/swagger/src/main/resources/registrator.javat
similarity index 100%
rename from tools/build/buck-plugin/src/main/resources/registrator.javat
rename to tools/build/swagger/src/main/resources/registrator.javat
diff --git a/tools/package/BUCK b/tools/package/BUCK
deleted file mode 100644
index b7adf19..0000000
--- a/tools/package/BUCK
+++ /dev/null
@@ -1,48 +0,0 @@
-KARAF = '//lib:apache-karaf'
-BRANDING = '//tools/package/branding:onos-tools-package-branding'
-PATCHES = '//lib:apache-karaf-patches'
-
-#TODO move to buck-tools
-export_file (
-  name = 'onos-prep-karaf',
-)
-
-genrule(
-  name = 'onos-karaf',
-  srcs = glob(['bin/*', 'etc/*', 'init/*', 'runtime/bin/*']),
-  bash = '$(location :onos-prep-karaf) $OUT $(location %s) %s $(location %s) $(location %s)'\
-            % (KARAF, ONOS_VERSION, BRANDING, PATCHES),
-  out = 'karaf.zip',
-)
-
-staged_repos = ['$(location %s-repo)' % f for f in FEATURES]
-staged_apps = ['$(location %s)' % a for a in APPS]
-
-# feature_coords = 'foo:bar:1.3'
-sources = [ '$(location //tools/package/features:onos-features)', ]
-sources += staged_repos + staged_apps
-
-tar_file(
-  name = 'onos-package-runtime',
-  srcs = glob(['runtime/bin/*']),
-  root = 'tools/package',
-  out = 'package-runtime.tar.gz',
-  visibility = [ 'PUBLIC' ],
-)
-
-genrule(
-  name = 'onos-package',
-  srcs = glob(['bin/*', 'etc/*', 'init/*', 'config/*', 'runtime/bin/*']),
-  out = 'onos.tar.gz',
-  bash = '$(exe //buck-tools:onos-stage) $OUT ' + ONOS_VERSION + ' $(location :onos-karaf) ' + ' '.join(sources),
-  visibility = [ 'PUBLIC' ],
-)
-
-genrule(
-  name = 'onos-run',
-  out = 'onos-run',
-  srcs = [ 'onos-run-karaf' ],
-  bash = 'sed "s#ONOS_TAR=#ONOS_TAR=$(location :onos-package)#" $SRCS > $OUT; chmod +x $OUT',
-  executable = True,
-  visibility = [ 'PUBLIC' ],
-)
diff --git a/tools/package/branding/BUCK b/tools/package/branding/BUCK
deleted file mode 100644
index 3a2e916..0000000
--- a/tools/package/branding/BUCK
+++ /dev/null
@@ -1,2 +0,0 @@
-osgi_jar()
-# Really... that's it
\ No newline at end of file
diff --git a/tools/package/features/BUCK b/tools/package/features/BUCK
deleted file mode 100644
index 3744cc4..0000000
--- a/tools/package/features/BUCK
+++ /dev/null
@@ -1,176 +0,0 @@
-osgi_feature (
-  name="onos-thirdparty-base",
-  title="ONOS 3rd party dependencies",
-  required_features = [],
-  included_bundles = [
-    '//lib:atomix',
-    '//lib:atomix-cluster',
-    '//lib:atomix-gossip',
-    '//lib:atomix-primary-backup',
-    '//lib:atomix-primitive',
-    '//lib:atomix-raft',
-    '//lib:atomix-storage',
-    '//lib:atomix-utils',
-    '//lib:classgraph',
-    '//lib:commons-lang',
-    '//lib:commons-lang3',
-    '//lib:commons-text',
-    '//lib:commons-configuration',
-    '//lib:fast-classpath-scanner',
-    '//lib:com_google_guava_guava',
-    '//lib:io_netty_netty',
-    '//lib:io_netty_netty_common',
-    '//lib:io_netty_netty_buffer',
-    '//lib:io_netty_netty_transport',
-    '//lib:io_netty_netty_handler',
-    '//lib:io_netty_netty_codec',
-    '//lib:io_netty_netty_transport_native_unix_common',
-    '//lib:io_netty_netty_transport-native-epoll',
-    '//lib:io_netty_netty_resolver',
-    '//lib:commons-pool',
-    '//lib:commons-math3',
-    '//lib:joda-time',
-    '//lib:metrics-core',
-    '//lib:metrics-json',
-    '//lib:minimal-json',
-    '//lib:kryo',
-    '//lib:reflectasm',
-    '//lib:asm',
-    '//lib:minlog',
-    '//lib:objenesis',
-    '//lib:jackson-core',
-    '//lib:jackson-annotations',
-    '//lib:jackson-databind',
-    '//lib:commons-collections',
-    '//lib:typesafe-config',
-    '//lib:concurrent-trees',
-    '//lib:commons-io',
-    '//lib:jersey-client',
-    '//lib:mapdb',
-    '//lib:bcpkix-jdk15on',
-    '//lib:bcprov-jdk15on',
-    '//lib:commons-jxpath', # FIXME: move xpath lib dependency to the right place
-    '//lib:commons-beanutils', # jxpath dependency
-    '//lib:jdom',  # jxpath dependency
-    '//lib:sigar',
-  ]
-)
-
-osgi_feature (
-  name="onos-thirdparty-web",
-  title="ONOS 3rd party dependencies for web apps",
-  required_features = [ 'war', 'onos-thirdparty-base' ],
-  included_bundles = [
-    '//lib:jersey-common',
-    '//lib:javax.annotation-api-mvn',
-    '//lib:javax.ws.rs-api',
-    '//lib:hk2-api',
-    '//lib:hk2-locator',
-    '//lib:hk2-osgi-resource-locator',
-    '//lib:javax.inject',
-    '//lib:jersey-server',
-    '//lib:jersey-hk2',
-    '//lib:aopalliance-repackaged',
-    '//lib:hk2-utils',
-    '//lib:validation-api',
-    '//lib:javassist',
-    '//lib:jersey-container-servlet',
-    '//lib:jersey-container-servlet-core',
-    '//lib:jersey-media-multipart',
-    '//lib:mimepull',
-  ]
-)
-
-osgi_feature (
-  name = 'onos-api',
-  title = 'ONOS services and model API',
-  required_features = ['scr', 'onos-thirdparty-base'],
-  included_bundles =[
-    '//utils/misc:onlab-misc',
-    '//utils/osgi:onlab-osgi',
-    '//core/api:onos-api',
-    '//incubator/api:onos-incubator-api',
-  ]
-)
-
-osgi_feature (
-  name='onos-core',
-  title='ONOS core components',
-  required_features = ['onos-api'],
-  included_bundles = [
-    '//core/net:onos-core-net',
-    '//core/common:onos-core-common',
-    '//core/store/dist:onos-core-dist',
-    '//core/store/primitives:onos-core-primitives',
-    '//core/store/persistence:onos-core-persistence',
-    '//core/store/serializers:onos-core-serializers',
-  ]
-)
-
-osgi_feature (
-  name='onos-incubator',
-  title='ONOS core incubator components',
-  required_features = ['onos-core'],
-  included_bundles = [
-    '//incubator/net:onos-incubator-net',
-    '//incubator/store:onos-incubator-store',
-    '//incubator/rpc:onos-incubator-rpc',
-  ]
-)
-
-osgi_feature (
-  name="onos-rest",
-  title="ONOS REST API components",
-  required_features = ['onos-api', 'onos-thirdparty-web'],
-  included_bundles = [
-    '//utils/rest:onlab-rest',
-    '//web/api:onos-rest',
-  ]
-)
-
-osgi_feature (
-  name = 'onos-gui',
-  title = 'ONOS GUI console components',
-  required_features = ['onos-api', 'onos-thirdparty-web'],
-  included_bundles = [
-    '//lib:jetty-websocket',
-    '//utils/rest:onlab-rest',
-    '//web/gui:onos-gui',
-  ]
-)
-
-osgi_feature (
-  name = 'onos-gui2',
-  title = 'ONOS GUI2 console components',
-  required_features = ['onos-api', 'onos-thirdparty-web'],
-  included_bundles = [
-    '//lib:jetty-websocket',
-    '//utils/rest:onlab-rest',
-    '//web/gui2:onos-gui2',
-  ]
-)
-
-osgi_feature (
-  name = 'onos-cli',
-  title="ONOS admin command console components",
-  required_features = ['onos-api'],
-  included_bundles = [
-    '//cli:onos-cli',
-  ]
-)
-
-osgi_feature (
-  name = 'onos-security',
-  title="Security-Mode ONOS",
-  required_features = ['onos-api'],
-  included_bundles = [
-    '//lib:org.apache.felix.framework.security',
-    '//core/security:onos-security',
-  ]
-)
-
-compile_features(
-  name = 'onos-features',
-  features = FEATURES,
-  maven_coords = 'org.onosproject:onos-features:xml:features:' + ONOS_VERSION,
-)
diff --git a/utils/junit/BUCK b/utils/junit/BUCK
deleted file mode 100644
index f4e5444..0000000
--- a/utils/junit/BUCK
+++ /dev/null
@@ -1,21 +0,0 @@
-SRC_DEPS = [
-    '//lib:junit',
-    '//lib:hamcrest-all',
-    '//lib:com_google_guava_guava',
-    '//lib:slf4j-api',
-]
-
-TEST_DEPS = [
-    '//lib:com_google_guava_guava_testlib',
-]
-
-osgi_jar_with_tests(
-    name = 'onlab-junit',
-    srcs = glob([SRC + '/*.java']),
-    deps = SRC_DEPS,
-    test_deps = TEST_DEPS,
-    visibility = ['PUBLIC'],
-    resources_root = 'src/main/resources',
-    resources = glob(['src/main/resources/**']),
-    package_name_root = 'org.onlab',
-)
diff --git a/utils/misc/BUCK b/utils/misc/BUCK
deleted file mode 100644
index 5df6e11..0000000
--- a/utils/misc/BUCK
+++ /dev/null
@@ -1,17 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:COMPILE',
-    '//lib:NETTY',
-    '//lib:METRICS',
-    '//lib:KRYO',
-    '//lib:io_netty_netty',
-    '//lib:JACKSON',
-]
-
-osgi_jar_with_tests(
-    name = 'onlab-misc',
-    deps = COMPILE_DEPS,
-    package_name_root = 'org.onlab',
-    visibility = ['PUBLIC'],
-)
-
-
diff --git a/utils/osgi/BUCK b/utils/osgi/BUCK
deleted file mode 100644
index 36d5819..0000000
--- a/utils/osgi/BUCK
+++ /dev/null
@@ -1,9 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:COMPILE',
-]
-
-osgi_jar_with_tests(
-  name = 'onlab-osgi',
-  deps = COMPILE_DEPS,
-  package_name_root = 'org.onlab',
-)
diff --git a/utils/osgiwrap/BUCK b/utils/osgiwrap/BUCK
deleted file mode 100644
index 3a91e9b..0000000
--- a/utils/osgiwrap/BUCK
+++ /dev/null
@@ -1,26 +0,0 @@
-SRC = 'src/main/java/org/onlab/**/'
-TEST = 'src/test/java/org/onlab/**/'
-CURRENT_NAME = 'onlab-osgiwrap'
-CURRENT_TARGET = ':' + CURRENT_NAME
-
-COMPILE_DEPS = [
-    '//lib:com_google_guava_guava',
-    '//lib:bndlib',
-    '//lib:org.apache.felix.scr.bnd'
-]
-
-
-java_library(
-    name = CURRENT_NAME,
-    #maven_coords = 'org.onosproject:' + CURRENT_NAME + ':' + '1.2.3',
-    srcs = glob([SRC + '/*.java']),
-    deps = COMPILE_DEPS,
-    visibility = ['PUBLIC'],
-)
-
-java_binary(
-    name = 'osgi-jar',
-    deps = COMPILE_DEPS + [ ':' + CURRENT_NAME ],
-    main_class = 'org.onlab.osgiwrap.OSGiWrapper',
-    visibility = [ 'PUBLIC' ]
-)
diff --git a/utils/rest/BUCK b/utils/rest/BUCK
deleted file mode 100644
index 2d7885b..0000000
--- a/utils/rest/BUCK
+++ /dev/null
@@ -1,14 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:COMPILE',
-    '//lib:JACKSON',
-    '//utils/osgi:onlab-osgi',
-    '//utils/misc:onlab-misc',
-    '//lib:javax.ws.rs-api',
-    '//lib:jersey-server',
-]
-
-osgi_jar_with_tests (
-    name = 'onlab-rest',
-    deps = COMPILE_DEPS,
-    package_name_root = 'org.onlab',
-)
diff --git a/web/api/BUCK b/web/api/BUCK
deleted file mode 100644
index c1c6ab4..0000000
--- a/web/api/BUCK
+++ /dev/null
@@ -1,25 +0,0 @@
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:METRICS',
-    '//incubator/api:onos-incubator-api',
-    '//lib:javax.ws.rs-api',
-    '//utils/rest:onlab-rest',
-]
-
-TEST_DEPS = [
-    '//lib:TEST_REST',
-    '//lib:minimal-json',
-    '//lib:jersey-security'
-]
-
-osgi_jar_with_tests (
-    name = 'onos-rest',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    web_context = '/onos/v1',
-    api_title = 'ONOS Core REST API',
-    api_version = '1.0',
-    api_description = 'ONOS Core REST API',
-    api_package = 'org.onosproject.rest.impl',
-)
diff --git a/web/gui/BUCK b/web/gui/BUCK
deleted file mode 100644
index df70a20..0000000
--- a/web/gui/BUCK
+++ /dev/null
@@ -1,67 +0,0 @@
-NODE_VERSION = 'v8.11.1'
-
-COMPILE_DEPS = [
-    '//lib:CORE_DEPS',
-    '//lib:JACKSON',
-    '//lib:KRYO',
-    '//lib:javax.ws.rs-api',
-    '//lib:servlet-api',
-    '//lib:jetty-websocket',
-    '//lib:jetty-util',
-    '//lib:jersey-media-multipart',
-    '//lib:org.apache.karaf.shell.console',
-    '//cli:onos-cli',
-    '//lib:jersey-server',
-    '//incubator/api:onos-incubator-api',
-    '//incubator/net:onos-incubator-net',
-    '//utils/rest:onlab-rest',
-    '//core/store/serializers:onos-core-serializers',
-    ':onos-tools-gui',
-]
-
-TEST_DEPS = [
-    '//lib:TEST',
-    '//core/api:onos-api-tests',
-    '//drivers/default:onos-drivers-default',
-]
-
-RESOURCES = {
-    'WEB-INF/classes/index.html': 'src/main/webapp/index.html',
-    'WEB-INF/classes/login.html': 'src/main/webapp/login.html',
-    'WEB-INF/classes/error.html': 'src/main/webapp/error.html',
-    'WEB-INF/classes/not-ready.html': 'src/main/webapp/not-ready.html',
-    'WEB-INF/classes/onos.js': 'src/main/webapp/onos.js',
-    'WEB-INF/classes/nav.html': 'src/main/webapp/nav.html',
-    'WEB-INF/classes/app/view': 'src/main/webapp/app/view',
-    'WEB-INF/classes/raw': 'src/main/webapp/raw',
-}
-
-include_defs('//bucklets/node.bucklet')
-sh_src='onos-gui-build'
-
-fetch_node(version = NODE_VERSION)
-
-export_file (
-    name = 'onos-tools-gui-exe',
-    src = sh_src,
-    visibility = [ 'PUBLIC' ],
-)
-
-genrule(
-    name = 'onos-tools-gui',
-    srcs = glob(['src/main/webapp/*.js', 'src/main/webapp/app/**/*.js'], excludes = ['src/main/webapp/dist/*.js']),
-    bash = '$(location :onos-tools-gui-exe) '
-        + ' $(location :node-release-' + NODE_VERSION + ') '
-        + '$(location :node-bin-' + NODE_VERSION + ') > $OUT',
-    out = 'onos-tools-gui.log',
-    visibility = [ 'PUBLIC' ],
-)
-
-osgi_jar_with_tests (
-    name = 'onos-gui',
-    deps = COMPILE_DEPS,
-    test_deps = TEST_DEPS,
-    include_resources = RESOURCES,
-    web_context = '/onos/ui',
-    do_javadocs = False,
-)
