2013-04-22 24 views
5

我們有一箇舊的playframework 1.2.x版本,我們將所有jar複製到project/lib中,以便playframework可以使用它們。我們很樂意複製所有的源代碼jar,所以當runnig玩eclipsify時,我們可以查看所有的第三方源代碼。有沒有辦法用gradle來做到這一點?如何使用gradle複製所有源jar包

我的意思是當我運行gradle eclipse時下載的所有源碼罐,因爲我看到它們下載緩存位置。我們在一個項目中使用gradle eclipse爲我們調用了eclipsify,所以我們可以100%使用gradle。

感謝, 院長

回答

5

這是不是如預期那樣直截了當。下面的代碼片段複製源罐子全部依賴(運行時間+編譯)一個Java項目到特定文件夾:

task copySourceJars(type:Copy){ 
     def deps = configurations.runtime.incoming.dependencies.collect{ dependency -> 
      dependency.artifact { artifact -> 
        artifact.name = dependency.name 
        artifact.type = 'source' 
        artifact.extension = 'jar' 
        artifact.classifier = 'sources' 
       } 
      dependency 
     } 
     from(configurations.detachedConfiguration(deps as Dependency[]).resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL)) 
     into('sourceLibs') 
    } 

我們這裏使用一個lenientConfiguration是,我們不希望失敗,如果一個理由源神器無法解析。可能有一種更優雅的方式,但我沒有更深入地瞭解這一點。

希望它能幫助,

+0

看起來在腳本中有一個錯誤,'resolvedConfiguration'在'from(..)'語句中拼寫兩次。而且,這個代碼下載源只用於直接依賴,而不是用於傳遞的一個,請參閱我的答案。 – eskatos 2015-07-16 10:27:48

+0

@eskatos我已經刪除了重複的'resolvedConfiguration'。 – sschuberth 2016-08-15 14:05:11

4

劉若英答案下載直接依賴關係,並不是所有transitives依賴的來源罐子來源罐子。

這裏是一個任務,將這樣的伎倆:

task copySourceJars(type: Copy) { 
    def sources = configurations.runtime.resolvedConfiguration.resolvedArtifacts.collect { artifact -> 
    project.dependencies.create([ 
     group: artifact.moduleVersion.id.group, 
     name: artifact.moduleVersion.id.name, 
     version: artifact.moduleVersion.id.version, 
     classifier: 'sources' 
    ]) 
    } 
    from configurations.detachedConfiguration(sources as Dependency[]) 
    .resolvedConfiguration.lenientConfiguration.getFiles(Specs.SATISFIES_ALL) 
    into file('some-directory/') 
} 

我們可以再通過改變classifierjavadoc做的javadoc罐子非常相同。

相關問題