Domanda

Che cosa significa un altro strumento di costruzione destinati a Java davvero farmi?

Se si utilizza Gradle rispetto ad un altro strumento, perché?

È stato utile?

Soluzione

Non faccio uso di Gradle nella rabbia me stesso (solo un progetto giocattolo finora) [ autore significa che hanno utilizzato Gradle solo su un progetto giocattolo finora, non che Gradle è un progetto giocattolo - vedi commenti] , ma direi che le ragioni si potrebbe considerare l'utilizzo che sarebbe stato a causa delle frustrazioni di Ant e Maven.

Nella mia esperienza Ant è spesso sola scrittura (sì lo so che è possibile scrivere splendidamente modulari, eleganti costruire s, ma il fatto è che molte persone non lo fanno). Per i progetti non banali diventa mind-bending, e si prende cura di assicurare che costruisce complesso sono veramente portatile. Il suo carattere imperativo può portare alla replica di configurazione tra costruisce (anche se le macro possono aiutare qui).

Maven segue un approccio opposto e si aspetta di integrare completamente con il ciclo di vita Maven. utenti Ant esperti trovano questa particolare stridente come Maven eliminando gran parte delle libertà che avete in Ant. Per esempio c'è un Sonatype blog che enumera molte delle critiche Maven e le loro risposte.

Il meccanismo di plug-Maven permette configurazioni di build molto potenti, e il modello di ereditarietà significa che si può definire un piccolo insieme di POM genitore che incapsulano le configurazioni di build per l'intera impresa e singoli progetti possono ereditare quelle configurazioni, lasciandoli leggeri. Configurazione Maven è molto verboso (anche se Maven 3 promette di affrontare questo), e se si vuole fare tutto ciò che è "non è il modo Maven" si deve scrivere un plugin o utilizzare il hacky integrazione Ant. Nota Mi capita di come scrivere plugin Maven, ma apprezzo che molti opporsi alla sforzo richiesto.

Gradle promette di colpire il punto debole tra Ant e Maven. Esso utilizza approccio Ivy 's per la risoluzione delle dipendenze. Permette di convenzione sulla configurazione, ma include anche attività Ant come cittadini di prima classe. E 'anche saggiamente consente di utilizzare i repository Maven / Ivy esistenti.

Quindi, se hai colpito e rimasti bloccati con uno qualsiasi dei punti di dolore Ant / Maven, è probabilmente la pena di provare Gradle fuori, anche se a mio avviso resta da vedere se non sarebbe solo essere negoziazione problemi noti per quelli sconosciuti. La prova del budino è nel mangiarlo se quindi vorrei sospendere il giudizio fino a che il prodotto è un po 'più maturo e altri hanno risolti eventuali nodi (lo chiamano bleeding edge per un motivo). Sarò ancora lo uso nei miei progetti giocattolo però, è sempre bene essere consapevoli delle opzioni.

Altri suggerimenti

Gradle può essere utilizzato per vari scopi - è una migliore coltellino svizzero di Ant -. Ma è specificamente focalizzata su multi-progetto si basa

Prima di tutto, Gradle è uno strumento di programmazione di dipendenza che significa anche che è uno strumento di programmazione. Con Gradle è possibile eseguire qualsiasi compito casuale nella vostra configurazione e Gradle farà in modo tutte le dependecies dichiarati siano correttamente e tempestivamente eseguiti. Il tuo codice può essere distribuita su molte directory in qualsiasi tipo di aspetto (albero, piatta, sparsi, ...).

Gradle presenta due fasi distinte: la valutazione e l'esecuzione. In sostanza, durante la valutazione Gradle cercherà e valutare gli script nelle directory che si suppone a guardare. Durante l'esecuzione Gradle esegue i compiti che sono stati caricati durante la valutazione, tenendo conto delle attività inter-dipendenze.

In cima a questi programmazione dipendenza dispone Gradle aggiunge progetto e di dipendenza JAR caratteristiche da intergration con Apache Ivy. Come sapete Ivy è uno strumento di gestione molto più potente e molto meno supponente dipendenza che dire Maven.

Gradle rileva le dipendenze tra i progetti e tra i progetti e vasetti. Gradle lavora con i repository Maven (download e upload) come l'ibiblio uno o il proprio repository, ma supporta anche e altri tipi di infrastrutture repository si potrebbe avere.

In multi-progetto si basa Gradle è sia flessibile e si adatta alla struttura e l'architettura della costruzione. Non è necessario per adattare la struttura o l'architettura al tuo strumento di compilazione come sarebbe necessario con Maven.

Gradle prova molto difficile non ottenere nel vostro senso, un Maven sforzo quasi mai fa. Convenzione è buono eppure così è la flessibilità. Gradle ti dà molte più funzioni di Maven fa, ma soprattutto in molti casi Gradle vi offrirà un percorso di transizione indolore da Maven.

Questo può essere un po 'controverso, ma Gradle non nascondere il fatto che si tratta di un linguaggio di programmazione a tutti gli effetti.

Ant + ant-contrib è essenzialmente un linguaggio di programmazione completo Turing che nessuno vuole davvero programmare in.

Maven cerca di prendere l'approccio opposto di cercare di essere completamente dichiarativa e ti costringe a scrivere e compilare un plugin se avete bisogno di logica. Essa impone anche un modello di progetto che è completamente inflessibile. Gradle combina il meglio di tutti questi strumenti:

  • Ne consegue convenzione-over-configurazione (ala Maven), ma solo nella misura lo vuoi
  • E 'consente di scrivere attività personalizzate flessibili come in Ant
  • Si fornisce sostegno a progetti multi-modulo che è superiore sia Ant e Maven
  • E 'un modem DSL che rende le cose facili 80% e le cose 20% possibile (a differenza di altri strumenti di generazione che rendono il 80% facili, il 10% e il 10% possibile effettivamente impossibile).

Gradle è lo strumento di build più configurabile e flessibile devo ancora utilizzare. Si richiede un certo investimento in anticipo per imparare la DSL e concetti come le configurazioni, ma se avete bisogno di un no-nonsense e strumento di JVM costruzione completamente configurabile è difficile da battere.

Gradle ben combina Ant e Maven, prendendo il meglio da entrambi i quadri. Flessibilità da Ant e convenzione sulla configurazione, gestione delle dipendenze e plugin da Maven.

Quindi, se si vuole avere una build Java Standard, come in Maven, ma compito di prova ha a che fare qualche passaggio personalizzato che potrebbe apparire come di seguito.

build.gradle:

apply plugin:'java'
task test{
  doFirst{
    ant.copy(toDir:'build/test-classes'){fileset dir:'src/test/extra-resources'}
  }
  doLast{
    ...
  }
}

In cima a quello che utilizza la sintassi Groovy che dà molto più potere di espressione allora xml formica / di Maven.

Si tratta di un superset di Ant - è possibile utilizzare tutte le attività Ant in Gradle con più bello, la sintassi Groovy simile, vale a dire

.
ant.copy(file:'a.txt', toDir:"xyz")

o

ant.with{
  delete "x.txt"
  mkdir "abc"
  copy file:"a.txt", toDir: "abc"
}

Usiamo Gradle e scelto, oltre Maven e Ant. Formica ci ha dato una flessibilità totale, e Ivy dà una migliore gestione delle dipendenze di Maven, ma non c'è grande supporto per il multi-progetto si basa. Si finisce per fare un sacco di codifica per il supporto multi-progetto si basa. Anche avere un po 'di accumulo di by-convenzione è bello e fa costruire script più concisa. Con Maven, ci vogliono costruire per convenzione troppo lontano, e la personalizzazione del processo di generazione diventa un hack. Inoltre, Maven promuove ogni progetto la pubblicazione di un artefatto. A volte è necessario un progetto suddiviso in sottoprogetti, ma si desidera che tutti i sottoprogetti da costruire e controllo di versione insieme. Non proprio qualcosa di Maven è stato progettato per.

Con Gradle si può avere la flessibilità di Ant e costruire per convenzione di Maven. Ad esempio, è banale per estendere il ciclo di vita di costruzione convenzionale con il proprio compito. E non si è costretti ad utilizzare una convenzione se non si vuole. Groovy è molto più bello di codice rispetto XML. In Gradle, è possibile definire le dipendenze tra i progetti sul file system locale senza la necessità di pubblicare gli artefatti per ciascuna a un repository. Infine, Gradle utilizza Ivy, quindi ha un'ottima gestione delle dipendenze. L'unico vero problema per me finora è la mancanza di integrazione maturo Eclipse, ma le opzioni per Maven non sono davvero molto meglio.

Non è il mio risposta, ma risuona sicuramente con me. E 'da ThoughtWorks' tecnologia radar da ottobre 2012 :

  

Due cose hanno causato la fatica con strumenti di generazione basati su XML come Ant e   Maven: troppe parentesi a punta di rabbia e la grossolanità dei plug-in   architetture. Mentre i problemi di sintassi possono essere affrontati attraverso   generazione, architetture plug-in limitano fortemente la capacità di accumulo   strumenti per crescere con grazia i progetti diventano più complessi. Noi siamo venuti   a sentire che i plug-in sono il livello di astrazione sbagliato, e preferiscono   strumenti come Gradle basato sul linguaggio e rastrello, invece, perché offrono   astrazioni grana fine e una maggiore flessibilità a lungo termine.

Gradle mettere il divertimento nella costruzione / assemblaggio software. Ho usato formica per costruire il software tutta la mia carriera e ho sempre considerato la parte reale "BuildIt" dell'opera dev essere un male necessario. Alcuni mesi fa la nostra azienda è cresciuta stanchi di non utilizzare un repo binario (aka il check-in vasetti nelle VCS) e mi è stato dato il compito di indagare su questo. Iniziato con l'edera dal momento che potrebbe essere avvitato sulla parte superiore della formica, non ha avuto molta fortuna ottenere i miei artefatti costruiti pubblicati come avrei voluto. Sono andato per Maven e fatto via con xml, lavorato splendido per alcune semplici librerie di supporto, ma mi sono imbattuto in problemi seri cercando di raggruppare le applicazioni pronte per deploy. Assillare un bel po 'googling plugin e la lettura di forum e liquidazione il download di bilioni di vasi di supporto per i vari plugin che ho avuto un momento difficile con. Infine sono andato per Gradle (diventando piuttosto amaro, a questo punto, e infastidito dal fatto che "Non dovrebbe essere così difficile!")

Ma dal primo giorno il mio umore ha cominciato a migliorare. Mi è stato sempre da qualche parte. Mi ha portato come due ore di migrare il mio primo modulo formica e il file di configurazione è stata praticamente nulla. Facilmente montato uno schermo. Il grande "wow" è stato: la costruzione di script in XML, quanto stupido è quello? il fatto che dichiarando una dipendenza prende una riga è molto attraente per me -> si può facilmente vedere tutte le dipendenze per un certo progetti su una pagina. Da allora in poi sono stato su una costante rullo, per ogni problema che ho affrontato finora non v'è una soluzione semplice ed elegante. Credo che questi sono i motivi:

  • Groovy è molto intuitivo per gli sviluppatori Java
  • la documentazione è grande di impressionante
  • la flessibilità è infinita

Ora io passo le mie giornate cercando di pensare a nuove funzionalità da aggiungere al nostro processo di generazione. Come malato è quello?

E 'anche molto più facile da gestire nativo costruisce. Ant e Maven sono effettivamente Java-only. Esistono alcuni plugin per Maven che cercano di gestire alcuni progetti nativi, ma non fanno un lavoro efficace. attività Ant possono essere scritti che compilano i progetti nativi, ma sono troppo complesso e scomodo.

Facciamo Java con JNI e un sacco di altri bit nativi. Gradle semplificato nostro disordine Ant considerevolmente. Quando abbiamo iniziato a introdurre la gestione delle dipendenze ai progetti nativi era disordinato. Abbiamo ottenuto Maven per farlo, ma il codice Gradle equivalente era una piccola frazione di ciò che era necessario a Maven, e la gente poteva leggerlo e capirlo senza diventare guru Maven.

Sono d'accordo in parte con Ed Staub. Gradle sicuramente è più potente rispetto a Maven e offre maggiore flessibilità a lungo termine.

Dopo aver eseguito una valutazione di passare da Maven per Gradle, abbiamo deciso di attenersi a Maven se stesso per due problemi abbiamo incontrato con Gradle (la velocità è più lenta di Maven, proxy non funzionava).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top