繁体   English   中英

Gradle 和 Shadow 插件 - 在 shadowJar 任务之后将附加文件(.jar 文件)复制到最终 jar

[英]Gradle and Shadow plugin - copy additional files (.jar files) to final jar after shadowJar task

问题描述
我正在使用 Gradle Shade 插件,一切正常,并将资源文件复制到最终的 jar。 但是,正如文档所说,它不能包含其他.jar文件作为资源,因为它无法将它们与依赖项区分开来。 它不是解压它们。

我想做什么
我想将tools文件夹( build.gradle我的build.gradle )中的额外.jar文件复制到shadowJar任务生成的最终jar

问题
如何扩展任务 ( shadowJar ) 以将其他文件复制到生成的 jar 文件中。

这在 Gradle shadow 插件的文档中, Embedding Jar Files Inside Your Shadow Jar部分中得到了回答:

[...] shadow 无法区分配置为依赖项的 jar 文件和包含在资源文件夹中的 jar 文件。 这意味着在资源目录中找到的任何 jar 都将与任何其他依赖项一样合并到影子 jar 中。 如果您打算将 jar 嵌入其中,则必须在影子任务开始之前将 jar 重命名为不以 .jar 结尾。

不幸的是,这既适用于作为依赖项配置一部分的 JAR,也适用于使用from copy spec 复制 JAR(由于shadowJar任务扩展了jar任务,因此它起作用;这反过来又是一个复制任务,因此支持复制规范)。

因此,只能通过重命名来嵌入 JAR。 如果它必须在 Uber JAR 中命名为.jar ,我认为唯一的选择是三步解决方法:

  1. 创建 Uber JAR 并通过重命名来嵌入 JAR; 例如,使用后缀*.zip
shadowJar
{
    from("${dirThatContainsSomeJARs}")
    {
        include '*.jar'
        rename '(.+).jar', '$1.zip'
    }
}
  1. 解压 Uber JAR 并将所有已嵌入为*.zip JAR 重命名回*.jar
  2. 使用jarzip任务重新jar所有内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM