shadow
我使用Gradle Shadow Plugin 添加的范围配置依赖项:
依赖{影子“org.apache.flink:flink-java:$flinkVersion”}
根据文档,这个依赖不应该出现在影子 JAR 中(这是真的),它应该在编译类路径上(with 也是真的),但我对配置没有这种依赖runtimeClasspath
。我究竟做错了什么?
shadow
我使用Gradle Shadow Plugin 添加的范围配置依赖项:
依赖{影子“org.apache.flink:flink-java:$flinkVersion”}
根据文档,这个依赖不应该出现在影子 JAR 中(这是真的),它应该在编译类路径上(with 也是真的),但我对配置没有这种依赖runtimeClasspath
。我究竟做错了什么?
我怀疑文档是错误的。Shadow 从配置构建 jar runtimeClasspath
,这使得无法从运行时依赖项构建不同的工件。https://github.com/johnrengelman/shadow/blob/829647a06971ebc96c7d3df717f9a4e92811b602/src/main/groovy/com/github/jengelman/gradle/plugins/shadow/ShadowJavaPlugin.groovy#L84-L85
可以通过中间配置和重定向shadow
来解决问题runtimeClasspath
configurations {
// alternative "runtimeClasspath" configuration to provide to shadowJar configuration
create("uberJar") {
extendsFrom(configurations.runtimeOnly.get(), configurations.implementation.get())
isCanBeResolved = true
isCanBeConsumed = false
}
}
configurations.runtimeClasspath {
extendsFrom(configurations.shadow.get())
}
tasks.shadowJar {
configurations = listOf(project.configurations.named("uberJar").get())
}