2016-03-09 33 views
1

我使用Java插件在搖籃Gradles`jar`是一種方法嗎?

apply plugin: 'java' 

我也使用配置將罐任務:

version = '1.0' 
jar { 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Quickstart', 
        'Implementation-Version': version 
    } 
} 

如果我的理解是正確的,jar方法被稱爲與一個閉包作爲參數。但是這種方法記錄在哪裏?我理解它是項目的一種方法。

我找不到它在https://docs.gradle.org/current/userguide/java_plugin.htmlhttps://docs.gradle.org/current/dsl/org.gradle.api.Project.htmlhttps://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html

還是我錯了我的假設是jar的方法?

+0

它的存在,我只是搜索您的第一個鏈接「罐子」。 https://docs.gradle.org/current/dsl/org.gradle.api.tasks.bundling.Jar.html – Dima

+1

@Dima:我在那個網頁上找不到它,...在表格中我只找到**任務**'jar'的描述鏈接到** class **'jar'。但是**方法**'jar'沒有文檔(顯示例如簽名)。或者'jar'不是一種方法?然後:它在哪裏被記錄爲用閉包調用該任務,這意味着什麼? – Edward

+0

不是「調用任務」,而是「配置任務」。您只需將它添加到jar清單中的屬性即可。這一切都在我鏈接到的頁面上描述。 – Dima

回答

2

答案是是和不是。語法是句法糖(雖然在這種情況下它使事情混淆)。它不是被調用的函數jar,而是函數tasks.getByName,它獲取名稱和閉包作爲參數。

https://docs.gradle.org/current/userguide/more_about_tasks.html它說,在部分17.3. Configuring tasksExample 17.9. Configuring a task - with closure):

這適用於任何任務。示例的第3行僅是tasks.getByName()方法的快捷方式。需要注意的是,如果您將閉包傳遞給getByName()方法,則此閉包用於配置任務,而不是在任務執行時。

所以,你也可以這樣寫:

version = '1.0' 
tasks.getByName "jar", { 
    manifest { 
     attributes 'Implementation-Title': 'Gradle Quickstart', 
        'Implementation-Version': version 
    } 
} 
2

也許不是你正在尋找一個全面的答案,但方向是正確的一些指針:

jar任務的內部似乎並沒有在很多的細節進行記錄,所以你必須查看源代碼才能找到您要查找的內容。 jar任務來自java插件here。這又增加了來自this class的任務。除了從Jar.java延伸以外,這門課不會做很多。

所以它似乎關閉:

jar { 
     .... 
} 

調用構造here,並設置在罐子封閉定義的屬性。進一步的Jar類從Zip.java擴展,同時覆蓋存檔文件的擴展名,並添加一個manifest屬性。

-

PS:這仍然不是很幫助我理解with jaroriginal question,但我喜歡你的提問行,我學一路上幾樣東西!

+0

感謝您的努力。我找到了一篇不錯的文章,對你來說應該很有趣:http://igorpopov.io/2014/05/01/understanding-gradle/ – Edward

相關問題