2015-01-15 105 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'} 
}