2011-01-27 12 views
12

Sto convertendo un progetto relativamente piccolo da Ant a Gradle. Mi aspetto di ridurre il numero di righe nello script di costruzione di circa il 75%!Come posso creare un ZIP della mia fonte usando Gradle?

Una cosa la build Ant non è quello di produrre una fonte ZIP (cioè uno ZIP di tutto il progetto, con alcune punte rimosse - ./build, varie cartelle Eclipse, ecc), mentre la migrazione a questo Gradle, ho deciso di utilizzare un approccio "inclusivo" piuttosto che un approccio "esclusivo" in modo che le cose non vengano incluse per caso in seguito.

Mi piacerebbe essere in grado di afferrare il codice sorgente e le risorse per tutti i set sorgente senza dover elencare le directory in modo esplicito, ma non riesco a farlo funzionare.

Ecco quello che ho finora (non ha nemmeno correre!):

task srcZip(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include { 
     sourceSets.collect { 
      it.allSource.asPath 
     } 
    } 
} 

Il file ZIP deve finire con 'src/main/java/...' cartelle 'src/main/resources/... ',' src/test/java/... ', ecc., e non avrei bisogno di rivedere questa attività quando aggiungo più set di sorgenti in seguito.

Grazie in anticipo!

risposta

19

Per ottenere tutte le fonti in 1 file zip è possibile utilizzare questo:

task srcZip(type: Zip) { 
    classifier = 'src' 
    from sourceSets*.allSource 
} 

Non si darà la struttura delle directory chiesto però. I file di tutti i set di origine sono inseriti nella stessa gerarchia.

per ottenere quello che avete chiesto è possibile utilizzare questo:

task srcZip2(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include 'src/**/*' 
} 

Naturalmente, non tiene conto di eventuali modifiche si potrebbe fare per posizioni di directory di origine.

+0

Hmm ... Sì, ma mi fa sentire un po '... sporco! Grazie per la risposta. Ti assegnerò il rappresentante se non avrò una risposta che si adatta meglio alle mie esigenze in pochi giorni. Grazie ancora. – dty

+0

So cosa intendi. Ho provato a convincere il primo modulo a creare la struttura delle directory che si desidera, ma non ci sono riuscito. –

6

Quindi, 21 mesi più tardi, ecco quello che ho fatto per arrivare a questo lavoro (con Gradle 1,2)

task srcZip(type: Zip) { 
    classifier = 'src' 
    from projectDir 
    include sourceSets*.allSource.srcDirs*.collect { relativePath(it) }.flatten() 
    include 'LICENCE', 'README', 'NOTICE', 'gradlew*' 
} 
assemble.dependsOn(srcZip) 

mio Groovy-fu non è forte, quindi sono sicuro che orribile po 'nel mezzo potrebbe essere semplificato, ma funziona per ora!

+0

che dovrebbero essere includono sourceSets * * .allSource.srcDirs .Raccogliere {relativePath (IT) + "/**/*.*"} .flatten() altrimenti sarà solo ottenere cartelle di origine, ma non il suo contenuto con Gradle 2.1. –

+0

Ciao, sto usando un progetto plugin gradle personalizzato per ottenere questo risultato ma questo codice (se usato direttamente) non funziona per me. Dà errore sul classificatore e se rimuovo, dà errore: Nessuna proprietà projectDir trovato. Qualche idea su come posso far funzionare il mio codice. – sver

4

Ecco un altro modo per creare il codice sorgente del codice sorgente. Possiamo includere/escludere i file secondo i requisiti. Funziona in caso di plug-in personalizzato che stavo usando e ho trascorso molto tempo a capire come farlo funzionare. Finalmente potrei realizzarlo usando il seguente codice:

Task taskSourceZip = project.task("makeSourceZip", type:Zip){ 
     baseName = "sourceZip" 
     from (project.rootDir){ 
      exclude ('*/*.iml') 
      exclude 'sourceZip.zip' 
     } 
     destinationDir project.rootDir 
    } 
Problemi correlati