2015-02-09 182 views
1

我偶然發現了一篇關於如何在Gradle中製作fat jar文件的文章。來自configurations.compile.collect的Gradle命令

jar { 
    from configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } 
} 

我的問題是

  1. 什麼是jar元素?這是一種聲明屬性的方法嗎?據我所知,我可以如下定義屬性:

    PROP1 { PROP2 { prop3.prop4 = 5 } }

這相當於:prop1.prop2.prop3.prop4 = 5

  1. from聲明:它是一種方法嗎?我的意思是它來自(params)。

我還發現了一篇關於ConfigurationContainer的文章:https://gradle.org/docs/current/javadoc/org/gradle/api/artifacts/ConfigurationContainer.html

但是,我無法鏈接信息以在此處查看完整圖片。

回答

1
  1. jar是任務名稱。它與物業無關。 Tasks是每個Gradle構建的基本構建塊。它相當於tasks.jar

  2. fromCopySpec類的一種方法。許多任務從CopySpec類延伸並繼承from方法。

configurations.compile是將所有在compileconfiguration定義的僞影的基準。

.collect {}是一個方法調用,其中一個參數是closure{}是一個空的封閉。

{ it.isDirectory() ? it : zipTree(it) }是閉包(aka函數),它返回要包含在JAR中的文件集合。 it是每個閉包的默認參數,在這種情況下,將是來自configurations.compile的JAR工件實例或本地文件路徑實例。它可能是一個文件路徑,因爲configurations支持已編譯的.class文件的JARS和本地文件系統路徑。

封閉邏輯的形式是<conditional> ? <A> : <B>,意味着if <conditional> then return <A> else return <B>

如果it變量是一個目錄,條件it.isDirectory()的計算結果爲True。所以如果it是我們返回的目錄it。如果它不是目錄,那麼代碼假定它是一個JAR。

zipTree(it)是一種從JAR中提取所有文件並將它們作爲集合返回的方法。

所有文件(目錄或分解JARS)從閉包中返回,然後由collect「合併」爲單個集合(例如FileTree)。

+0

有關_jar_任務(和_from_方法)的更多信息,請檢查:https://gradle.org/docs/current/dsl/org.gradle.api.tasks.bundling.Jar.html。 – roomsg 2015-02-10 19:10:13

+0

@Amnon您正在尋找什麼類型的代碼片段?問題提供了代碼剪切,並詢問每個部分代表什麼。如果你對這段代碼有不同的疑問,你可以打開一個新的問題,或者禮貌地詢問答案評論中的細節。 – cmcginty 2017-08-11 06:22:59