2013-04-22 6 views
5

Abbiamo una vecchia versione di playframework 1.2.x in cui copiamo tutti i vasi in project/lib in modo che i playframework possano consumarli. Ci piacerebbe anche copiare tutti i vasi sorgente in modo che quando esegui eclissare, possiamo vedere tutte le fonti di terze parti. C'è un modo per farlo con gradle?come copiare tutti i vasi sorgente usando gradle

e intendo tutti i jar di origine che sono stati scaricati quando ho eseguito gradle eclipse mentre li vedevo scaricare i percorsi della cache. Abbiamo gradle eclipse chiamando play eclipsify per noi anche nell'un progetto, quindi possiamo usare 100% solo gradle.

grazie, Dean

risposta

5

questo non è che semplice come previsto. I seguenti copie frammento i vasetti di origine per tutte le dipendenze (+ runtime compilazione) di un progetto Java in una cartella specifica:

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') 
    } 

La ragione per cui usiamo un lenientConfiguration qui è, che noi non vogliamo fallire se un l'artefatto sorgente non può essere risolto. Potrebbe esserci un modo più elegante, ma non ho cercato di approfondirlo.

Speranza che aiuta,

René

+0

Sembra che ci sia un errore nello script, 'resolvedConfiguration' è scritto due volte nell'istruzione' from (..) '. Inoltre, questo codice scarica le fonti per le dipendenze dirette, non per quelle di transito, vedi la mia risposta. – eskatos

+0

@eskatos Ho rimosso il 'resolvedConfiguration' duplicato. – sschuberth

4

Rene risposta sarà scaricare i sorgenti vasetti di dipendenze dirette, non fonti vasetti di tutti transitivi dipendenze.

Qui è un compito che farà il trucco:

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/') 
} 

Si può poi fare lo stesso per javadocs vasi cambiando il classifier-javadoc.

Problemi correlati