簡體   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