如何隐藏 Gradle 中的传递依赖?
How to shade a transitive dependency in Gradle?
有没有办法隐藏 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
不是一个选项。这是一种简化,在原始设置中正在进行一些反射。
抱歉,如果我误解了你的情况,它实际上更复杂,但看起来排除项只能在依赖声明中提供?
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'
}
}
}
是的,您可以使用 shadow plugin for Gradle to which has a very similar syntax 作为示例:
// Configuring Filtering for Relocation
shadowJar {
relocate('junit.textui', 'a') {
exclude 'junit.textui.TestRunner'
}
relocate('junit.framework', 'b') {
include 'junit.framework.Test*'
}
}
有没有办法隐藏 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
不是一个选项。这是一种简化,在原始设置中正在进行一些反射。
抱歉,如果我误解了你的情况,它实际上更复杂,但看起来排除项只能在依赖声明中提供?
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'
}
}
}
是的,您可以使用 shadow plugin for Gradle to which has a very similar syntax 作为示例:
// Configuring Filtering for Relocation
shadowJar {
relocate('junit.textui', 'a') {
exclude 'junit.textui.TestRunner'
}
relocate('junit.framework', 'b') {
include 'junit.framework.Test*'
}
}