You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by pa...@apache.org on 2016/11/19 22:50:28 UTC

[27/35] zest-java git commit: build: move back dependencies declaration from buildSrc to ./

build: move back dependencies declaration from buildSrc to ./


Project: http://git-wip-us.apache.org/repos/asf/zest-java/repo
Commit: http://git-wip-us.apache.org/repos/asf/zest-java/commit/0d573a40
Tree: http://git-wip-us.apache.org/repos/asf/zest-java/tree/0d573a40
Diff: http://git-wip-us.apache.org/repos/asf/zest-java/diff/0d573a40

Branch: refs/heads/develop
Commit: 0d573a406e81f199aec9c897c4fd29484fc7ffe3
Parents: 3562f7f
Author: Paul Merlin <pa...@apache.org>
Authored: Sat Nov 19 19:04:46 2016 +0100
Committer: Paul Merlin <pa...@apache.org>
Committed: Sat Nov 19 19:04:46 2016 +0100

----------------------------------------------------------------------
 build.gradle                                    |  10 +-
 .../apache/zest/gradle/AllProjectsPlugin.groovy |   1 -
 .../DependenciesDeclarationExtension.groovy     |  32 ++
 .../DependenciesDeclarationPlugin.groovy        |  30 ++
 .../dependencies/DependenciesPlugin.groovy      | 289 ++-----------------
 .../zest/gradle/dist/DistributionPlugin.groovy  |   6 +-
 core/runtime/build.gradle                       |   1 -
 dependencies.gradle                             | 255 ++++++++++++++++
 manual/build.gradle                             |   2 +-
 samples/sql-support/build.gradle                |   2 +-
 tests/regression/build.gradle                   |   4 +-
 tools/shell/build.gradle                        |   1 -
 12 files changed, 350 insertions(+), 283 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/build.gradle
----------------------------------------------------------------------
diff --git a/build.gradle b/build.gradle
index df33a55..ebd7b5d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -15,8 +15,14 @@
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
+import org.apache.zest.gradle.AllProjectsPlugin
+import org.apache.zest.gradle.RootProjectPlugin
+import org.apache.zest.gradle.dependencies.DependenciesDeclarationPlugin
+
+apply plugin: DependenciesDeclarationPlugin
+apply from: 'dependencies.gradle'
 
 allprojects {
-  apply plugin: org.apache.zest.gradle.AllProjectsPlugin
+  apply plugin: AllProjectsPlugin
 }
-apply plugin: org.apache.zest.gradle.RootProjectPlugin
+apply plugin: RootProjectPlugin

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy
index 2563abe..82441f2 100644
--- a/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/AllProjectsPlugin.groovy
@@ -18,7 +18,6 @@
 package org.apache.zest.gradle
 
 import groovy.transform.CompileStatic
-import java.nio.file.Files
 import org.apache.zest.gradle.dependencies.DependenciesPlugin
 import org.apache.zest.gradle.publish.PublishingPlugin
 import org.gradle.api.JavaVersion

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationExtension.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationExtension.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationExtension.groovy
new file mode 100644
index 0000000..fbeb2f0
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationExtension.groovy
@@ -0,0 +1,32 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.zest.gradle.dependencies
+
+import groovy.transform.CompileStatic
+import org.gradle.api.artifacts.DependencySubstitution
+import org.gradle.api.artifacts.component.ModuleComponentSelector
+import org.gradle.internal.BiAction
+
+@CompileStatic
+class DependenciesDeclarationExtension
+{
+  final Map<String, String> repositoriesUrls = [ : ]
+  final Map<String, Object> libraries = [ : ]
+  final Map<String, List<Object>> defaultDependencies = [ : ]
+  BiAction<DependencySubstitution, ModuleComponentSelector> dependencySubstitutionSpec
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationPlugin.groovy
new file mode 100644
index 0000000..c04ca55
--- /dev/null
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesDeclarationPlugin.groovy
@@ -0,0 +1,30 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.apache.zest.gradle.dependencies
+
+import org.gradle.api.Plugin
+import org.gradle.api.Project
+
+class DependenciesDeclarationPlugin implements Plugin<Project>
+{
+  @Override
+  void apply( Project project )
+  {
+    project.extensions.create( 'dependenciesDeclaration', DependenciesDeclarationExtension )
+  }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy
index 3a7f31b..bd9efde 100644
--- a/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/dependencies/DependenciesPlugin.groovy
@@ -29,230 +29,19 @@ import org.gradle.api.artifacts.repositories.MavenArtifactRepository
 @CompileStatic
 class DependenciesPlugin implements Plugin<Project>
 {
-  static final Map<String, String> REPOSITORIES_URLS = [
-    mavenCentral: "https://repo1.maven.org/maven2/",
-    ops4j       : "http://repository.ops4j.org/maven2/",
-    restlet     : 'https://maven.restlet.com/',
-    clojars     : "https://clojars.org/repo/",
-  ]
-
-  static final def asmVersion = '5.1'
-  static final def bonecpVersion = '0.8.0.RELEASE'
-  static final def bouncyVersion = '1.55'
-  static final def codahaleMetricsVersion = '3.1.2'
-  static final def commonsDbcpVersion = '2.1.1'
-  static final def commonsLangVersion = '3.5'
-  static final def derbyVersion = '10.13.1.1'
-  static final def dnsJavaVersion = '2.1.7'
-  static final def ehcacheVersion = '3.1.3'
-  static final def elasticsearchVersion = '5.0.0'
-  static final def freemarkerVersion = '2.3.25-incubating'
-  static final def geodeVersion = '1.0.0-incubating'
-  static final def groovyVersion = '2.4.7'
-  static final def h2Version = '1.4.193'
-  static final def hazelcastVersion = '3.7.2'
-  static final def hamcrestVersion = '1.3'
-  static final def httpClientVersion = '4.5.2'
-  static final def jacksonVersion = '2.8.4'
-  static final def javascriptVersion = '1.7.7.1'
-  static final def javasqlgeneratorVersion = '0.3.2'
-  static final def jcloudsVersion = '1.9.2'
-  static final def jdbmVersion = '2.4'
-  static final def jedisVersion = '2.9.0'
-  static final def jettyVersion = '9.2.17.v20160517' // 9.3.x Tests fail!
-  static final def jgoodiesLooksVersion = '2.7.0'
-  static final def jtaVersion = '1.1'
-  static final def leveldbVersion = '0.9'
-  static final def leveldbJniVersion = '1.8'
-  static final def liquibaseVersion = '3.5.3'
-  static final def logbackVersion = '1.1.7'
-  static final def mongodbVersion = '3.3.0'
-  static final def mysqlVersion = '6.0.4'
-  static final def orgJsonVersion = '20130213'
-  static final def osgiVersion = '4.2.0' // 4.3.0 Fails to compile! - 5.0.0 exists
-  static final def pdfboxVersion = '2.0.3'
-  static final def postgresqlVersion = '9.4.1211'
-  static final def prefuseVersion = '1.0.1'
-  static final def restletVersion = '2.3.7'
-  static final def rdfVersion = '2.7.16' // 2.8.x change query results!! 4.x exists
-  static final def riakVersion = '2.0.8'
-  static final def servletVersion = '3.1.0'
-  static final def shiroVersion = '1.3.2'
-  static final def skedVersion = '2.1'
-  static final def slf4jVersion = '1.7.21'
-  static final def solrVersion = "1.4.1" // 4.x Fails to compile!
-  static final def springVersion = '4.3.3.RELEASE'
-  static final def spymemcachedVersion = '2.12.1'
-  static final def sqliteVersion = '3.14.2.1'
-  static final def velocityVersion = '1.7'
-  static final def woodstoxVersion = '4.4.1'
-
-  static final def antVersion = '1.9.7'
-  static final def awaitilityVersion = '2.0.0'
-  static final def easyMockVersion = '3.4'
-  static final def junitVersion = '4.12'
-  static final def mockitoVersion = '2.2.9'
-
-  static final def libraries = [
-    // Ant
-    ant                 : "org.apache.ant:ant:$antVersion",
-    ant_junit           : "org.apache.ant:ant-junit:$antVersion",
-
-    // ASM
-    asm                 : "org.ow2.asm:asm:$asmVersion",
-    asm_util            : "org.ow2.asm:asm-util:$asmVersion",
-    asm_commons         : "org.ow2.asm:asm-commons:$asmVersion",
-
-    // OSGi
-    osgi_core           : "org.osgi:org.osgi.core:$osgiVersion",
-    osgi_compendium     : "org.osgi:org.osgi.compendium:$osgiVersion",
-    osgi_enterprise     : "org.osgi:org.osgi.enterprise:$osgiVersion",
-
-    // logging
-    slf4j_api           : "org.slf4j:slf4j-api:$slf4jVersion",
-    slf4j_simple        : "org.slf4j:slf4j-simple:$slf4jVersion",
-    logback             : 'ch.qos.logback:logback-classic:' + logbackVersion,
-    jcl_slf4j           : "org.slf4j:jcl-over-slf4j:$slf4jVersion",
-    jcl_api             : 'commons-logging:commons-logging-api:99.0-does-not-exist',  //ensure it is never used.
-    jcl                 : 'commons-logging:commons-logging:99.0-does-not-exist',  // ensure it is never used.
-
-    // org.json
-    org_json            : "org.codeartisans:org.json:$orgJsonVersion",
-
-    // Restlet
-    restlet             : [ "org.restlet.jee:org.restlet:$restletVersion",
-                            "org.restlet.jee:org.restlet.ext.atom:$restletVersion",
-                            "org.restlet.jee:org.restlet.ext.servlet:$restletVersion",
-                            "org.restlet.jee:org.restlet.ext.slf4j:$restletVersion" ],
-
-    // Spring
-    spring_core         : [ "org.springframework:spring-beans:$springVersion",
-                            "org.springframework:spring-context:$springVersion" ],
-
-    spring_testsupport  : "org.springframework:spring-test:$springVersion",
-
-    // RDF
-    sesame              : [ "org.openrdf.sesame:sesame-model:$rdfVersion",
-                            "org.openrdf.sesame:sesame-queryparser-sparql:$rdfVersion",
-                            "org.openrdf.sesame:sesame-repository-dataset:$rdfVersion",
-                            "org.openrdf.sesame:sesame-repository-http:$rdfVersion",
-                            "org.openrdf.sesame:sesame-rio-api:$rdfVersion",
-                            "org.openrdf.sesame:sesame-rio-n3:$rdfVersion",
-                            "org.openrdf.sesame:sesame-rio-ntriples:$rdfVersion",
-                            "org.openrdf.sesame:sesame-rio-rdfxml:$rdfVersion",
-                            "org.openrdf.sesame:sesame-rio-trig:$rdfVersion",
-                            "org.openrdf.sesame:sesame-rio-trix:$rdfVersion",
-                            "org.openrdf.sesame:sesame-rio-turtle:$rdfVersion",
-                            "org.openrdf.sesame:sesame-sail-api:$rdfVersion",
-                            "org.openrdf.sesame:sesame-sail-memory:$rdfVersion",
-                            "org.openrdf.sesame:sesame-sail-nativerdf:$rdfVersion",
-                            "org.openrdf.sesame:sesame-sail-rdbms:$rdfVersion" ],
-    sparql              : [ "org.openrdf.sesame:sesame-queryresultio-sparqlxml:$rdfVersion",
-                            "org.openrdf.sesame:sesame-queryresultio-sparqljson:$rdfVersion" ],
-
-    // SOLR
-    solr                : [ "org.apache.solr:solr-core:$solrVersion",
-                            "org.apache.solr:solr-solrj:$solrVersion" ],
-
-    // Jetty
-    jetty_server        : "org.eclipse.jetty:jetty-server:$jettyVersion",
-    jetty_webapp        : "org.eclipse.jetty:jetty-webapp:$jettyVersion",
-    jetty_servlet       : "org.eclipse.jetty:jetty-servlet:$jettyVersion",
-    jetty_http          : "org.eclipse.jetty:jetty-http:$jettyVersion",
-    jetty_io            : "org.eclipse.jetty:jetty-io:$jettyVersion",
-    jetty_jmx           : "org.eclipse.jetty:jetty-jmx:$jettyVersion",
-    jetty_security      : "org.eclipse.jetty:jetty-security:$jettyVersion",
-    jetty_jsp           : "org.eclipse.jetty:jetty-jsp:$jettyVersion",
-    jetty_util          : "org.eclipse.jetty:jetty-util:$jettyVersion",
-    jetty_continuation  : "org.eclipse.jetty:jetty-continuation:$jettyVersion",
-    jetty_client        : "org.eclipse.jetty:jetty-client:$jettyVersion",
-    jetty_xml           : "org.eclipse.jetty:jetty-xml:$jettyVersion",
-
-    // Scripting
-    groovy              : "org.codehaus.groovy:groovy-all:$groovyVersion",
-
-    javascript          : "org.mozilla:rhino:$javascriptVersion",
-
-    // Library & Extension dependencies
-    jackson_mapper      : "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion",
-    ehcache             : "org.ehcache:ehcache:$ehcacheVersion",
-    elasticsearch       : [ "org.elasticsearch:elasticsearch:$elasticsearchVersion",
-                            "org.elasticsearch.client:transport:$elasticsearchVersion",
-                            // Elasticsearch 5.0 do not work with log4j 2.7
-                            "org.apache.logging.log4j:log4j-api:2.6.2",
-                            "org.apache.logging.log4j:log4j-core:2.6.2" ],
-    geode               : "org.apache.geode:geode-core:$geodeVersion",
-    h2                  : "com.h2database:h2:$h2Version",
-    hazelcast           : "com.hazelcast:hazelcast:$hazelcastVersion",
-    jclouds_core        : "org.apache.jclouds:jclouds-core:$jcloudsVersion",
-    jclouds_blobstore   : "org.apache.jclouds:jclouds-allblobstore:$jcloudsVersion",
-    jclouds_filesystem  : "org.apache.jclouds.api:filesystem:$jcloudsVersion",
-    jdbm                : "jdbm:jdbm:$jdbmVersion",
-    jedis               : "redis.clients:jedis:$jedisVersion",
-    jgoodies_looks      : "com.jgoodies:jgoodies-looks:$jgoodiesLooksVersion",
-    leveldb_api         : "org.iq80.leveldb:leveldb-api:$leveldbVersion",
-    leveldb_java        : "org.iq80.leveldb:leveldb:$leveldbVersion",
-    leveldb_jni_all     : "org.fusesource.leveldbjni:leveldbjni-all:$leveldbJniVersion",
-    mongodb             : "org.mongodb:mongo-java-driver:$mongodbVersion",
-    riak                : "com.basho.riak:riak-client:$riakVersion",
-    jta                 : "javax.transaction:jta:$jtaVersion",
-    javaSqlGenerator    : "org.java-sql-generator:org.java-sql-generator.api:$javasqlgeneratorVersion",
-    javaSqlGeneratorImpl: "org.java-sql-generator:org.java-sql-generator.implementation:$javasqlgeneratorVersion",
-    velocity            : "org.apache.velocity:velocity:$velocityVersion",
-    commons_dbcp        : "org.apache.commons:commons-dbcp2:$commonsDbcpVersion",
-    commons_lang        : "org.apache.commons:commons-lang3:$commonsLangVersion",
-    servlet_api         : "javax.servlet:javax.servlet-api:$servletVersion",
-    http_client         : "org.apache.httpcomponents:httpclient:$httpClientVersion",
-    woodstox            : "org.codehaus.woodstox:woodstox-core-asl:$woodstoxVersion",
-    restlet_xml         : "org.restlet.jee:org.restlet.ext.xml:$restletVersion",
-    bouncy_castle       : "org.bouncycastle:bcprov-jdk15on:$bouncyVersion",
-    dnsjava             : "dnsjava:dnsjava:$dnsJavaVersion",
-    freemarker          : "org.freemarker:freemarker:$freemarkerVersion",
-    shiro               : "org.apache.shiro:shiro-core:$shiroVersion",
-    shiro_web           : "org.apache.shiro:shiro-web:$shiroVersion",
-    bonecp              : "com.jolbox:bonecp:$bonecpVersion",
-    liquibase           : "org.liquibase:liquibase-core:$liquibaseVersion",
-    sked                : "org.codeartisans:sked:$skedVersion",
-    pdfbox              : "org.apache.pdfbox:pdfbox:$pdfboxVersion",
-    prefuse             : "de.sciss:prefuse-core:$prefuseVersion",
-    spymemcached        : "net.spy:spymemcached:$spymemcachedVersion",
-    codahale_metrics    : [ "io.dropwizard.metrics:metrics-core:$codahaleMetricsVersion",
-                            "io.dropwizard.metrics:metrics-healthchecks:$codahaleMetricsVersion" ],
-
-    // Testing
-    junit               : "junit:junit:$junitVersion",
-    hamcrest            : [ "org.hamcrest:hamcrest-core:$hamcrestVersion",
-                            "org.hamcrest:hamcrest-library:$hamcrestVersion" ],
-    awaitility          : "org.awaitility:awaitility:$awaitilityVersion",
-    easymock            : "org.easymock:easymock:$easyMockVersion",
-    mockito             : "org.mockito:mockito-core:$mockitoVersion",
-
-    // Tests dependencies
-    derby               : "org.apache.derby:derby:$derbyVersion",
-    derbyclient         : "org.apache.derby:derbyclient:$derbyVersion",
-    derbynet            : "org.apache.derby:derbynet:$derbyVersion",
-    postgres            : "org.postgresql:postgresql:$postgresqlVersion",
-    mysql_connector     : "mysql:mysql-connector-java:$mysqlVersion",
-    sqlite              : "org.xerial:sqlite-jdbc:$sqliteVersion",
-  ]
-
-  static final Map<String, Object> defaultTestDependencies = [
-    testCompile: [ libraries[ 'junit' ], libraries[ 'hamcrest' ], libraries[ 'ant' ], libraries[ 'ant_junit' ] ],
-    testRuntime: [ libraries[ 'asm' ], libraries[ 'asm_commons' ], libraries[ 'asm_util' ] ]
-  ] as Map
-
   @Override
   void apply( final Project project )
   {
-    applyRepositories( project )
-    applyLibraries( project )
-    applyDependencyResolutionRules( project )
-    applyDefaultTestDependencies( project )
+    def dependenciesDeclaration = project.rootProject.extensions.getByType( DependenciesDeclarationExtension )
+    applyRepositories( project, dependenciesDeclaration )
+    applyLibraries( project, dependenciesDeclaration )
+    applyDependencyResolutionRules( project, dependenciesDeclaration )
+    applyDefaultDependencies( project, dependenciesDeclaration )
   }
 
-  private static void applyRepositories( Project project )
+  private static void applyRepositories( Project project, DependenciesDeclarationExtension declaration )
   {
-    REPOSITORIES_URLS.each { name, url ->
+    declaration.repositoriesUrls.each { name, url ->
       project.repositories.maven { MavenArtifactRepository repo ->
         repo.name = name
         repo.url = url
@@ -260,71 +49,29 @@ class DependenciesPlugin implements Plugin<Project>
     }
   }
 
-  private static void applyLibraries( Project project )
+  private static void applyLibraries( Project project, DependenciesDeclarationExtension declaration )
   {
-    if( project.rootProject == project )
-    {
-      project.extensions.extraProperties.set( 'libraries', libraries )
-    }
+    project.extensions.extraProperties.set 'libraries', declaration.libraries
   }
 
-  private static void applyDependencyResolutionRules( Project project )
+  private static void applyDependencyResolutionRules( Project project, DependenciesDeclarationExtension declaration )
   {
     project.configurations.all(
       { Configuration configuration ->
-        configuration.resolutionStrategy.dependencySubstitution.all( { DependencySubstitution dep ->
-          if( dep.requested instanceof ModuleComponentSelector )
-          {
-            def requested = dep.requested as ModuleComponentSelector
-            // Always resolve SLF4J to the same version
-            if( requested.group == 'org.slf4j' )
-            {
-              dep.useTarget group: requested.group, name: requested.module, version: slf4jVersion
-            }
-            // Always resolve ASM to the same version
-            if( requested.group == 'org.ow2.asm' )
-            {
-              dep.useTarget group: requested.group, name: requested.module, version: asmVersion
-            }
-            // Always resolve OSGi to the same version
-            if( requested.group == 'org.osgi' )
-            {
-              dep.useTarget group: requested.group, name: requested.module, version: osgiVersion
-            }
-            // Always resolve Jackson to the same version
-            if( requested.group.startsWith( 'com.fasterxml.jackson' ) && requested.module != 'jackson-parent' )
+        configuration.resolutionStrategy.dependencySubstitution.all(
+          { DependencySubstitution dep ->
+            if( dep.requested instanceof ModuleComponentSelector )
             {
-              dep.useTarget group: requested.group, name: requested.module, version: jacksonVersion
+              def selector = dep.requested as ModuleComponentSelector
+              declaration.dependencySubstitutionSpec.execute dep, selector
             }
-            // woodstox:wstx-asl is broken (no pom), use org.codehaus.woodstox:wstx-asl instead
-            if( requested.group == 'woodstox' && requested.module == 'wstx-asl' )
-            {
-              dep.useTarget group: 'org.codehaus.woodstox', name: 'wstx-asl', version: requested.version
-            }
-            // some bad citizens have SNAPSHOT parents ...
-            if( requested.module == 'commons-sandbox-parent' && requested.version == '3-SNAPSHOT' )
-            {
-              dep.useTarget group: requested.group, name: requested.module, version: '3'
-            }
-            // GSON 2.3 POM is invalid, use 2.3.1 instead .. see https://github.com/google/gson/issues/588
-            if( requested.group == 'com.google.code.gson' && requested.module == 'gson' && requested.version == '2.3' )
-            {
-              dep.useTarget group: requested.group, name: requested.module, version: '2.3.1'
-            }
-            // Findbugs Annotation is LGPL, use https://github.com/stephenc/findbugs-annotations which is
-            // Apache 2 licensed instead
-            if( requested.group == 'net.sourceforge.findbugs' && requested.module == 'annotations' )
-            {
-              dep.useTarget group: 'com.github.stephenc.findbugs', name: 'findbugs-annotations', version: '1.3.9-1'
-            }
-          }
-        } as Action<DependencySubstitution> )
+          } as Action<DependencySubstitution> )
       } as Action<Configuration> )
   }
 
-  private static void applyDefaultTestDependencies( Project project )
+  private static void applyDefaultDependencies( Project project, DependenciesDeclarationExtension declaration )
   {
-    defaultTestDependencies.each { String configuration, Object dependencies ->
+    declaration.defaultDependencies.each { String configuration, List<Object> dependencies ->
       dependencies.each { dependency ->
         if( dependency instanceof Collection )
         {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/buildSrc/src/main/groovy/org/apache/zest/gradle/dist/DistributionPlugin.groovy
----------------------------------------------------------------------
diff --git a/buildSrc/src/main/groovy/org/apache/zest/gradle/dist/DistributionPlugin.groovy b/buildSrc/src/main/groovy/org/apache/zest/gradle/dist/DistributionPlugin.groovy
index 930e68e..8611825 100644
--- a/buildSrc/src/main/groovy/org/apache/zest/gradle/dist/DistributionPlugin.groovy
+++ b/buildSrc/src/main/groovy/org/apache/zest/gradle/dist/DistributionPlugin.groovy
@@ -23,6 +23,7 @@ import org.apache.rat.gradle.RatTask
 import org.apache.tools.ant.filters.ReplaceTokens
 import org.apache.zest.gradle.RootProjectPlugin
 import org.apache.zest.gradle.TaskGroups
+import org.apache.zest.gradle.dependencies.DependenciesDeclarationExtension
 import org.apache.zest.gradle.dependencies.DependenciesPlugin
 import org.apache.zest.gradle.release.ReleaseSpecExtension
 import org.apache.zest.gradle.release.ReleaseSpecPlugin
@@ -291,13 +292,14 @@ class DistributionPlugin implements Plugin<Project>
 
   private static void configureGoOfflineHelpers( Project project )
   {
+    def externalRepos = project.rootProject.extensions.getByType( DependenciesDeclarationExtension ).repositoriesUrls
     def approvedProjectsTask = project.tasks.getByName( ReleaseSpecPlugin.TaskNames.RELEASE_APPROVED_PROJECTS )
     def genOfflineMaven = project.tasks.create( TaskNames.GENERATE_MAVEN_OFFLINE_HELPERS,
                                                 GoOfflineHelpersTasks.GenerateMaven )
     def genOfflineGradle = project.tasks.create( TaskNames.GENERATE_GRADLE_OFFLINE_HELPERS,
                                                  GoOfflineHelpersTasks.GenerateGradle )
-    genOfflineMaven.repositories = DependenciesPlugin.REPOSITORIES_URLS
-    genOfflineGradle.repositories = DependenciesPlugin.REPOSITORIES_URLS
+    genOfflineMaven.repositories = externalRepos
+    genOfflineGradle.repositories = externalRepos
     [ genOfflineMaven, genOfflineGradle ].each { task ->
       task.group = TaskGroups.DISTRIBUTION
       task.dependsOn approvedProjectsTask

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/core/runtime/build.gradle
----------------------------------------------------------------------
diff --git a/core/runtime/build.gradle b/core/runtime/build.gradle
index 3b37d9f..d0dbeea 100644
--- a/core/runtime/build.gradle
+++ b/core/runtime/build.gradle
@@ -30,5 +30,4 @@ dependencies {
 
   testCompile zest.core.testsupport
   testCompile zest.library( 'constraints' )
-  testCompile libraries.hamcrest
 }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/dependencies.gradle
----------------------------------------------------------------------
diff --git a/dependencies.gradle b/dependencies.gradle
new file mode 100644
index 0000000..aed45ba
--- /dev/null
+++ b/dependencies.gradle
@@ -0,0 +1,255 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you 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.
+ */
+import org.apache.zest.gradle.dependencies.DependenciesDeclarationExtension
+
+def dependencies = extensions.getByType( DependenciesDeclarationExtension )
+
+// Remote repositories
+dependencies.repositoriesUrls << [
+  mavenCentral: "https://repo1.maven.org/maven2/",
+  ops4j       : "http://repository.ops4j.org/maven2/",
+  restlet     : 'https://maven.restlet.com/',
+  clojars     : "https://clojars.org/repo/",
+]
+
+// Core dependencies
+def asmVersion = '5.1'
+def orgJsonVersion = '20130213'
+def osgiVersion = '4.2.0' // 4.3.0 Fails to compile! - 5.0.0 exists
+dependencies.libraries << [
+  asm        : "org.ow2.asm:asm:$asmVersion",
+  asm_commons: "org.ow2.asm:asm-commons:$asmVersion",
+  asm_util   : "org.ow2.asm:asm-util:$asmVersion",
+  org_json   : "org.codeartisans:org.json:$orgJsonVersion",
+  osgi_core  : "org.osgi:org.osgi.core:$osgiVersion",
+]
+
+// Extensions, Libraries and Tools dependencies
+def bonecpVersion = '0.8.0.RELEASE'
+def bouncyVersion = '1.55'
+def codahaleMetricsVersion = '3.1.2'
+def commonsDbcpVersion = '2.1.1'
+def commonsLangVersion = '3.5'
+def derbyVersion = '10.13.1.1'
+def ehcacheVersion = '3.1.3'
+def elasticsearchVersion = '5.0.1'
+def freemarkerVersion = '2.3.25-incubating'
+def geodeVersion = '1.0.0-incubating'
+def groovyVersion = '2.4.7'
+def hazelcastVersion = '3.7.3'
+def httpClientVersion = '4.5.2'
+def jacksonVersion = '2.8.5'
+def javascriptVersion = '1.7.7.1'
+def javasqlgeneratorVersion = '0.3.2'
+def jcloudsVersion = '1.9.2' // 2.0.0 exists
+def jdbmVersion = '2.4'
+def jedisVersion = '2.9.0'
+def jettyVersion = '9.2.17.v20160517' // 9.3.x Tests fail!
+def leveldbVersion = '0.9'
+def leveldbJniVersion = '1.8'
+def liquibaseVersion = '3.5.3'
+def mongodbVersion = '3.3.0'
+def restletVersion = '2.3.7'
+def rdfVersion = '2.7.16' // 2.8.x change query results!! 4.x exists
+def riakVersion = '2.1.0'
+def servletVersion = '3.1.0'
+def shiroVersion = '1.3.2'
+def slf4jVersion = '1.7.21'
+def solrVersion = "1.4.1" // 4.x Fails to compile!
+def springVersion = '4.3.4.RELEASE'
+def spymemcachedVersion = '2.12.1'
+def velocityVersion = '1.7'
+dependencies.libraries << [
+  bonecp              : "com.jolbox:bonecp:$bonecpVersion",
+  bouncy_castle       : "org.bouncycastle:bcprov-jdk15on:$bouncyVersion",
+  codahale_metrics    : [ "io.dropwizard.metrics:metrics-core:$codahaleMetricsVersion",
+                          "io.dropwizard.metrics:metrics-healthchecks:$codahaleMetricsVersion" ],
+  commons_dbcp        : "org.apache.commons:commons-dbcp2:$commonsDbcpVersion",
+  commons_lang        : "org.apache.commons:commons-lang3:$commonsLangVersion",
+  ehcache             : "org.ehcache:ehcache:$ehcacheVersion",
+  elasticsearch       : [ "org.elasticsearch:elasticsearch:$elasticsearchVersion",
+                          "org.elasticsearch.client:transport:$elasticsearchVersion",
+                          // Elasticsearch 5.0 do not work with log4j 2.7
+                          "org.apache.logging.log4j:log4j-api:2.6.2",
+                          "org.apache.logging.log4j:log4j-core:2.6.2" ],
+  freemarker          : "org.freemarker:freemarker:$freemarkerVersion",
+  geode               : "org.apache.geode:geode-core:$geodeVersion",
+  groovy              : "org.codehaus.groovy:groovy-all:$groovyVersion",
+  hazelcast           : "com.hazelcast:hazelcast:$hazelcastVersion",
+  http_client         : "org.apache.httpcomponents:httpclient:$httpClientVersion",
+  jackson_mapper      : "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion",
+  javascript          : "org.mozilla:rhino:$javascriptVersion",
+  javaSqlGenerator    : "org.java-sql-generator:org.java-sql-generator.api:$javasqlgeneratorVersion",
+  javaSqlGeneratorImpl: "org.java-sql-generator:org.java-sql-generator.implementation:$javasqlgeneratorVersion",
+  jclouds_core        : "org.apache.jclouds:jclouds-core:$jcloudsVersion",
+  jclouds_blobstore   : "org.apache.jclouds:jclouds-allblobstore:$jcloudsVersion",
+  jclouds_filesystem  : "org.apache.jclouds.api:filesystem:$jcloudsVersion",
+  jetty_server        : "org.eclipse.jetty:jetty-server:$jettyVersion",
+  jetty_webapp        : "org.eclipse.jetty:jetty-webapp:$jettyVersion",
+  jetty_servlet       : "org.eclipse.jetty:jetty-servlet:$jettyVersion",
+  jetty_http          : "org.eclipse.jetty:jetty-http:$jettyVersion",
+  jetty_io            : "org.eclipse.jetty:jetty-io:$jettyVersion",
+  jetty_jmx           : "org.eclipse.jetty:jetty-jmx:$jettyVersion",
+  jetty_security      : "org.eclipse.jetty:jetty-security:$jettyVersion",
+  jetty_jsp           : "org.eclipse.jetty:jetty-jsp:$jettyVersion",
+  jetty_util          : "org.eclipse.jetty:jetty-util:$jettyVersion",
+  jetty_continuation  : "org.eclipse.jetty:jetty-continuation:$jettyVersion",
+  jetty_client        : "org.eclipse.jetty:jetty-client:$jettyVersion",
+  jetty_xml           : "org.eclipse.jetty:jetty-xml:$jettyVersion",
+  jdbm                : "jdbm:jdbm:$jdbmVersion",
+  jedis               : "redis.clients:jedis:$jedisVersion",
+  leveldb_api         : "org.iq80.leveldb:leveldb-api:$leveldbVersion",
+  leveldb_java        : "org.iq80.leveldb:leveldb:$leveldbVersion",
+  leveldb_jni_all     : "org.fusesource.leveldbjni:leveldbjni-all:$leveldbJniVersion",
+  liquibase           : "org.liquibase:liquibase-core:$liquibaseVersion",
+  mongodb             : "org.mongodb:mongo-java-driver:$mongodbVersion",
+  osgi_compendium     : "org.osgi:org.osgi.compendium:$osgiVersion",
+  osgi_enterprise     : "org.osgi:org.osgi.enterprise:$osgiVersion",
+  restlet             : [ "org.restlet.jee:org.restlet:$restletVersion",
+                          "org.restlet.jee:org.restlet.ext.atom:$restletVersion",
+                          "org.restlet.jee:org.restlet.ext.servlet:$restletVersion",
+                          "org.restlet.jee:org.restlet.ext.slf4j:$restletVersion" ],
+  restlet_xml         : "org.restlet.jee:org.restlet.ext.xml:$restletVersion",
+  riak                : "com.basho.riak:riak-client:$riakVersion",
+  servlet_api         : "javax.servlet:javax.servlet-api:$servletVersion",
+  sesame              : [ "org.openrdf.sesame:sesame-model:$rdfVersion",
+                          "org.openrdf.sesame:sesame-queryparser-sparql:$rdfVersion",
+                          "org.openrdf.sesame:sesame-repository-dataset:$rdfVersion",
+                          "org.openrdf.sesame:sesame-repository-http:$rdfVersion",
+                          "org.openrdf.sesame:sesame-rio-api:$rdfVersion",
+                          "org.openrdf.sesame:sesame-rio-n3:$rdfVersion",
+                          "org.openrdf.sesame:sesame-rio-ntriples:$rdfVersion",
+                          "org.openrdf.sesame:sesame-rio-rdfxml:$rdfVersion",
+                          "org.openrdf.sesame:sesame-rio-trig:$rdfVersion",
+                          "org.openrdf.sesame:sesame-rio-trix:$rdfVersion",
+                          "org.openrdf.sesame:sesame-rio-turtle:$rdfVersion",
+                          "org.openrdf.sesame:sesame-sail-api:$rdfVersion",
+                          "org.openrdf.sesame:sesame-sail-memory:$rdfVersion",
+                          "org.openrdf.sesame:sesame-sail-nativerdf:$rdfVersion",
+                          "org.openrdf.sesame:sesame-sail-rdbms:$rdfVersion" ],
+  shiro               : "org.apache.shiro:shiro-core:$shiroVersion",
+  shiro_web           : "org.apache.shiro:shiro-web:$shiroVersion",
+  slf4j_api           : "org.slf4j:slf4j-api:$slf4jVersion",
+  solr                : [ "org.apache.solr:solr-core:$solrVersion",
+                          "org.apache.solr:solr-solrj:$solrVersion" ],
+  sparql              : [ "org.openrdf.sesame:sesame-queryresultio-sparqlxml:$rdfVersion",
+                          "org.openrdf.sesame:sesame-queryresultio-sparqljson:$rdfVersion" ],
+  spring_core         : [ "org.springframework:spring-beans:$springVersion",
+                          "org.springframework:spring-context:$springVersion" ],
+  spymemcached        : "net.spy:spymemcached:$spymemcachedVersion",
+  velocity            : "org.apache.velocity:velocity:$velocityVersion",
+]
+
+// Tools dependencies
+def jgoodiesLooksVersion = '2.7.0'
+def pdfboxVersion = '2.0.3'
+def prefuseVersion = '1.0.1'
+dependencies.libraries << [
+  jgoodies_looks: "com.jgoodies:jgoodies-looks:$jgoodiesLooksVersion",
+  pdfbox        : "org.apache.pdfbox:pdfbox:$pdfboxVersion",
+  prefuse       : "de.sciss:prefuse-core:$prefuseVersion",
+]
+
+// Runtime, Test and Samples dependencies
+def antVersion = '1.9.7'
+def awaitilityVersion = '2.0.0'
+def dnsJavaVersion = '2.1.7'
+def easyMockVersion = '3.4'
+def h2Version = '1.4.193'
+def hamcrestVersion = '1.3'
+def junitVersion = '4.12'
+def logbackVersion = '1.1.7'
+def mockitoVersion = '2.2.9'
+def mysqlVersion = '6.0.4'
+def postgresqlVersion = '9.4.1211'
+def sqliteVersion = '3.14.2.1'
+dependencies.libraries << [
+  ant               : "org.apache.ant:ant:$antVersion",
+  ant_junit         : "org.apache.ant:ant-junit:$antVersion",
+  awaitility        : "org.awaitility:awaitility:$awaitilityVersion",
+  derby             : "org.apache.derby:derby:$derbyVersion",
+  dnsjava           : "dnsjava:dnsjava:$dnsJavaVersion",
+  easymock          : "org.easymock:easymock:$easyMockVersion",
+  h2                : "com.h2database:h2:$h2Version",
+  hamcrest          : [ "org.hamcrest:hamcrest-core:$hamcrestVersion",
+                        "org.hamcrest:hamcrest-library:$hamcrestVersion" ],
+  junit             : "junit:junit:$junitVersion",
+  logback           : "ch.qos.logback:logback-classic:$logbackVersion",
+  mockito           : "org.mockito:mockito-core:$mockitoVersion",
+  mysql_connector   : "mysql:mysql-connector-java:$mysqlVersion",
+  postgres          : "org.postgresql:postgresql:$postgresqlVersion",
+  spring_testsupport: "org.springframework:spring-test:$springVersion",
+  sqlite            : "org.xerial:sqlite-jdbc:$sqliteVersion",
+]
+
+// Default dependencies
+dependencies.defaultDependencies << [
+  testCompile: [ dependencies.libraries.junit,
+                 dependencies.libraries.hamcrest,
+                 dependencies.libraries.ant,
+                 dependencies.libraries.ant_junit ],
+  testRuntime: [ dependencies.libraries.asm,
+                 dependencies.libraries.asm_commons,
+                 dependencies.libraries.asm_util ]
+]
+
+// Resolution rules
+dependencies.dependencySubstitutionSpec = { DependencySubstitution dep, ModuleComponentSelector requested ->
+  // Always resolve ASM to the same version
+  if( requested.group == 'org.ow2.asm' )
+  {
+    dep.useTarget group: requested.group, name: requested.module, version: asmVersion
+  }
+  // Always resolve OSGi to the same version
+  if( requested.group == 'org.osgi' )
+  {
+    dep.useTarget group: requested.group, name: requested.module, version: osgiVersion
+  }
+  // Always resolve SLF4J to the same version
+  if( requested.group == 'org.slf4j' )
+  {
+    dep.useTarget group: requested.group, name: requested.module, version: slf4jVersion
+  }
+  // Always resolve Jackson to the same version
+  if( requested.group.startsWith( 'com.fasterxml.jackson' ) && requested.module != 'jackson-parent' )
+  {
+    dep.useTarget group: requested.group, name: requested.module, version: jacksonVersion
+  }
+  // woodstox:wstx-asl is broken (no pom), use org.codehaus.woodstox:wstx-asl instead
+  if( requested.group == 'woodstox' && requested.module == 'wstx-asl' )
+  {
+    dep.useTarget group: 'org.codehaus.woodstox', name: 'wstx-asl', version: requested.version
+  }
+  // some bad citizens have SNAPSHOT parents ...
+  if( requested.module == 'commons-sandbox-parent' && requested.version == '3-SNAPSHOT' )
+  {
+    dep.useTarget group: requested.group, name: requested.module, version: '3'
+  }
+  // GSON 2.3 POM is invalid, use 2.3.1 instead .. see https://github.com/google/gson/issues/588
+  if( requested.group == 'com.google.code.gson' && requested.module == 'gson' && requested.version ==
+      '2.3' )
+  {
+    dep.useTarget group: requested.group, name: requested.module, version: '2.3.1'
+  }
+  // Findbugs Annotation is LGPL, use https://github.com/stephenc/findbugs-annotations which is
+  // Apache 2 licensed instead
+  if( requested.group == 'net.sourceforge.findbugs' && requested.module == 'annotations' )
+  {
+    dep.useTarget group: 'com.github.stephenc.findbugs', name: 'findbugs-annotations', version: '1.3.9-1'
+  }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/manual/build.gradle
----------------------------------------------------------------------
diff --git a/manual/build.gradle b/manual/build.gradle
index b41ed37..c42763c 100644
--- a/manual/build.gradle
+++ b/manual/build.gradle
@@ -27,6 +27,6 @@ dependencies {
   compile zest.library( 'logging' )
 
   runtime zest.core.runtime
-  runtime( libraries.slf4j_simple )
+  runtime( libraries.logback )
 }
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/samples/sql-support/build.gradle
----------------------------------------------------------------------
diff --git a/samples/sql-support/build.gradle b/samples/sql-support/build.gradle
index d1a82e9..d386991 100644
--- a/samples/sql-support/build.gradle
+++ b/samples/sql-support/build.gradle
@@ -34,7 +34,7 @@ dependencies {
 
   runtime zest.core.runtime
   runtime libraries.postgres
-  runtime libraries.slf4j_simple
+  runtime libraries.logback
 }
 
 task( runSqlSupportSample, dependsOn: 'classes', type: JavaExec ) {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/tests/regression/build.gradle
----------------------------------------------------------------------
diff --git a/tests/regression/build.gradle b/tests/regression/build.gradle
index 5bb2a96..f7d5a1b 100644
--- a/tests/regression/build.gradle
+++ b/tests/regression/build.gradle
@@ -30,7 +30,5 @@ dependencies {
   compile libraries.junit
 
   runtime zest.core.runtime
-  runtime libraries.asm
-  runtime libraries.asm_commons
-  runtime libraries.slf4j_simple
+  runtime libraries.logback
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/0d573a40/tools/shell/build.gradle
----------------------------------------------------------------------
diff --git a/tools/shell/build.gradle b/tools/shell/build.gradle
index f20fbc3..2f91c58 100644
--- a/tools/shell/build.gradle
+++ b/tools/shell/build.gradle
@@ -31,6 +31,5 @@ jar {
 }
 
 dependencies {
-  testCompile libraries.junit
   testRuntime libraries.logback
 }