如何在Gradle中隐藏传递依赖?

时间:2015-12-17 20:26:47

标签: java hadoop amazon-web-services gradle dependency-management

有没有办法在Gradle中隐藏特定(传递)依赖?我的情况:我有一个直接取决于com.amazonaws:aws-java-sdk-emr:1.10.33org.apache.hadoop:hadoop-aws:2.7.1的项目,但hadoop-aws轮流取决于com.amazonaws:aws-java-sdk-emr:1.7.4,这会导致最终的JAR失败,但无论如何我都需要。

目前可以做这样的事吗?

shadowJar {
    relocate('com.amazonaws', 'shadowedstuff.awsjdk') {
        include(dependency('com.amazonaws:aws-java-sdk:1.7.4'))
    }
}

还是一个不那么脏的解决方法呢?

谢谢!

注意:直接遮挡我的项目所依赖的aws-sdk不是一个选项。这是一种简化,在原始设置中会有一些反思。

3 个答案:

答案 0 :(得分:1)

道歉,如果我误解了你的情况,事实上它更复杂,但似乎只能在依赖声明中提供排除?

dependencies {
    ...
    compile('org.apache.hadoop:hadoop-aws:2.7.1') {
        exclude group: 'com.amazonaws', module: 'aws-java-sdk'
    }
    ...
}

答案 1 :(得分:1)

您可以尝试使用resolutionStrategyhttps://docs.gradle.org/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html)强制使用特定版本。

一个项目的例子:

configurations {
    testImplementation.extendsFrom compileOnly

    all {
        resolutionStrategy {
            // Force jackson 2.4.4 for Spark
            force 'com.fasterxml.jackson.core:jackson-core:2.4.4', 'com.fasterxml.jackson.core:jackson-databind:2.4.4', 'com.fasterxml.jackson.core:jackson-annotations:2.4.4'
            force 'com.google.guava:guava:23.6-jre'
        }
    }
}

答案 2 :(得分:1)

是的,您可以为Gradle使用shadow插件,示例中的插件带有very similar syntax

std::istream