Java Gradle:从fat jar中排除compileOnly提供的依赖项

Java Gradle:从fat jar中排除compileOnly提供的依赖项,java,gradle,deployment,fatjar,Java,Gradle,Deployment,Fatjar,我在compileOnlyconfiguration和其他几个库中使用了一个巨大的依赖项(Spark)。当然,我正在尝试构建一个胖jar,而不需要compileOnly依赖项。Gradle做得很好,但是,有几个库声明了compile/runtimeOnly依赖项,它们也是compileOnly巨大依赖项的依赖项,例如: my-module |-> compileOnly: spark | ... | \-> compile: scala-reflect | ... \-&

我在
compileOnly
configuration和其他几个库中使用了一个巨大的依赖项(Spark)。当然,我正在尝试构建一个胖jar,而不需要
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
trainisition依赖项


如我所见,我可以手动
排除那些可传递的依赖项,并将它们重新声明为
compileOnly
,但这会有点混乱(我是否遗漏了任何内容?我是否排除了实际未提供的内容?).

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

例如:

shadowJar {
  dependencies {
    exclude(dependency('org.scala-lang:scala-reflect:.*'))
  }
}
更多信息请点击这里

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

例如:

shadowJar {
  dependencies {
    exclude(dependency('org.scala-lang:scala-reflect:.*'))
  }
}
更多信息请点击这里

如何构建fatjar?我使用的是一个获取编译输出并在默认情况下添加
runtimeClasspath
configuration中所有内容的函数。我试图不向
runtimeClasspath
添加任何内容。如何构建fatjar?我使用的是获取编译输出并在默认情况下添加
runtimeClasspath
配置中的所有内容。我试图不向
runtimeClasspath
添加任何内容。