Javarevisited
W skrócie, chociaż Maven i ANT są narzędziami do budowania, główną różnicą jest to, że maven zapewnia również zarządzanie zależnościami, standardowy układ projektu i zarządzanie projektem. Jeśli chodzi o różnicę między Mavenem, ANT i Jenkinsem, później jest to narzędzie do ciągłej integracji, które jest czymś więcej niż tylko narzędziem do budowania. Możesz skonfigurować swoje środowisko CI za pomocą Jenkinsa lub Hudsona i automatycznie budować, testować i wdrażać swój projekt Java. Teraz ostatnia, główna różnica między Jenkinsem i Hudsonem, oba pochodzą z tego samego kodu źródłowego, ale jeden jest zamkniętym źródłem, podczas gdy drugi jest open source. Możesz przeczytać szczegóły w tym artykule.
Teraz zacznijmy długą historię, jaka jest różnica między Maven i ANT lub różnica między Maven i Jenkins, lub Maven vs Hudson są niektóre z często omawianych pytań wśród Java, gdy deweloperzy. Cóż wszystkie cztery np. ANT, Maven, Jenkins, i Hudson są narzędzia, aby pomóc programistom Java na budowę, testowanie jednostek, ciągłej integracji (CI), i zarządzania projektem.
W tym artykule Java, będziemy badać każdy z Maven, ANT, Jenkins, i Hudson, aby uzyskać podstawowe pojęcie o tym, co to jest, jakie korzyści oferują, i jak są one wykorzystywane w projektach Java JEE. Aby dać Ci podstawowe pojęcie, ANT jest dobrze znanym narzędziem do budowania, prawdopodobnie najstarszym spośród wszystkich. Narzędzie do budowania jest używane do tworzenia produktów takich jak plik JAR lub WAR ze źródła Java i zasobów do wdrożenia.
Maven pojawił się po ANT i oferuje znacznie więcej niż narzędzie do budowania. Główną różnicą między ANT i Maven jest to, że w ANT trzeba zdefiniować wszystko, tj. katalog źródłowy, katalog budowania, katalog docelowy, itp., podczas gdy Maven przyjmuje zasadę konwencji nad konfiguracją.
To oznacza, że Maven ma predefiniowaną strukturę projektu, tj. standardowy katalog dla plików źródłowych, plików testowych i zasobów. Z drugiej strony Jenkins i Hudson są narzędziami Continues Integration, które dają ci możliwość zautomatyzowania procesu budowania i wdrażania.
Używając Jenkinsa lub Hudsona możesz uruchomić proces budowania za każdym razem, gdy deweloper popełni kod, aby sprawdzić, czy projekt kompiluje się dobrze, aby uruchomić testy jednostkowe, aby utworzyć kompilację, a nawet wdrożyć w środowisku QA lub produkcyjnym.
Podobnie, możesz mieć dzienny proces budowania, nocny proces budowania lub tygodniowy proces budowania ustanowiony w Jenkinsie lub Hudsonie. W następnej sekcji, będziemy rozumieć Maven, ANT, Jenkins i Hudson w sposób bardziej szczegółowy i zrozumieć różnicę między nimi.
Btw, jeśli dopiero zaczynasz z Maven, sugeruję, aby najpierw przejść przez kompleksowy kurs Maven jak Apache Maven: Beginner to Guru, aby nauczyć się pewnych podstaw. To nie tylko pomoże ci zbudować i wdrożyć twoje projekty Java i Spring Boot za pomocą Mavena, ale także nauczyć się samego Mavena w głębi.
Maven vs ANT
Odkąd Maven został wydany, wielu programistów Java porównuje Maven i ANT, co jest całkiem naturalne. Nawet ja potrzebowałem trochę czasu, aby zaadoptować Mavena, ponieważ byłem bardzo przyzwyczajony do procesu budowania ANT. W końcu zdałem sobie sprawę, że Maven oferuje więcej wygody jako narzędzie do budowania niż ANT, a także wymusza wspólny sposób budowania aplikacji Java wśród wielu projektów, deweloperów i organizacji.
Przed przejściem na Mavena pracowałem z bardzo złożonymi skryptami ANT, w rzeczywistości każdy projekt, w którym pracuję, ma inną strukturę budowania niż inne.
Aby dokonać wydania, musisz poświęcić sporo czasu na zrozumienie całego procesu budowania, np. skąd pochodzą biblioteki, czy są one dostarczane jako JAR, czy projekt buduje je w czasie budowania, itp. Maven rozwiązuje wiele z tych problemów wprowadzając standardową konwencję i lepsze zarządzanie zależnościami.
Jeśli musimy porównać Mavena i ANT, poniżej znajduje się moja lista różnic między Mavenem a ANT :
1) Jedną z głównych różnic między Mavenem a ANT jest to, że Maven wymaga mniejszej konfiguracji niż ANT, ponieważ działa na zasadzie konwencji nad konfiguracją i zakłada rozsądne domyślne np.np. plik źródłowy java w ${basedir}/src/main/java, zasoby w ${basedir}/src/main/resources, przypadki testowe JUnit w ${basedir}/src/test/java, etc.
Tworzy również pliki klas Java w ${basedir}/target/classes i plik JAR w ${basedir}/target directory. Z drugiej strony ANT wymaga wszystkich tych katalogów dostarczonych jako konfiguracja, zazwyczaj w pliku budowania ANT np. build.xml.
2) Kolejną istotną różnicą pomiędzy Mavenem a ANT jest zarządzanie zależnościami. Maven wprowadził pojęcie repozytorium, które jest centralnym miejscem do przechowywania wszystkich bibliotek, JAR-ów itp. Maven pozwala na korzystanie z centralnego repozytorium maven, jak również z lokalnego repozytorium i automatycznie pobiera zależności podczas procesu budowania.
While ANT oparte projekty zazwyczaj używają ${lib} jako katalogu do przechowywania zależności. Zmiana i aktualizacja zależności jest znacznie łatwiejsza w maven niż ANT, ponieważ nie trzeba ręcznie pobierać zależności. Posiadanie centralnego repozytorium w całej organizacji pomaga również usunąć nadmiarowość w różnych projektach.
3) Trzecią i najważniejszą różnicą między Mavenem a ANT jest to, że Maven oferuje spójny i wspólny interfejs do budowania projektów Java. Wszystko, co musisz zrobić, to pobrać projekt i uruchomić mvn install, aby go zbudować. Również znając konwencje Mavena i patrząc na pom.xml, można łatwo zrozumieć, gdzie znajdują się pliki źródłowe i jakie są zależności projektu.
4) Kolejną techniczną różnicą pomiędzy ANT i Mavenem jest to, że zadanie ANT nie ma żadnego cyklu życia, musisz zdefiniować cele i ich zależności. Podczas gdy Maven ma cykl życia, który jest wywoływany, gdy uruchamiasz komendy takie jak mvn install. Maven wykonuje serię kroków w wyniku tego polecenia, aby wyprodukować artefakty, np. plik JAR, który jest końcem cyklu życia.
5) Maven wymusza również standardową konwencję nazewnictwa dla artefaktów zdefiniowanych przy użyciu groupId, artifactId i wersji. Ponadto, jeszcze jedna różnica między ANT i Mavenem jest taka, że Maven jest czymś więcej niż tylko narzędziem do budowania, działa jako narzędzie do zarządzania projektem i może generować raporty, itp, chociaż jeszcze nie korzystałem z tej funkcji.
Maven vs Jenkins i Hudson
Jenkins i Hudson są narzędziami ciągłej integracji, powszechnie znanymi jako frameworki CI. Pozwalają one projektom Java na automatyzację procesu budowania i wdrażania. Używając narzędzi CI takich jak Hudson czy Jenkins możesz tworzyć godzinne lub codzienne kompilacje automatycznie, możesz także automatycznie uruchamiać testy jednostkowe i wdrażać kompilacje do środowiska QA lub produkcyjnego.
To pomaga, jeśli pracujesz w dużym projekcie i zespół programistów jest rozproszony w wielu lokalizacjach. Narzędzia CI mogą wyzwalać budowanie za każdym razem, gdy deweloper popełnia kod i sprawdzać, czy projekt się kompiluje, czy nie.
Na marginesie, Jenkins i Hudson pochodzą z tego samego drzewa źródłowego. Hudson był oryginalnym projektem, który był open source i wspierany przez Sun.
Kiedy Oracle kupił Sun, przejął kontrolę nad nazwą Hudson i platformą logistyczną Hudson. Wielu współtwórców open source nie czuło się komfortowo z tym, co skutkuje Jenkinsem, który jest dość mocno napędzany przez społeczność.
Jeśli musimy porównać Mavena i Jenkinsa lub Hudsona, poniższa lista byłaby moją listą różnic między Mavenem a Hudsonem lub Jenkinsem :
1) Główną różnicą między Mavenem a Jenkinsem lub Hudsonem jest to, że Maven jest narzędziem do budowania, które wie, jak zbudować projekt, a Jenkins lub Hudson zapewnia wyzwalacz do budowania. Możesz kontrolować, kiedy wyzwalać budowanie automatycznie za pomocą Jenkinsa lub Hudsona lub dowolnego narzędzia CI.
2) Jenkins może używać Mavena jako narzędzia do budowania. Ponadto Jenkins lub Hudson mogą zrobić o wiele więcej niż tylko budować aplikacje, mogą uruchomić wszystkie testy jednostkowe, wdrożyć produkty na skonfigurowane serwery itp. Zasadniczo różnica polega na tym, że Maven jest narzędziem do budowania, podczas gdy Jenkins lub Hudson jest narzędziem Continues Integration.
To wszystko na temat różnicy między Mavenem a ANT, Jenkinsem lub Hudsonem itp. Maven jest dość standardem budowania projektów Java w dzisiejszych czasach i możesz go dostosować, aby pasował do twojego środowiska ANT opartego na dziedzictwie. Niektóre organizacje mają również narzędzia CI takie jak Jenkins, które mogą być używane razem z Mavenem do zautomatyzowania procesu budowania, testowania i wdrażania.
Dalsza nauka
Maven Fundamentals by Bryan Hansen
Maven Crash Course
Java Maven :101 Stop Building Java Programs the Hard Way!