【发布时间】:2019-03-02 20:16:24
【问题描述】:
问题描述:
我正在使用 Gradle Shade 插件,一切正常,并将资源文件复制到最终的 jar 中。但是,正如docs 所说,它不能将其他.jar 文件包含为资源,因为它无法将它们与依赖项区分开来。它会解开它们而不是。
我想做的事:
我想将tools 文件夹(位于我的build.gradle 旁边)中的额外.jar 文件复制到由shadowJar 任务生成的最终jar 中。
问题:
如何扩展任务 (shadowJar) 以将其他文件复制到生成的 jar 文件中。
【问题讨论】:
-
我认为您需要更准确地提出问题。您想将其他 JAR 按原样 复制到影子 JAR(即 JAR 中的 JAR 文件)还是要将其他 JAR 的 内容 复制到影子 JAR ?
-
我认为这个问题准确地说明了我能够复制任何其他资源,除了 jar 文件。 “jar 文件的内容”算作“其他资源”。问题是关于在一个胖罐子里复制额外的罐子。
-
我了解您的问题“是关于在胖罐中复制额外的罐子”。关键是,您可以通过两种方式将 JAR(例如
j)复制到 Uber JAR(例如u)中:将j的内容解压缩并复制到u(通常保留文件夹结构,此外还可能合并META-INF/services文件),或者j被按原样 复制到u中(即文件本身以解压缩的方式)。 -
@twwt 这就是我想告诉你的。用你的术语来说,我想将一个 jar
J复制到 uber jarU按原样(不拆包)。问题的“问题描述”部分也说明了这一点 - 它说 shadowJar 解压罐子,而不是逐字复制。我希望shadowJar任务将 jarexample.jar从some/path/example.jarvarbatim 复制到target/app-uberjar.jar。
标签: gradle gradle-plugin gradle-task gradle-shadow-plugin