Perché Apache ha due strumenti separati per la gestione delle build e delle dipendenze?

9

Apache ha due strumenti separati:

Sembrano entrambi riempire la stessa nicchia. Ho due domande:

  1. Quali sono gli punti salienti delle principali differenze tra i due strumenti?
    • Sono sicuro che un lungo articolo potrebbe essere scritto sulle differenze tra i due, non sto cercando molti dettagli, né sto cercando un argomento soggettivo per sceglierne uno rispetto all'altro.
  2. Storia della programmazione - come è potuto accadere che Apache si sia evoluto per creare due set di strumenti completamente separati che alla fine sono così simili nello scopo?
posta durron597 07.07.2015 - 19:04
fonte

1 risposta

7

Quali sono gli punti salienti delle principali differenze tra i due strumenti?

  • Struttura del progetto

    • Maven preferisce una struttura di progetto specifica: uno deve impegnarsi a fare cose The Maven Way. Maven viene fornito con passi di build comuni già configurati in una radice pom.xml che è normalmente ereditata da tutti gli altri progetti pom.xml s.

    • Ant + Ivy è più aperto: mentre può fare molto, ci sono solo alcuni requisiti di base in termini di struttura del progetto o utilizzo dello script. Non ci sono compiti, obiettivi o processi di costruzione predeterminati. Ogni build.xml è una lavagna pulita (a meno che non includa un altro script, ovviamente).

  • Orientamento

    • Maven è orientato verso obiettivo . Non dici "esegui questo build target" chiedilo a "build" o "deploy" e Maven fa tutto ciò che è necessario per arrivarci: dici cosa vuoi fare.

    • Ant + Ivy è orientato compito . Ogni attività è definita dall'implementazione e personalizzata. Digli come fare ciò che vuoi.

  • Gestione delle dipendenze

    • Maven è meglio conosciuto per la gestione automatica delle dipendenze. Scaricherà le versioni corrette durante la creazione senza alcuna interazione da parte dell'utente, purché gli URL del repository siano correttamente configurati in anticipo.

    • Ant non ha alcuna gestione delle dipendenze ad eccezione di "Classpath Java". Ivy aggiunge una gestione delle dipendenze che è un po 'più noiosa di Maven, ma comunque automatizzata. La chiave qui è che puoi scegliere nessuna gestione delle dipendenze (ad esempio "vasi inclusi nella mia distribuzione o registrati nel controllo del codice sorgente") oppure puoi esternalizzarla tramite Ivy. Questa scelta significa maggiore flessibilità per soddisfare le esigenze del progetto.

  • Facilità d'uso

    • Maven è (in teoria) facile da usare. Qualunque sviluppatore può prendere in mano un progetto Maven e sapere immediatamente dove si trovano tutte le risorse del progetto e a che cosa servono: questo è dovuto al primo punto su Maven che ha un modo specifico di fare le cose.

    • Ant + Ivy può avere una curva di apprendimento più ripida perché ogni progetto può essere diverso. Diversi progetti possono avere diversi modi per raggiungere gli stessi obiettivi.

  • estensibilità

    • Maven consente di scrivere plug-in e di alterare il processo di compilazione. Tuttavia, esce dalla scatola con una radice pom.xml che spinge gli sviluppatori verso i suoi processi di generazione predeterminati. I nuovi obiettivi o le fasi di costruzione richiedono un'attenta riflessione e uno sforzo supplementare per l'inserimento nel processo di creazione.

    • Ant + Ivy permette anche di scrivere plugin e nuovi compiti: farlo è abbastanza facile e si può integrare un nuovo compito con il minimo sforzo. Non ci sono obiettivi o obiettivi predeterminati da mescolare o integrare il nuovo compito in.

Come è potuto accadere che Apache si sia evoluto per creare due set di strumenti completamente separati che alla fine sono così simili nello scopo?

La prima cosa da capire è che il progetto Apache non è altro che un ombrello sotto il quale operano progetti indipendenti separati. Diverse squadre lavorano su diversi progetti. Mentre i singoli sviluppatori possono lavorare su più progetti, non esiste una tabella di marcia generale che includa Ant, Ivy e Maven.

Ant è arrivato prima. È stato progettato per essere un equivalente Java di Make. Mentre Make può creare progetti Java, è noioso: Make esistito per compilare un gruppo di unità di compilazione separatamente, quindi collegarle. Il modo Java è javac compila tutto in un colpo solo, e ciò che chiamiamo "linking" si verifica realmente nei meandri della JVM in fase di runtime. Make non era lo strumento giusto per il lavoro: un Makefile per Java è fondamentalmente uno o due target ( javac , jar ).

Ant ha aggiunto un po 'di struttura in cima a Make, ma non ha sostanzialmente modificato il processo.

Dopo un po 'la community si rese conto che cercare file jar non era divertente. Inoltre, non c'era un modo standard per comporre i progetti. Senza coerenza, lo sviluppo di Java era un casino. Maven è stato progettato per risolvere questi problemi: porterebbe una struttura di progetto comune e automatizzerebbe la ricerca dei file jar.

Tuttavia, Ant era ancora molto utile. Alcuni progetti si prestano maggiormente alla natura ad hoc dei processi di Ant. Alcuni progetti non stanno compilando il codice. Alcuni progetti erano vecchi ed era improbabile che qualcuno li "aggiornasse" su Maven.

Arriva Ivy: aggiunge la gestione delle dipendenze a Ant, dando ai progetti il meglio dei due mondi. Puoi mantenere i tuoi script legacy o l'ambiente altamente personalizzato, ma ottenere la funzione più importante di Maven: gestione delle dipendenze.

    
risposta data 10.07.2015 - 22:58
fonte

Leggi altre domande sui tag