1

我在compileOnly配置和其他几个库中使用了一个巨大的依赖项(Spark)。我正在尝试构建一个胖罐子,当然,没有compileOnly依赖关系。Gradle 可以很好地做到这一点,但是,几个库声明compile/runtimeOnly依赖项也是compileOnly巨大依赖项的依赖项,例如:

my-module
|-> compileOnly: spark
|   ...
|   \-> compile: scala-reflect
|   ...
\-> implementation: library
    ...
    \-> runtimeOnly: scala-reflect

这会导致scala-reflect作为运行时依赖项包含在 jar 中,这是我试图避免的。Scala 在这里仅作为示例,实际上还有更多类似的(Jackson,Apache Commons 的一部分,...)。

有没有办法强制执行compileOnly训练依赖?

正如我所看到的,我可以手动将exclude这些传递依赖项重新声明为compileOnly,但这会有点混乱(我错过了什么吗?我排除了一些实际上没有提供的东西吗?)。

4

1 回答 1

0

您可以尝试通过dependencies指令强制执行影子插件以删除那些不需要的依赖项。

例如:

shadowJar {
  dependencies {
    exclude(dependency('org.scala-lang:scala-reflect:.*'))
  }
}

更多信息在这里 https://imperceptiblethoughts.com/shadow/configuration/dependencies/#filtering-dependencies

于 2020-11-19T16:22:55.020 回答