Czym zajmuje się Maven w teorii i praktyce? Kiedy warto z niego korzystać? [Zamknięte]

156

Mam zamiar rozpocząć projekt Java tylko w celach praktycznych. Czytałem o Mavenie, ale tak naprawdę nie rozumiem, kiedy ma być używany.

Czy możesz dać mi kilka praktycznych wskazówek? Czy Maven bardzo pomaga? Co tak naprawdę robi Maven dla mojego projektu?

Piotr Krysiak
źródło
Hej, spójrz na moje pytanie o Maven, Spring i Roo. Często używałem Mavena podczas pracy z Eclipse oraz w celu przyspieszenia czasu tworzenia. Ale są pewne problemy. Myślę, że musisz zrozumieć system adnotacji Java razem z Mavenem. Ale spójrz na pytanie, które połączyłem ...
mm24
@ArtB dobrze wyjaśnia, czym jest Maven. Jednak, jak mówię w komentarzu do jego odpowiedzi, nie sądzę, abyś z niej korzystał. Jeśli potrzebujesz narzędzia do budowania, użyj Gradle. Pobierz go, zainstaluj, a następnie w swoim projekcie utwórz plik o nazwie, build.gradlektóry zawiera tylko jedną linijkę mówiącą apply plugin: 'java'. Zakładając, że kod źródłowy znajduje się w zwykłym miejscu ( src/main/javatesty jednostkowe w src/test/java), możesz teraz budować, testować i pakować kod, mówiąc gradle build. Łatwo!
Tom Anderson
2
Aby korzystać Gradle musisz nauczyć Groovy i na pewno będzie natknąć projektu za pomocą Maven więc nadal warto uczenia się. Ponadto zrozumienie Mavena ułatwi zrozumienie innych narzędzi, które pojawiły się po nim.
Sanki
Co w ogóle ma Maven wspólnego z adnotacjami Java?
Sanki
1
+1 dla Gradle, nie tylko jest bliżej domu dla programistów java, ale może ponownie wykorzystywać artefakty
Mavena

Odpowiedzi:

183

Co to robi

Maven to „narzędzie do zarządzania kompilacją”, służy do definiowania sposobu .javakompilowania plików .class, pakowania do .jar( .warlub .ear) plików, przetwarzania (przed / po) przetwarzania za pomocą narzędzi, zarządzania Twoimi CLASSPATHi wszystkimi innymi rodzajami zadań, które są wymagane do zbuduj swój projekt. Jest ona podobna do Apache Ant i Gradle lub Makefile w C / C ++, ale stara się być całkowicie samowystarczalny w tym, że nie ma potrzeby żadnych dodatkowych narzędzi lub skryptów poprzez włączenie innych typowych zadań, takich jak pobieranie i instalowanie potrzeby biblioteki itd.

Jest również zaprojektowany w oparciu o motyw „przenośność kompilacji”, dzięki czemu nie występują problemy związane z tym, że ten sam kod z tym samym skryptem kompilacji działa na jednym komputerze, ale nie na innym (jest to znany problem, mamy maszyny wirtualne z systemem Windows 98 maszyn, ponieważ nie mogliśmy skompilować niektórych naszych aplikacji Delphi nigdzie indziej). Z tego powodu jest to również najlepszy sposób pracy nad projektem między ludźmi, którzy używają różnych IDE, ponieważ skrypty Ant generowane przez IDE są trudne do zaimportowania do innych IDE, ale obecnie wszystkie IDE rozumieją i obsługują Maven ( IntelliJ , Eclipse i NetBeans ). Nawet jeśli nie polubisz Mavena, w końcu jest on punktem odniesienia dla wszystkich innych nowoczesnych narzędzi do budowania.

Dlaczego powinieneś tego używać

W Mavenie są trzy bardzo miłe rzeczy .

  1. Maven (po zadeklarowaniu, z których korzystasz) automatycznie pobierze wszystkie używane biblioteki i biblioteki, których używają. Jest to bardzo przyjemne i sprawia, że ​​obsługa wielu bibliotek jest śmiesznie łatwa. Pozwala to uniknąć „piekła uzależnień” . Jest podobny do Ivy Apache Ant .

  2. Używa " Konwencji zamiast konfiguracji ", więc domyślnie nie musisz definiować zadań, które chcesz wykonać. Nie musisz pisać kroku „kompilacja”, „test”, „pakiet” czy „czyszczenie”, tak jak w Ant lub Makefile. Po prostu umieść pliki w miejscach, w których Maven ich oczekuje i powinno działać bezbłędnie.

  3. Maven ma również wiele fajnych wtyczek, które możesz zainstalować, które będą obsługiwać wiele rutynowych zadań, od generowania klas Java ze schematu XSD przy użyciu JAXB do mierzenia pokrycia testów za pomocą Cobertury . Po prostu dodaj je do swojego, pom.xmla zintegrują się ze wszystkim, co chcesz zrobić.

Początkowa krzywa uczenia się jest stroma, ale (prawie) każdy profesjonalny programista Java korzysta z Mavena lub sobie życzy. Powinieneś używać Mavena przy każdym projekcie, chociaż nie zdziw się, jeśli przyzwyczajenie się do niego zajmuje trochę czasu i że czasami chcesz, abyś mógł po prostu robić rzeczy ręcznie, ponieważ nauka czegoś nowego czasami boli. Jednak gdy naprawdę przyzwyczaisz się do Mavena, okaże się, że zarządzanie kompilacją prawie nie zajmuje czasu.

Jak zaczac

Najlepszym miejscem do rozpoczęcia jest „ Maven w 5 minut ”. Dzięki temu zaczniesz od projektu gotowego do zakodowania ze wszystkimi niezbędnymi ustawieniami plików i folderów (tak, zalecam użycie archetypu szybkiego startu, przynajmniej na początku).

Po rozpoczęciu będziesz chciał lepiej zrozumieć, w jaki sposób narzędzie ma być używane. Z tego powodu „ Better Builds with Maven ” jest najdokładniejszym miejscem do zrozumienia, jak to działa, jednak „ Maven: The Complete Reference ” jest bardziej aktualny. Przeczytaj pierwszy dla zrozumienia, ale potem użyj drugiego jako odniesienia.

Sanki
źródło
12
Jest wielu profesjonalnych programistów Java, którzy nie używają Mavena i cieszą się, że tego nie robią; niektóre z nich po prostu odrzucają jego złożoność i nieelastyczność i trzymają się Ant lub podobnego, ale coraz większa ich liczba to ludzie, którzy przeszli na następców Mavena, takich jak Gradle i Buildr. Następcy ci odziedziczyli po Mavenie pomysł dostarczenia potężnego zestawu kroków kompilacji po wyjęciu z pudełka, ale znacznie ułatwiają także dodawanie niestandardowych kroków. Biorąc pod uwagę ich istnienie, szczerze mówiąc, nie sądzę, aby był jakikolwiek powód, aby używać Mavena do nowych projektów.
Tom Anderson
5
Zawsze pojawia się pytanie, ile szczegółów należy podać w odpowiedzi, ale jeśli jesteś przeciętnym programistą Java, w twoim biurze prawdopodobnie jest to Maven lub gówniane piekło Ant (Ant + bash + perl + kompilacja komputera skonfigurowanego z magicznymi ścieżkami). Jeśli jesteś jednym z nielicznych szczęśliwców pracujących z programistami klasy A + w dobrym środowisku z możliwością swobodnego wyboru, istnieją inne opcje (jednym z nich jest Gradle). Ale jeśli pracujesz w przeciętnym miejscu, Maven jest najlepszym narzędziem, które nie pozwala współpracownikom skaleczyć się czymś ostrym.
Sanki
4
Nie sądzę, abyś musiał być programistą A +, aby używać Gradle. Nie rozumiem, dlaczego organizacja, która mogłaby adoptować Mavena, nie mogła adoptować Gradle. To prawda, że ​​Gradle pozwala ci strzelić sobie w stopę, tak samo jak Ant, ale w sposób, który Maven bardzo utrudnia (i mam zbiór postrzelonych stóp moich kolegów, aby to udowodnić); na tym polega kompromis umożliwiający robienie rzeczy, których Maven praktycznie uniemożliwia.
Tom Anderson
4
Jeśli chodzi o używanie czegoś takiego jak Gradle i unikanie stopek, proponuję klasyfikację programistów. Niektórzy programiści nie będą bali się edytować skryptów kompilacji i robić rzeczy mniej więcej poprawnie. Ci ludzie są przydatni. Niektórzy programiści boją się skryptów budujących i nie chcą ich dotykać. Przynajmniej ci ludzie nie są szkodliwi; Byłem w 12-osobowym zespole, w którym tylko dwóch z nas odważyło się dotknąć konstrukcji i faktycznie działało całkiem dobrze. Niektórzy programiści nie boją się skryptów kompilacji, ale schrzanią je, jeśli ich dotkną. Ci ludzie są niebezpieczni.
Tom Anderson
1
więc jest jak npm dla Javy
KJW
9

Z dokumentu Sonatype :

Odpowiedź na to pytanie zależy od Twojej własnej perspektywy. Zdecydowana większość użytkowników Mavena będzie nazywać Mavena „narzędziem do budowania”: narzędziem używanym do budowania artefaktów, które można wdrożyć z kodu źródłowego. Inżynierowie budowlani i kierownicy projektów mogą odnosić się do Mavena jako czegoś bardziej wszechstronnego: narzędzia do zarządzania projektami. Jaka jest różnica? Narzędzie kompilacji, takie jak Ant, koncentruje się wyłącznie na przetwarzaniu wstępnym, kompilacji, pakowaniu, testowaniu i dystrybucji. Narzędzie do zarządzania projektami, takie jak Maven, zapewnia nadzbiór funkcji dostępnych w narzędziu do budowania. Oprócz zapewniania możliwości kompilacji, Maven może również uruchamiać raporty, generować witrynę internetową i ułatwiać komunikację między członkami zespołu roboczego.

Zdecydowanie polecam zajrzeć do dokumentu Sonatype i poświęcić trochę czasu na przyjrzenie się dostępnym wtyczkom, aby zrozumieć moc Maven.

Krótko mówiąc, działa na wyższym poziomie pojęciowym niż (powiedzmy) Ant. Za pomocą Anta określasz zestaw plików i zasobów, które chcesz zbudować, a następnie określ, w jaki sposób chcesz je połączyć i określ kolejność, która powinna wystąpić w (clean / compile / jar). W przypadku Mavena wszystko to jest ukryte. Maven spodziewa się znaleźć twoje pliki w określonych miejscach i będzie z tym automatycznie pracował. W konsekwencji tworzenie projektu z Mavena może być dużo prostsze, ale musisz grać według zasad Mavena!

Brian Agnew
źródło
Nie przegłosowałem tego, ale być może ci, którzy je odrzucają, odczytują twój cytat z propagandy Sonatype jako ukrytą aprobatę totalitarnej filozofii Mavena "narzędzia do zarządzania projektami".
Tom Anderson
1
Nie wydaje mi się, żebyś odpowiedział na pytanie OP, zamiast tego właśnie opublikowałeś gadkę marketingową ... a ta gadka jest absurdalna, ponieważ „zarządzanie projektem” to o wiele więcej niż to, co robi Maven, służy bardziej zmyleniu niż pomaga, MOIM ZDANIEM.
Sanki
2
@Brian Przykro mi, jeśli mój poprzedni komentarz brzmi paskudnie, ale pozwól mi go przeformułować: czuję, że twój komentarz dobrze wyjaśnia Mavena, jeśli już rozumiesz, czym jest Maven, ale jako początkowy punkt wyjścia nie jest pomocny.
Sanki
5

Mavento narzędzie do budowania. Wraz z Antlub GradleJavanarzędziami do budowania.
Jeśli jesteś nowicjuszem w Javie, po prostu zbuduj za pomocą swojego IDE, ponieważ Mavenma stromą krzywą uczenia się.

Cratylus
źródło
Obsługa IDE dla Maven w NetBeans jest bardzo dobra, dzięki czemu krzywa uczenia się prawie nie istnieje.
Captain Giraffe