2

有沒有一種方法來遮蔽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擰緊,但我仍然需要這兩個。如何遮蔽Gradle中的傳遞依賴項?

目前可以做這樣的事情嗎?

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

還是一個不太髒的解決方法呢?

謝謝!

注意:陰影aws-sdk我的項目直接依賴不是一個選項。這是一種簡化,在原始設置中正在進行一些反思。

+0

你們排除了'1.7.4',只在兩個地方都使用了'1.10.33'? – RaGe

+0

我現在的解決方案是將'hadoop-aws'與'aws-java-sdk:1.10.33'重新編譯併發布到我自己的倉庫中,以便在胖罐中只有一個'aws-java-jdk'。但是我不能輕鬆升級'hadoop-aws'依賴關係,而且這個想法本身並沒有擴展到其他用例,其中陰影特定的工件將會非常簡單,因爲某些類用於反射。 – ale64bit

回答

1

道歉,如果我誤解了你的情況,它實際上更復雜,但它看起來像只能在依賴聲明中提供排除?

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

感謝您的回答。事情正是我不想排除這兩個版本中的任何一個(一個直接使用,另一個被反射使用),所以我想保留它們兩個,通過遮蔽其中一個:) – ale64bit

相關問題