2015-01-15 108 views
7

我想從我的項目文件夾中複製2個文件夾到jar中。 當我使用後的文件的文件夾內設置搖籃副本,而不是文件夾自理:Gradle複製資源,processResources

processResources { 
    from 'public' 
    from 'data' 
} 

我需要的是有文件夾「PROJECTDIR /數據」 copyied到「my.jar /數據」。

回答

3

copy規範中的一個文件夾的副本搖籃內容如果在from指定的路徑是文件夾。

一種解決方案是使用intodirective指定jar中的目標文件夾。

processResources { 
    from 'data' 
    from 'publicFolder' 
} 

task data(type: Copy) { 
    from 'data' into 'data' 
} 

task publicFolder(type: Copy) { 
    from 'public' into 'public' 
} 

這會將內容或原始文件夾放入jar中同名的文件夾中。但正如你所看到的,你需要在into閉包中重複文件夾名稱。

另一個解決辦法是對這些資源文件夾父文件夾,並在copy規範使用此父文件夾。

這裏有一種方法,你可以構建資源文件夾:

<project-folder> 
| 
--> res 
    | 
    --> public 
    --> data 

然後在copy規範的processResources,你可以做到以下幾點:

processResources { 
    from 'res' 
} 

這將在創建文件夾publicdata你想要的最終的jar文件。

+0

是否可以說「從'projectRoot'文件夾中複製並且只採用'data'和'public'」文件夾? – 2015-01-15 17:14:15

+1

以某種方式對文件夾名稱使用過濾器無法正常工作。然而,我已經編輯了一個不涉及重新安排文件夾的主要解決方案。希望有所幫助。我同意理想的方式是從'projectRoot'文件夾中說_copy,並且只包含我想要的文件夾。如果我得到一個解決方案,會發佈一個解決方案。 – 2015-01-15 17:38:38

+0

謝謝你的「從入」解決方案。這是我一直在尋找的東西。問題是它不適合我。我得到錯誤「>找不到方法public()爲參數[build_akni020h40dn3k7vwmwbm63ee $ @ _run_closure2_closure3 4d266391]根工程」 – 2015-01-21 13:48:33

3

有一個'從'的方法,採用CopySpec封閉。

我會推薦使用這個,而不是分解成單獨的任務或重構您的佈局。

processResources { 
    from('data') {into 'data'} 
    from('publicFolder') {into 'publicFolder'} 
}