2012-09-09 44 views
2

我寫了下面的任務,它提取所有的編譯依賴關係我的每一個分項目,並把它們放在每個子項目目錄:如何訪問我的gradle編譯依賴關係的源工件?

task exportCompileLibs << { 
    subprojects.each { iSubProject -> 
    iSubProject.configurations.findAll{it.name == "compile"}.each{ jConfig -> 
     println "copying compile libs for ${iSubProject.name}..." 
     copy { 
     into "${iSubProject.buildDir}/gradle-lib-export" 
     from jConfig 
     eachFile {println it.name} 
     } 
    } 
    } 
} 

我想延長這也出口Gradle已經知道的源工件(我可以看到緩存目錄中的源jar),我只是無法弄清楚如何使用對象模型來獲取它們的句柄。

IDEA和Eclipse插件似乎能夠做到這一點(他們指出他們直接構建到gradle緩存中的項目文件),但我無法弄清楚如何做 - 並查看IDE插件源代碼代碼,它看起來...很棘手。我希望在Gradle DSL或API中丟失一些明顯的東西。

任何人有任何想法?

+1

有關不依賴IDE插件的解決方案,請參閱http://stackoverflow.com/a/31451648/300053。 – eskatos

回答

1

對於任何尋找至少一個臨時解決方案的人來說,以下似乎幾乎完全是我想要的。

你的想法插件應用到的build.gradle文件要導出的依賴關係爲每個項目:

應用插件:「想法」

,然後定義這任務:

task exportDependencies << { 
    def deps = project.extensions.getByType(IdeaModel).module.resolveDependencies() 
    copy { 
    from deps*.classes.file 
    into "${buildDir}/gradle-lib-export/libs" 
    } 

    copy { 
    from deps*.sources.file 
    into "${buildDir}/gradle-lib-export/sources" 
    } 
} 

這是我的可怕的黑客,所以我沒有應用插件每個子項目:

task exportDependencies(description: "export project dependency jars") << { 
    subprojects.each { Project iSubProject -> 
    String target = "${iSubProject.buildDir}/gradle-lib-export" 

    IdeaPlugin ideaPlugin = new IdeaPlugin() 
    ideaPlugin.apply(iSubProject) 
    Set<Dependency> deps = ideaPlugin.model.module.resolveDependencies() 

    println "exporting dependencies for $iSubProject.name into $target" 
    copy { 
     from deps*.classes.file 
     into "${target}/libs" 
     eachFile { println "lib -> $it.name" } 
    } 
    copy { 
     from deps*.sources.file 
     into "${target}/sources" 
     eachFile{ println "source -> $it.name" } 
    } 
    } 
} 

+10點不與混亂的東西,我不想,-several萬點我生成任務列表ewwwww

0

目前還沒有比IDE插件更簡單的方法。這將有望在未來發生變化。