2014-07-23 65 views
4

我們有一個Java webstart應用程序,並且希望在項目完成後將所有第三方庫部署到/ lib/ext /和我們所有的項目jar文件中用Gradle構建。從Gradle中的複製任務中排除所有子項目jar

使用this answer到以前的問題我幾乎能夠完成這個,除了我的共享項目庫被複制到lib /和lib/ext /。但是,它們只應複製到lib /中。

現在我正在尋找一種方法來排除該任務所有的共享項目庫:

task copyDeps(type: Copy) { 
    from(subprojects.configurations.runtime) 
    into project.file('lib/ext') 
} 

我嘗試添加類似排除(subprojects.jar),但我不知道我是怎麼可以獲取所有可以傳遞給exclude()的參數的子項目罐子。

我該如何做到這一點?我也接受其他關於如何實現將庫複製到上述文件夾的主要目標的建議。

List<String> projectLibs = new ArrayList<String>() 
task copyJars(type: Copy, dependsOn: subprojects.jar) {  

    eachFile { fileCopyDetails -> 
     projectLibs.add(fileCopyDetails.name) 
    } 
    from(subprojects.jar) 
    into file('lib') 
} 

task copyDeps(type: Copy, dependsOn: copyJars) { 

    eachFile { fileCopyDetails ->  
     if (fileCopyDetails.name in projectLibs){ 
     fileCopyDetails.exclude() 
     } 
    } 
    from (subprojects.configurations.runtime) 
    into file('lib/ext') 
} 

如果有人有一個更好的解決方案,我會很高興聽到它:

+0

你可以準備在GitHub上最小的工作的例子嗎?我可能會嘗試,但將其設置爲耗時,而且我沒有太多時間。 – Opal

+1

嗨@Opal,感謝您的幫助!我在https://github.com/Prom42/gradle-test創建了一個簡單的示例。只需運行'gradle build copyFiles' – Dominic

回答

2

我現在已經通過記住該項目的jar文件的名稱中copyJars,然後排除他們copyDeps解決我的問題: - )

2

這裏是一個較短的解決方案:

task copyDeps (type: Copy, dependsOn: subprojects.jar) { 
    from (subprojects.configurations.runtime) { 
     subprojects.jar.each { it.outputs.files.each { exclude it.getName() } } 
    } 
    into project.file('lib/ext') 
} 
相關問題