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


9

Apache ha due strumenti separati:

Sembrano entrambi riempire la stessa nicchia. Ho due domande:

  1. Quali sono i punti salienti delle principali differenze tra i due strumenti?
    • Sono sicuro che un articolo davvero lungo potrebbe essere scritto sulle differenze tra i due, non sto cercando così tanti dettagli, né sto cercando un argomento soggettivo per scegliere l'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?

Risposte:


7

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

  • Struttura del progetto

    • Maven preferisce una struttura di progetto specifica: bisogna impegnarsi a fare le cose The Maven Way. Maven viene fornito con passaggi di build comuni già configurati in una radice pom.xmlche viene normalmente ereditata da tutti gli altri progetti pom.xml.

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

  • Orientamento

    • Maven è orientato agli obiettivi . Non dici "esegui questo obiettivo di costruzione", gli chiedi di "costruire" o "schierare" e Maven fa tutto il necessario per arrivarci: dici quello che vuoi fare.

    • Ant + Ivy è orientato alle attività . Ogni attività è definita dall'implementazione e personalizzata. Gli dici come fare quello che vuoi.

  • Gestione delle dipendenze

    • Maven è noto 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 una gestione delle dipendenze tranne "Java Classpath". Ivy aggiunge una gestione delle dipendenze un po 'più noiosa di Maven ma ancora automatizzata. La chiave qui è che non puoi scegliere la gestione delle dipendenze (ad es. "Barattoli inclusi nella mia distribuzione o registrati nel controllo del codice sorgente") oppure puoi esternalizzarlo tramite Ivy. Tale scelta implica una maggiore flessibilità per soddisfare le esigenze del progetto.

  • Facilità d'uso

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

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

  • Estensibilità

    • Maven consente di scrivere plugin e alterare il suo processo di compilazione. Tuttavia, viene fuori dalla scatola con una radice pom.xmlche spinge gli sviluppatori verso i suoi processi di compilazione predeterminati. Nuovi obiettivi o fasi di costruzione richiedono un'attenta riflessione e uno sforzo supplementare per iniettare nel processo di costruzione.

    • Ant + Ivy consente anche di scrivere plugin e nuove attività: farlo è abbastanza semplice e si può integrare una nuova attività con il minimo sforzo. Non ci sono obiettivi o traguardi predeterminati in cui spostarsi o integrare il proprio nuovo compito.

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 separati e indipendenti. Team diversi lavorano su progetti diversi. Mentre i singoli sviluppatori possono lavorare su più progetti, non esiste una tabella di marcia globale che includa Ant, Ivy e Maven.

La formica venne per prima. È stato progettato per essere un equivalente Java di Make. Mentre Make può costruire progetti Java, è noioso: Make è esistito per compilare un gruppo di unità di compilazione separatamente, quindi collegarle. Il modo Java è di javaccompilare tutto in una volta sola e ciò che chiamiamo "collegamento" si verifica realmente nelle viscere della JVM in fase di esecuzione. 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 comunità ha capito che cercare i file jar non era divertente. Inoltre, non esisteva un modo standard per comporre progetti. Senza coerenza, lo sviluppo di Java era un disastro. Maven è stato progettato per risolvere questi problemi: porterebbe una struttura di progetto comune e automatizzerebbe la ricerca dei file jar.

Tuttavia, Ant era ancora davvero utile. Alcuni progetti si prestano di più 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" a Maven.

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.