2016-08-18 42 views
2

我正在尋找一種方法將特定配置的項目依賴關係提取到工作區文件夾中。由於可能存在多個依賴關係,我想將每個工件提取到具有工件名稱的文件夾中。我想在python的背景下,解決這一點,但這個問題是不是真的蟒蛇相關...使用工件名稱解壓縮Gradle依賴關係

目前我gradle這個文件看起來像這樣:

configurations { python } 

dependencies { 
    python group: 'github.dpeger', name: 'py-utils', version: '1.6', ext: 'zip' 
    python group: 'github.dpeger', name: 'py-test', version: '1.6', ext: 'zip' 
} 

task cleanPythonDependencies(type: Delete) { delete 'lib/python' } 
tasks.clean.dependsOn cleanPythonDependencies 

task importPythonDependencies(type: Copy) { 
    dependsOn cleanPythonDependencies 
    from { 
    configurations.python.collect { zipTree(it) } 
    } 
    into 'lib/python' 
} 

然而,這提取所有依賴於python配置到文件夾lib\pyhton而不使用工件名稱。

我想那是什麼py-utils被提取到lib\pyhton\py-utilspy-testlib\pyhton\py-test

回答

2

假設你想提取到的lib \ pyhton \ PY-utils的和PY-測試的lib \ pyhton \ PY-測試,這應該做的工作PY-utils的:

task importPythonDependencies() { 
    dependsOn cleanPythonDependencies 

    String collectDir = 'lib/python' 
    outputs.dir collectDir 

    doLast { 
    configurations.python.resolvedConfiguration.resolvedArtifacts.each { artifact -> 
     copy { 
     from zipTree(artifact.getFile()) 
     into collectDir + '/' + artifact.name 
     } 
    } 
    } 
} 
+0

偉大的作品,謝謝。但是,我修改了一下你的答案(請參閱問題的編輯) - 在你的任務中 - 在gradle的配置階段,工件將被複制到lib文件夾。這很可能會導致清理問題,因爲依賴任務'cleanPythonDependencies'將在配置階段後執行,從而再次刪除所有提取的工件... – dpr

+1

很高興幫助。我修改了答案以反映您的意見。我嘗試時沒有考慮清理。儘管如此,它不應該像你指出的那樣成爲配置階段的一部分。 –