2013-03-18 18 views
27

Nel mio lavoro usiamo Maven. Ho intenzione di provare gradle per la prima volta. Usiamo un pom padre comune per tutto il progetto che ha l'impostazione per i plugin Maven comunemente utilizzati e alcune dipendenze di Comon. Esiste un'opzione simile disponibile in gradle?gradle genitore pom come caratteristica

La seconda domanda riguarda la gestione del rilascio. Usiamo il plugin di rilascio di Maven, che funziona abbastanza bene per noi. C'è qualcosa di simile disponibile in Gradle?

+0

Questo è quello che faccio: http://stackoverflow.com/a/21139778/859225 Spero che questo aiuti. – Zlatko

risposta

23

Per condividere elementi all'interno di più progetti della stessa build, utilizzare allprojects { ... }, subprojects { ... }, ecc. Inoltre, le proprietà aggiuntive (ext.foo = ...) dichiarate in un progetto padre sono visibili nei sottoprogetti. Un idioma comune è quello di avere qualcosa come ext.libs = [junit: "junit:junit:4.11", spring: "org.springframework:spring-core:3.1.0.RELEASE", ...] nello script di build di primo livello. I progetti secondari possono quindi includere in modo selettivo le dipendenze in base al loro nome breve. Dovresti essere in grado di trovare maggiori informazioni al riguardo nel Gradle Forums.

Per condividere la logica si basa tutto, è possibile scrivere un plugin copione (foo.gradle), metterlo su un server web, e comprendono in costruisce con apply from: "http://...", o scrivere un plugin binario (una classe che implementa org.gradle.api.Plugin), pubblicare è come un Jar per un repository e includerlo nelle build con apply plugin: ... e una sezione buildscript {}. Per i dettagli, vedere Gradle User Guide e i numerosi esempi nella distribuzione Gradle completa.

Una limitazione corrente di script (ma non binari) è che non vengono memorizzati nella cache. Pertanto, una compilazione avrà esito positivo solo se è in grado di connettersi al server Web che sta servendo il plug-in.

Per quanto riguarda la seconda domanda (che avrebbe dovuto essere una domanda separata), sono disponibili un paio di plug-in di rilascio di terze parti, ad esempio https://github.com/townsfolk/gradle-release.

+0

:-) Non so se c'è un altro modo. Ho pensato che sarebbe stato semplice scrivere qualcosa come "estendere my_parent_gradle_config_coordinates". Grazie per l'aiuto. – Murali

+0

> Per condividere cose all'interno di più progetti della stessa build ... ma 1) i genitori possono (si direbbe dovrebbe) essere usati anche per definire le caratteristiche di compilazione "a livello di organizzazione" e 2) Direi che è meglio organizzare le dipendenze utilizzando materiali compositi (test composito, composito-molla ecc.). –

+0

per riferimento futuro, gli script scaricati da 'apply from' [sono ora memorizzati nella cache] (https://github.com/gradle/gradle/pull/1900) –

0

al achive il vostro obiettivo si potrebbe applicare il concetto di 'costruire multiprogetto' spiegato nel manuale d'uso Gradel here

In pratica è possibile creare un progetto di ombrello che definiscono un insieme di configurazioni comuni creando un file gradle.build e un file gradle.settings. Il file build contiene le proprietà, le dipendenze e plugin comuni a tutti i progetti, il settings.gradle definisce ciò che sottoprogetti eredita quelle configurazioni.

Inoltre, per avere un'idea del dell'ecosistema plug Gradle si potrebbe verificare this fonte.

+1

Non sono davvero alla ricerca di build multi-progetto. Come accennato in precedenza, sto cercando una specie di eredità. per esempio. la maggior parte dei progetti di jboss/apache maven ereditano un pom comune. Quindi il comune pom può essere migliorato nel tempo e nuove versioni possono essere rilasciate. Alcune linee guida o regole possono essere messe lì. – Murali

8

Il plugin io.spring.dependency-management consente di utilizzare un Maven nato per controllare le dipendenze del costruire:

buildscript { 
    repositories { 
    mavenCentral() 
    } 
    dependencies { 
    classpath "io.spring.gradle:dependency-management-plugin:0.5.3.RELEASE" 
    } 
} 

apply plugin: "io.spring.dependency-management" 

Successivamente, è possibile utilizzarla per importare un bom Maven :

dependencyManagement { 
    imports { 
    mavenBom 'io.spring.platform:platform-bom:1.1.1.RELEASE' 
    } 
} 

Ora, è possibile importare le dipendenze senza specificare un numero di versione:

dependencies { 
    compile 'org.springframework:spring-core' 
} 
+0

Alternativa a 'io.spring.gradle: dependency-management-plugin' è https://github.com/nebula-plugins/nebula-dependency-recommender-plugin' com.netflix.nebula: nebula-dependency-recommender'. Anche 'org.springframework.boot: spring-boot-gradle-plugin'' a partire dalla versione 1.3 utilizza ' 'io.spring.gradle: dependency-management-plugin'' per la gestione delle dipendenze. – gavenkoa

1

È possibile convertire il contenuto padre pom per Gradle init presentare molto facilmente. Lo script init di gradle fornisce le stesse funzionalità di Maven super/parent pom. La differenza fondamentale è che si può chiamare init script di

tempo Run Come molti come di loro Questo ci dà la flessibilità per modificare l'init
script in fase di esecuzione, ma dubbi non esegue il monitoraggio delle modifiche.

È necessario prendere repository, gestione della distribuzione, profiling e altri controlli come findbugs, checkstyle ecc in script di init.

Il dettaglio è enorme, è possibile trovare informazioni complete qui da me. http://www.scmtechblog.net/2015/12/how-to-migrate-parent-pom-from-maven-to.html

ho spiegato su Plugin rilascio Gradle che è simile al plug-in di rilascio Maven.

Problemi correlati