Dlaczego Apache ma dwa oddzielne narzędzia do kompilacji i zarządzania zależnościami?

9

Apache ma dwa oddzielne narzędzia:

Oba wydają się wypełniać tę samą niszę. Mam dwa pytania:

  1. Jakie są pasemka z głównych różnic między tymi dwoma narzędziami?
    • Jestem pewien, że można by napisać naprawdę długi artykuł na temat różnic między nimi, nie szukam tak wielu szczegółów, ani też nie szukam subiektywnego argumentu za wyborem jednego z nich.
  2. Historia programowania - jak to się stało, że Apache ewoluował, tworząc dwa całkowicie oddzielne zestawy narzędzi, które są tak bardzo celowo podobne?
durron597
źródło

Odpowiedzi:

7

Jakie są pasemka z głównych różnic między tymi dwoma narzędziami?

  • Struktura projektu

    • Maven preferuje określoną strukturę projektu: należy zobowiązać się do robienia rzeczy The Maven Way. Maven ma wspólne kroki kompilacji skonfigurowane już w katalogu głównym, pom.xmlktóry jest zwykle dziedziczony przez wszystkie inne projekty pom.xml.

    • Ant + Ivy jest bardziej otwarty: chociaż może wiele zdziałać, istnieje tylko kilka podstawowych wymagań dotyczących struktury projektu lub użycia skryptu. Nie ma z góry określonych zadań kompilacji, celów ani procesów. Każda z nich build.xmljest czystym kontem (chyba że zawiera inny skrypt, oczywiście).

  • Orientacja

    • Maven jest zorientowane na cel . Nie mówisz „wykonaj ten cel kompilacji”, prosisz go o „budowanie” lub „wdrażanie”, a Maven robi wszystko, co trzeba, aby się tam dostać: mówisz, co chcesz zrobić.

    • Ant + Ivy jest zorientowany na zadania . Każde zadanie jest zdefiniowane w ramach wdrożenia i niestandardowe. Mówisz, jak robić, co chcesz.

  • Zarządzanie zależnościami

    • Maven jest najbardziej znany z automatycznej obsługi zależności. Pobierze prawidłowe wersje podczas budowania bez interakcji użytkownika, o ile adresy URL repozytorium zostaną odpowiednio skonfigurowane z wyprzedzeniem.

    • Ant nie ma zarządzania zależnościami z wyjątkiem „Java Classpath”. Ivy dodaje zarządzanie zależnościami, które jest nieco bardziej nużące niż Maven, ale wciąż zautomatyzowane. Kluczem tutaj jest to, że nie możesz wybrać zarządzania zależnościami (np. „Słoiki zawarte w mojej dystrybucji lub wpisane do kontroli źródła”) lub możesz zlecić to za pośrednictwem Ivy. Ten wybór oznacza większą elastyczność w celu zaspokojenia potrzeb projektu.

  • Łatwość użycia

    • Maven jest (teoretycznie) łatwy w użyciu. Każdy programista może wybrać projekt Maven i od razu wiedzieć, gdzie znajdują się wszystkie zasoby projektu i do czego służą: wynika to z pierwszego punktu, w którym Maven ma określony sposób robienia rzeczy.

    • Ant + Ivy może mieć bardziej stromą krzywą uczenia się, ponieważ każdy projekt może być inny. Różne projekty mogą mieć różne sposoby osiągnięcia tych samych celów.

  • Rozciągliwość

    • Maven umożliwia pisanie wtyczek i modyfikowanie procesu kompilacji. Jednak wychodzi z pudełka z korzeniem, pom.xmlktóre popycha programistów do wcześniej określonych procesów kompilacji. Nowe cele lub kroki kompilacji wymagają starannego przemyślenia i dodatkowego wysiłku, aby wprowadzić się w proces kompilacji.

    • Ant + Ivy pozwala także na pisanie wtyczek i nowych zadań: jest to dość łatwe i można zintegrować nowe zadanie przy minimalnym wysiłku. Nie ma z góry ustalonych celów ani zadań, które można by przetasować lub włączyć nowe zadanie.

Jak to się stało, że Apache ewoluował, tworząc dwa całkowicie oddzielne zestawy narzędzi, które są tak bardzo celowo podobne?

Pierwszą rzeczą do zrozumienia jest to, że projekt Apache to nic innego jak parasol, pod którym działają osobne, niezależne projekty. Różne zespoły pracują nad różnymi projektami. Chociaż poszczególni programiści mogą pracować nad wieloma projektami, nie ma żadnej ogólnej mapy drogowej obejmującej Ant, Ivy i Maven.

Mrówka była pierwsza. Został zaprojektowany jako ekwiwalent języka Java dla Make. Chociaż Make może budować projekty Java, jest żmudne: Make istnieje, aby osobno skompilować kilka jednostek kompilacji, a następnie połączyć je. Metoda Java polega na javackompilowaniu wszystkiego za jednym razem, a to, co nazywamy „łączeniem”, naprawdę występuje w trzewiach JVM w czasie wykonywania. Marka nie była odpowiednim narzędziem do tego zadania: Makefile dla Java to zasadniczo jeden lub dwa cele ( javac, jar).

Ant dodał trochę struktury na Make, ale nie zmienił zasadniczo procesu.

Po pewnym czasie społeczność zdała sobie sprawę, że wyszukiwanie plików jar nie było zabawne. Ponadto nie było standardowego sposobu komponowania projektów. Bez konsekwencji rozwój Java był bałaganem. Maven został zaprojektowany w celu rozwiązania tych problemów: przyniesie wspólną strukturę projektu i zautomatyzuje wyszukiwanie plików jar.

Jednak Ant był nadal bardzo przydatny. Niektóre projekty po prostu bardziej nadają się do doraźnego charakteru procesów Anta. Niektóre projekty nie kompilują kodu. Niektóre projekty były stare i mało prawdopodobne, aby ktokolwiek „uaktualnił” je do Maven.

Wraz z Ivy: dodaje Antowi zarządzanie zależnościami, dając projektom to, co najlepsze z obu światów. Możesz zachować swoje wcześniejsze skrypty lub wysoce spersonalizowane środowisko, ale zyskasz najważniejszą funkcję Mavena: zarządzanie zależnościami.


źródło