Gradle:排除胖子从compileOnly提供的依赖项

时间:2019-07-01 13:56:49

标签: java gradle deployment fatjar

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

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

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

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

如我所见,我可以手动exclude那些传递依赖项并将它们重新声明为compileOnly,但这会有些混乱(我错过了吗?我是否排除了一些实际上不是的东西)提供?)。

1 个答案:

答案 0 :(得分:0)

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

例如:

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

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