Browse Source

Build: Remove transitive dependencies

Transitive dependencies can be confusing and hard to deal with when
conflicts arise between them. This change removes transitive
dependencies from elasticsearch, and forces any dependency conflicts to
be resolved manually, instead of automatically by gradle.

closes #14627
Ryan Ernst 10 years ago
parent
commit
4b5f87cb7d

+ 1 - 1
build.gradle

@@ -114,7 +114,7 @@ subprojects {
   configurations {
     all {
       resolutionStrategy {
-        //failOnVersionConflict()
+        failOnVersionConflict()
 
         dependencySubstitution {
           substitute module("org.elasticsearch:rest-api-spec:${version}") with project("${projectsPrefix}:rest-api-spec")

+ 19 - 1
buildSrc/src/main/groovy/org/elasticsearch/gradle/BuildPlugin.groovy

@@ -19,6 +19,7 @@
 package org.elasticsearch.gradle
 
 import org.elasticsearch.gradle.precommit.PrecommitTasks
+import org.gradle.api.artifacts.ProjectDependency
 import org.gradle.api.GradleException
 import org.gradle.api.JavaVersion
 import org.gradle.api.Plugin
@@ -28,7 +29,6 @@ import org.gradle.api.artifacts.dsl.RepositoryHandler
 import org.gradle.api.tasks.bundling.Jar
 import org.gradle.api.tasks.compile.JavaCompile
 import org.gradle.util.GradleVersion
-import org.gradle.util.VersionNumber
 
 /**
  * Encapsulates build configuration for elasticsearch projects.
@@ -48,6 +48,7 @@ class BuildPlugin implements Plugin<Project> {
         project.pluginManager.apply('nebula.info-scm')
         project.pluginManager.apply('nebula.info-jar')
 
+        configureConfigurations(project)
         project.ext.versions = VersionProperties.versions
         configureCompile(project)
         configureJarManifest(project)
@@ -80,6 +81,23 @@ class BuildPlugin implements Plugin<Project> {
         }
     }
 
+    /** Makes dependencies non-transitive by default */
+    static void configureConfigurations(Project project) {
+
+        // force all dependencies added directly to compile/testCompile to be non-transitive, except for ES itself
+        project.configurations.compile.dependencies.all { dep ->
+            if (!(dep instanceof ProjectDependency) && dep.getGroup() != 'org.elasticsearch') {
+                dep.transitive = false
+            }
+        }
+        project.configurations.testCompile.dependencies.all { dep ->
+            if (!(dep instanceof ProjectDependency) && dep.getGroup() != 'org.elasticsearch') {
+                dep.transitive = false
+            }
+        }
+    }
+
+    /** Adds repositores used by ES dependencies */
     static void configureRepositories(Project project) {
         RepositoryHandler repos = project.repositories
         repos.mavenCentral()

+ 3 - 0
buildSrc/version.properties

@@ -15,3 +15,6 @@ jna               = 4.1.0
 randomizedrunner  = 2.2.0
 junit             = 4.11
 httpclient        = 4.3.6
+httpcore          = 4.3.3
+commonslogging    = 1.1.3
+commonscodec      = 1.10

+ 12 - 8
core/build.gradle

@@ -31,15 +31,19 @@ dependencies {
 
   // lucene
   compile "org.apache.lucene:lucene-core:${versions.lucene}"
-  compile "org.apache.lucene:lucene-backward-codecs:${versions.lucene}"
   compile "org.apache.lucene:lucene-analyzers-common:${versions.lucene}"
-  compile "org.apache.lucene:lucene-queries:${versions.lucene}"
-  compile "org.apache.lucene:lucene-memory:${versions.lucene}"
+  compile "org.apache.lucene:lucene-backward-codecs:${versions.lucene}"
+  compile "org.apache.lucene:lucene-grouping:${versions.lucene}"
   compile "org.apache.lucene:lucene-highlighter:${versions.lucene}"
-  compile "org.apache.lucene:lucene-queryparser:${versions.lucene}"
-  compile "org.apache.lucene:lucene-suggest:${versions.lucene}"
   compile "org.apache.lucene:lucene-join:${versions.lucene}"
+  compile "org.apache.lucene:lucene-memory:${versions.lucene}"
+  compile "org.apache.lucene:lucene-misc:${versions.lucene}"
+  compile "org.apache.lucene:lucene-queries:${versions.lucene}"
+  compile "org.apache.lucene:lucene-queryparser:${versions.lucene}"
+  compile "org.apache.lucene:lucene-sandbox:${versions.lucene}"
   compile "org.apache.lucene:lucene-spatial:${versions.lucene}"
+  compile "org.apache.lucene:lucene-spatial3d:${versions.lucene}"
+  compile "org.apache.lucene:lucene-suggest:${versions.lucene}"
 
   compile 'org.elasticsearch:securesm:1.0'
 
@@ -56,10 +60,10 @@ dependencies {
   // json and yaml
   compile "com.fasterxml.jackson.core:jackson-core:${versions.jackson}"
   compile "com.fasterxml.jackson.dataformat:jackson-dataformat-smile:${versions.jackson}"
-  compile(group: 'com.fasterxml.jackson.dataformat', name: 'jackson-dataformat-yaml', version: versions.jackson) {
-    exclude group: 'com.fasterxml.jackson.core', module: 'jackson-databind'
-  }
+  compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:${versions.jackson}"
   compile "com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:${versions.jackson}"
+  compile "org.yaml:snakeyaml:1.15" // used by jackson yaml
+
   // network stack
   compile 'io.netty:netty:3.10.5.Final'
   // compression of transport protocol

+ 1 - 0
plugins/analysis-icu/build.gradle

@@ -24,6 +24,7 @@ esplugin {
 
 dependencies {
   compile "org.apache.lucene:lucene-analyzers-icu:${versions.lucene}"
+  compile 'com.ibm.icu:icu4j:54.1'
 }
 
 dependencyLicenses {

+ 1 - 0
plugins/analysis-phonetic/build.gradle

@@ -24,6 +24,7 @@ esplugin {
 
 dependencies {
   compile "org.apache.lucene:lucene-analyzers-phonetic:${versions.lucene}"
+  compile 'commons-codec:commons-codec:1.10'
 }
 
 dependencyLicenses {

+ 25 - 6
plugins/discovery-azure/build.gradle

@@ -22,14 +22,33 @@ esplugin {
   classname 'org.elasticsearch.plugin.discovery.azure.AzureDiscoveryPlugin'
 }
 
+versions << [
+  'azure': '0.7.0',
+  'jersey': '1.13'
+]
+
 dependencies {
-  compile('com.microsoft.azure:azure-management-compute:0.7.0') {
-    exclude group: 'stax', module: 'stax-api'
-  }
-  compile('com.microsoft.azure:azure-management:0.7.0') {
-    exclude group: 'stax', module: 'stax-api'
-  }
+  compile "com.microsoft.azure:azure-management-compute:${versions.azure}"
+  compile "com.microsoft.azure:azure-management:${versions.azure}"
+  compile "com.microsoft.azure:azure-core:${versions.azure}"
   compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
+  compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
+  compile "commons-logging:commons-logging:${versions.commonslogging}"
+  compile "commons-codec:commons-codec:${versions.commonscodec}"
+  compile 'javax.mail:mail:1.4.5'
+  compile 'javax.activation:activation:1.1'
+  compile 'javax.inject:javax.inject:1'
+  compile "com.sun.jersey:jersey-client:${versions.jersey}"
+  compile "com.sun.jersey:jersey-core:${versions.jersey}"
+  compile "com.sun.jersey:jersey-json:${versions.jersey}"
+  compile 'org.codehaus.jettison:jettison:1.1' 
+  compile 'com.sun.xml.bind:jaxb-impl:2.2.3-1'
+  compile 'javax.xml.bind:jaxb-api:2.2.2'
+  compile 'javax.xml.stream:stax-api:1.0-2'
+  compile 'org.codehaus.jackson:jackson-core-asl:1.9.2'
+  compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.2'
+  compile 'org.codehaus.jackson:jackson-jaxrs:1.9.2'
+  compile 'org.codehaus.jackson:jackson-xc:1.9.2'  
 }
 
 dependencyLicenses {

+ 1 - 0
plugins/discovery-azure/licenses/commons-codec-1.10.jar.sha1

@@ -0,0 +1 @@
+4b95f4897fa13f2cd904aee711aeafc0c5295cd8

+ 0 - 1
plugins/discovery-azure/licenses/commons-codec-1.6.jar.sha1

@@ -1 +0,0 @@
-b7f0fc8f61ecadeb3695f0b9464755eee44374d4

+ 11 - 1
plugins/discovery-ec2/build.gradle

@@ -22,9 +22,19 @@ esplugin {
   classname 'org.elasticsearch.plugin.discovery.ec2.Ec2DiscoveryPlugin'
 }
 
+versions << [
+  'aws': '1.10.19'
+]
+
 dependencies {
-  compile 'com.amazonaws:aws-java-sdk-ec2:1.10.19'
+  compile "com.amazonaws:aws-java-sdk-ec2:${versions.aws}"
+  compile "com.amazonaws:aws-java-sdk-core:${versions.aws}"
   compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
+  compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
+  compile "commons-logging:commons-logging:${versions.commonslogging}"
+  compile "commons-codec:commons-codec:${versions.commonscodec}"
+  compile 'com.fasterxml.jackson.core:jackson-databind:2.5.3'
+  compile 'com.fasterxml.jackson.core:jackson-annotations:2.5.0'
 }
 
 dependencyLicenses {

+ 1 - 0
plugins/discovery-ec2/licenses/commons-codec-1.10.jar.sha1

@@ -0,0 +1 @@
+4b95f4897fa13f2cd904aee711aeafc0c5295cd8

+ 0 - 1
plugins/discovery-ec2/licenses/commons-codec-1.6.jar.sha1

@@ -1 +0,0 @@
-b7f0fc8f61ecadeb3695f0b9464755eee44374d4

+ 13 - 3
plugins/discovery-gce/build.gradle

@@ -4,11 +4,21 @@ esplugin {
   classname 'org.elasticsearch.plugin.discovery.gce.GceDiscoveryPlugin'
 }
 
+versions << [
+  'google': '1.20.0'
+]
+
 dependencies {
-  compile('com.google.apis:google-api-services-compute:v1-rev71-1.20.0') {
-    exclude group: 'com.google.guava', module: 'guava-jdk5'
-  }
+  compile "com.google.apis:google-api-services-compute:v1-rev71-${versions.google}"
+  compile "com.google.api-client:google-api-client:${versions.google}"
+  compile "com.google.oauth-client:google-oauth-client:${versions.google}"
+  compile "com.google.http-client:google-http-client:${versions.google}"
+  compile "com.google.http-client:google-http-client-jackson2:${versions.google}"
+  compile 'com.google.code.findbugs:jsr305:1.3.9'
   compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
+  compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
+  compile "commons-logging:commons-logging:${versions.commonslogging}"
+  compile "commons-codec:commons-codec:${versions.commonscodec}"
 }
 
 dependencyLicenses {

+ 1 - 0
plugins/discovery-gce/licenses/commons-codec-1.10.jar.sha1

@@ -0,0 +1 @@
+4b95f4897fa13f2cd904aee711aeafc0c5295cd8

+ 0 - 1
plugins/discovery-gce/licenses/commons-codec-1.6.jar.sha1

@@ -1 +0,0 @@
-b7f0fc8f61ecadeb3695f0b9464755eee44374d4

+ 3 - 0
plugins/lang-expression/build.gradle

@@ -24,6 +24,9 @@ esplugin {
 
 dependencies {
   compile "org.apache.lucene:lucene-expressions:${versions.lucene}"
+  compile 'org.antlr:antlr4-runtime:4.5.1-1'
+  compile 'org.ow2.asm:asm:5.0.4'
+  compile 'org.ow2.asm:asm-commons:5.0.4'
 }
 
 dependencyLicenses {

+ 27 - 13
plugins/mapper-attachments/build.gradle

@@ -18,34 +18,48 @@
  */
 
 esplugin {
-  name 'mapper-attachments'
   description 'The mapper attachments plugin adds the attachment type to Elasticsearch using Apache Tika.'
   classname 'org.elasticsearch.mapper.attachments.MapperAttachmentsPlugin'
 }
 
+versions << [
+  'tika': '1.11',
+  'pdfbox': '1.8.10',
+  'bouncycastle': '1.52',
+  'poi': '3.13'
+]
+
 dependencies {
   // mandatory for tika
-  compile('org.apache.tika:tika-core:1.11')
-  compile('org.apache.tika:tika-parsers:1.11') { 
-    transitive = false
-  }
-  compile('commons-io:commons-io:2.4')
+  compile "org.apache.tika:tika-core:${versions.tika}"
+  compile "org.apache.tika:tika-parsers:${versions.tika}"
+  compile 'commons-io:commons-io:2.4'
   
   // character set detection
-  compile('com.googlecode.juniversalchardet:juniversalchardet:1.0.3')
+  compile 'com.googlecode.juniversalchardet:juniversalchardet:1.0.3'
 
   // external parser libraries
   // HTML
-  compile('org.ccil.cowan.tagsoup:tagsoup:1.2.1')
+  compile 'org.ccil.cowan.tagsoup:tagsoup:1.2.1'
   // Adobe PDF
-  compile('org.apache.pdfbox:pdfbox:1.8.10')
-  compile('org.bouncycastle:bcmail-jdk15on:1.52')
+  compile "org.apache.pdfbox:pdfbox:${versions.pdfbox}"
+  compile "org.apache.pdfbox:fontbox:${versions.pdfbox}"
+  compile "org.apache.pdfbox:jempbox:${versions.pdfbox}"
+  compile 'commons-logging:commons-logging:1.1.3'
+  compile "org.bouncycastle:bcmail-jdk15on:${versions.bouncycastle}"
+  compile "org.bouncycastle:bcprov-jdk15on:${versions.bouncycastle}"
+  compile "org.bouncycastle:bcpkix-jdk15on:${versions.bouncycastle}"
   // OpenOffice
-  compile('org.apache.poi:poi-ooxml:3.13')
+  compile "org.apache.poi:poi-ooxml:${versions.poi}"
+  compile "org.apache.poi:poi:${versions.poi}"
+  compile "org.apache.poi:poi-ooxml-schemas:${versions.poi}"
+  compile "commons-codec:commons-codec:${versions.commonscodec}"
+  compile 'org.apache.xmlbeans:xmlbeans:2.6.0'
+  compile 'stax:stax-api:1.0.1'
   // MS Office
-  compile('org.apache.poi:poi-scratchpad:3.13')
+  compile "org.apache.poi:poi-scratchpad:${versions.poi}"
   // Apple iWork
-  compile('org.apache.commons:commons-compress:1.10')
+  compile 'org.apache.commons:commons-compress:1.10'
 }
 
 compileJava.options.compilerArgs << '-Xlint:-cast,-deprecation,-rawtypes'

+ 1 - 0
plugins/mapper-attachments/licenses/commons-codec-1.10.jar.sha1

@@ -0,0 +1 @@
+4b95f4897fa13f2cd904aee711aeafc0c5295cd8

+ 0 - 1
plugins/mapper-attachments/licenses/commons-codec-1.9.jar.sha1

@@ -1 +0,0 @@
-9ce04e34240f674bc72680f8b843b1457383161a

+ 0 - 1
plugins/mapper-attachments/licenses/commons-logging-1.1.1.jar.sha1

@@ -1 +0,0 @@
-5043bfebc3db072ed80fbd362e7caf00e885d8ae

+ 1 - 0
plugins/mapper-attachments/licenses/commons-logging-1.1.3.jar.sha1

@@ -0,0 +1 @@
+f6f66e966c70a83ffbdb6f17a0919eaf7c8aca7f

+ 2 - 3
plugins/repository-azure/build.gradle

@@ -23,9 +23,8 @@ esplugin {
 }
 
 dependencies {
-  compile('com.microsoft.azure:azure-storage:2.0.0') {
-    exclude group: 'org.slf4j', module: 'slf4j-api'
-  }
+  compile 'com.microsoft.azure:azure-storage:2.0.0'
+  compile 'org.apache.commons:commons-lang3:3.3.2'
 }
 
 dependencyLicenses {

+ 12 - 1
plugins/repository-s3/build.gradle

@@ -22,9 +22,20 @@ esplugin {
   classname 'org.elasticsearch.plugin.repository.s3.S3RepositoryPlugin'
 }
 
+versions << [
+  'aws': '1.10.19'
+]
+
 dependencies {
-  compile 'com.amazonaws:aws-java-sdk-s3:1.10.19'
+  compile "com.amazonaws:aws-java-sdk-s3:${versions.aws}"
+  compile "com.amazonaws:aws-java-sdk-kms:${versions.aws}"
+  compile "com.amazonaws:aws-java-sdk-core:${versions.aws}"
   compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
+  compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
+  compile "commons-logging:commons-logging:${versions.commonslogging}"
+  compile "commons-codec:commons-codec:${versions.commonscodec}"
+  compile "com.fasterxml.jackson.core:jackson-databind:2.5.3"
+  compile "com.fasterxml.jackson.core:jackson-annotations:2.5.0"
 }
 
 dependencyLicenses {

+ 1 - 0
plugins/repository-s3/licenses/commons-codec-1.10.jar.sha1

@@ -0,0 +1 @@
+4b95f4897fa13f2cd904aee711aeafc0c5295cd8

+ 0 - 1
plugins/repository-s3/licenses/commons-codec-1.6.jar.sha1

@@ -1 +0,0 @@
-b7f0fc8f61ecadeb3695f0b9464755eee44374d4

+ 8 - 13
test-framework/build.gradle

@@ -24,19 +24,14 @@ apply plugin: 'com.bmuschko.nexus'
 dependencies {
   compile "org.elasticsearch:elasticsearch:${version}"
   compile "com.carrotsearch.randomizedtesting:randomizedtesting-runner:${versions.randomizedrunner}"
-  compile("junit:junit:${versions.junit}") {
-    exclude group: 'org.hamcrest', module: 'hamcrest-core'
-  }
-  compile("org.apache.lucene:lucene-test-framework:${versions.lucene}") {
-    exclude group: 'com.carrotsearch.randomizedtesting', module: 'junit4-ant'
-  }
-  compile('org.hamcrest:hamcrest-all:1.3') {
-    exclude group: 'org.hamcrest', module: 'hamcrest-core'
-  }
-  compile("org.apache.httpcomponents:httpclient:${versions.httpclient}") {
-    exclude group: 'commons-codec', module: 'commons-codec'
-  }
-  compile "commons-codec:commons-codec:1.9"
+  compile "junit:junit:${versions.junit}"
+  compile 'org.hamcrest:hamcrest-all:1.3'
+  compile "org.apache.lucene:lucene-test-framework:${versions.lucene}"
+  compile "org.apache.lucene:lucene-codecs:${versions.lucene}"
+  compile "org.apache.httpcomponents:httpclient:${versions.httpclient}"
+  compile "org.apache.httpcomponents:httpcore:${versions.httpcore}"
+  compile "commons-logging:commons-logging:${versions.commonslogging}"
+  compile "commons-codec:commons-codec:${versions.commonscodec}"
 }
 
 compileJava.options.compilerArgs << '-Xlint:-cast,-deprecation,-fallthrough,-overrides,-rawtypes,-serial,-try,-unchecked'