2

shadow我使用Gradle Shadow Plugin 添加的范围配置依赖项:

依赖{影子“org.apache.flink:flink-java:$flinkVersion”}

根据文档,这个依赖不应该出现在影子 JAR 中(这是真的),它应该在编译类路径上(with 也是真的),但我对配置没有这种依赖runtimeClasspath。我究竟做错了什么?

4

1 回答 1

1

我怀疑文档是错误的。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())
}

于 2021-11-03T20:17:58.280 回答