簡體   English   中英

如何在 Gradle 中遮蔽傳遞依賴?

[英]How to shade a transitive dependency in Gradle?

有沒有辦法在 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進行着色不是一種選擇。 這是一種簡化,在原始設置中進行了一些反射。

是的,您可以使用 Gradle 的shadow插件,它的語法與您的示例非常相似

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

如果我誤解了您的情況,並且實際上更復雜,但看起來排除只能在依賴聲明中提供,我深表歉意?

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

您可以嘗試使用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'
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM