2011-10-10 7 views
38

Ho cercato su Gradle e mi sembra piuttosto interessante. Penso che essere in grado di scrivere i propri script in qualsiasi altro linguaggio rispetto all'XML sia piuttosto interessante, e non è chiaro per me se i file Maven POM poliglotta siano ancora un'opzione praticabile.Migrazione da Maven 2/3 a Gradle

Sto lavorando a un progetto che utilizza Maven 2.2.1 come strumento di creazione. Questo progetto:

  • è multi-modulo
  • usi (anche il nostro) plugins
  • si basa su un repository Artifactory delega

Ci sono delle esperienze là fuori su migrazioni da Maven a Gradle ? Gotchas, punti dolenti, casi angolari? Ogni tipo di esperienza è molto gradita.

risposta

34

La migrazione da Maven a Gradle non è facile come da Ant a Maven (almeno al momento). Puoi facilmente reuse Ant scripts e renderli cittadini di prima classe nella tua build Gradle. Esiste un'attività nello Gradle roadmap per deep import of Maven builds.

Finora ho eseguito la migrazione di due build Maven aziendali a Gradle. Entrambi erano progetti multi-modulo usando plugin Maven standard. Ho praticamente riscritto le build in modo gradle che richiede almeno una certa conoscenza di Gradle. In base alla mia esperienza, puoi facilmente ottenere la stessa build anche in Gradle. Gradle in realtà non ti inscatola qui ed è abbastanza flessibile. Lungo il percorso potresti trovarti a dover scrivere un plugin personalizzato che non esiste ancora, a seconda di quali plugin Maven stai usando. Tuttavia, c'è già uno wide breath of plugins là fuori. Finora non ho ancora incontrato un vero e proprio posto di blocco. Anche se la documentazione di Gradle è piuttosto buona, potresti trovarti a leggere molti post sul forum di Gradle per trovare la soluzione a uno dei tuoi problemi. Alcune delle funzioni standard di Maven non sono supportate immediatamente, ad es. uno scope provided o WAR inplace. Tuttavia, ci sono modi semplici per aggirarlo. Non ho usato repository Artifactory. Quelli che ho affrontato erano repository Nexus. Per quanto ne so i ragazzi Gradle hanno un buon supporto per Artifactory però. Modifica: JFrog fornisce uno Artifactory Gradle plugin.

Un buon modo per iniziare è utilizzare lo strumento di migrazione Maven2Gradle che consente di generare uno script Gradle dal build Maven. Personalmente, non l'ho ancora usato. Ho sviluppato il Gradle costruito fianco a fianco con la build Maven che non ha causato alcun problema. Maven ha emesso l'output sotto target, Gradle sotto build. Assicurati di preparare la tua squadra per il cambiamento. Lascia che provino la build di Gradle e familiarizzi con lo strumento.

Una volta completata la migrazione, sarete molto contenti della manutenibilità e dell'estensibilità della vostra build. È molto semplice aggiungere una logica di compilazione personalizzata e sarete grati di aver lasciato XML-land. In termini di prestazioni, non farai un passo indietro. La funzione di build incrementale fa il suo lavoro molto bene.

+2

Il Gradle Il plugin war ora (ad esempio in Gradle 1.0-milestone-6) supporta due configurazioni aggiuntive: compileProvided e runtimeProvided. –

+2

Sfortunatamente, questo non aiuta se il tuo progetto non applica il plugin WAR. Dovresti comunque definire la tua configurazione 'provided'. Questo è ancora discusso controveramente nella comunità di Gradle, ad es. guarda questo [biglietto JIRA] (http://issues.gradle.org/browse/GRADLE-784). –

11

Si consiglia inoltre di leggere this write-up della mia esperienza di porting di un progetto di maven a gradle.

+8

Puoi aggiungere un riepilogo qui, nel caso in cui il tuo sito web non funzioni? –

1

si può sempre cambiare la buildDir essere 'target' sotto Gradle se si desidera che l'output di generazione di andare sotto 'target' invece di 'build' come Maven:

buildDir = 'target' 
1

maven2Gradle sembra essere stata sostituita con l'essere in grado di eseguire gradle init dalla riga di comando (anche se è una funzionalità piuttosto sperimentale). Sembra funzionare bene per fare alcune impostazioni di base di Gradle da un progetto Maven.

8

Nella directory in cui si dispone di pom.xml basta eseguire il seguente comando:

Gradle init --type pom

Questo dovrebbe convertire il vostro pom.xml Maven per build.gradle