如何在gradle中隐藏可传递的依赖关系?

axr492tv  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(621)

有没有办法在gradle中隐藏一个特定的(可传递的)依赖关系?我的情况:我有一个直接依赖于 com.amazonaws:aws-java-sdk-emr:1.10.33 以及 org.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 我的项目直接依赖于它不是一个选择。这是一个简化,在原来的设置一些反映正在进行。

omvjsjqw

omvjsjqw1#

抱歉,如果我误解了你的情况,事实上这是更复杂的,但它看起来像排除可以在依赖声明中提供?

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

rdlzhqv92#

是的,您可以使用gradle的shadow插件,它的语法与您的示例非常相似:

// Configuring Filtering for Relocation
shadowJar {
   relocate('junit.textui', 'a') {
       exclude 'junit.textui.TestRunner'
   }
   relocate('junit.framework', 'b') {
       include 'junit.framework.Test*'
   }
}
bihw5rsg

bihw5rsg3#

你可以试试这个 resolutionStrategy (https://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'
        }
    }
}

相关问题