Jakie są główne zalety używania mavena w porównaniu z, powiedzmy, mrówką? Wydaje się, że jest to bardziej irytujące niż pomocne narzędzie. Używam maven 2, ze zwykłym Eclipse Java EE (bez m2eclipse) i tomcat.
Zwolennicy mavena w to wierzą
Maven pozwala łatwo uzyskać zależności pakietów
Maven zmusza Cię do posiadania standardowej struktury katalogów
Z mojego doświadczenia
Ustalenie zależności pakietów naprawdę nie jest takie trudne. I tak rzadko to robisz. Prawdopodobnie raz podczas konfiguracji projektu i kilka innych podczas aktualizacji. Z maven w końcu naprawisz niedopasowane zależności, źle napisane poms i zrezygnujesz z wykluczeń pakietów.
Powolny cykl FIX-COMPILE-DEPLOY-DEBUG, który zabija produktywność. To jest moje główne zastrzeżenie. Dokonujesz zmiany, musisz poczekać, aż kompilacja maven zacznie działać i poczekać, aż zostanie wdrożona. Żadnego wdrażania na gorąco.
A może po prostu robię to źle? Proszę, wskaż mi właściwy kierunek, mam uszy.
źródło
Odpowiedzi:
Nie jest to trudne ... do projektów zabawek. Ale projekty, nad którymi pracuję, mają ich wiele, naprawdę wiele i bardzo się cieszę, że mogę je przejąć, mając dla nich ustandaryzowany schemat nazewnictwa. Ręczne zarządzanie tym wszystkim byłoby koszmarem.
I tak, czasami trzeba popracować nad zbieżnością zależności. Ale pomyśl o tym dwa razy, nie jest to nieodłączne dla Mavena, jest to nieodłączne dla każdego systemu używającego zależności (i mówię tutaj ogólnie o zależnościach Java).
Więc z Antem musisz wykonać tę samą pracę, z wyjątkiem tego, że musisz zrobić wszystko ręcznie: pobranie jakiejś wersji projektu A i jego zależności, pobranie jakiejś wersji projektu B i jego zależności, samodzielne ustalenie, jakich dokładnych wersji używają, sprawdzenie że się nie pokrywają, sprawdzanie, czy nie są niekompatybilne itp. Witaj w piekle.
Z drugiej strony Maven obsługuje zarządzanie zależnościami i pobierze je dla mnie przechodnie i daje mi narzędzia potrzebne do zarządzania złożonością związaną z zarządzaniem zależnościami : mogę analizować drzewo zależności, kontrolować wersje używane w zależnościach przechodnich, wykluczać niektóre z je , jeśli to konieczne, kontrolować Converge całej modułów itp nie ma magicznej. Ale przynajmniej masz wsparcie.
I nie zapominaj, że zarządzanie zależnościami to tylko niewielka część tego, co oferuje Maven, jest o wiele więcej (nie wspominając nawet o innych narzędziach, które ładnie integrują się z Maven, np. Sonar ).
Po pierwsze, dlaczego używasz Mavena w ten sposób? Ja nie. Używam mojego IDE do pisania testów, kodu, dopóki nie przejdą, refaktoryzacji, wdrażania, wdrażania na gorąco i uruchamiania lokalnej kompilacji Mavena, gdy skończę, przed zatwierdzeniem, aby upewnić się, że nie zepsuję ciągłej kompilacji.
Po drugie, nie jestem pewien, czy użycie Anta poprawiłoby sytuację. Z mojego doświadczenia wynika, że modularne kompilacje Mavena przy użyciu zależności binarnych zapewniają mi szybszy czas kompilacji niż typowe monolityczne kompilacje Ant. W każdym razie spójrz na Maven Shell, aby uzyskać gotowe do (ponownego) użycie środowiska Maven (które jest niesamowite).
Na koniec, przykro mi to mówić, to nie Maven zabija Twoją produktywność, ale nadużywanie narzędzi. A jeśli nie jesteś z tego zadowolony, cóż, cóż mogę powiedzieć, nie używaj tego. Osobiście używam Mavena od 2003 roku i nigdy nie oglądałem się za siebie.
źródło
Maven można uznać za kompletne narzędzie do tworzenia projektów, a nie tylko narzędzie do budowania, takie jak Ant. Powinieneś używać Eclipse IDE z wtyczką maven, aby naprawić wszystkie problemy.
Oto kilka zalet Mavena, przytoczonych ze strony Korzyści z używania Mavena :
źródło
Ustalenie zależności dla małych projektów nie jest trudne. Ale kiedy zaczniesz zajmować się drzewem zależności z setkami zależności, sprawy mogą łatwo wymknąć się spod kontroli. (Mówię tu z doświadczenia ...)
Inną kwestią jest to, że jeśli używasz IDE z kompilacją przyrostową i obsługą Maven (jak Eclipse + m2eclipse), powinieneś mieć możliwość skonfigurowania edycji / kompilacji / wdrażania na gorąco i testowania.
Osobiście tego nie robię, ponieważ zacząłem nie ufać temu sposobowi rozwoju z powodu złych doświadczeń z przeszłości (przed Mavenem). Być może ktoś może skomentować, czy to faktycznie działa z Eclipse + m2eclipse.
źródło
Maven jest jednym z narzędzi, w którym musisz z góry zdecydować , że ci się podoba i chcesz z niego korzystać, ponieważ spędzisz trochę czasu na nauce, a podjęcie tej decyzji raz na zawsze pozwoli ci pominąć wszystkie rodzaje wątpliwości podczas nauki (bo lubisz to i chcesz to wykorzystać)!
Silne konwencje pomagają w wielu miejscach - takich jak Hudson, który potrafi zdziałać cuda dzięki projektom Maven - ale na początku może być trudno to zauważyć.
edycja: od 2016 roku Maven jest jedynym narzędziem do budowania języka Java, w którym wszystkie trzy główne środowiska IDE mogą korzystać ze źródeł po wyjęciu z pudełka. Innymi słowy, użycie maven sprawia, że twoja kompilacja staje się agnostyczna. Pozwala to np. Na korzystanie z profilowania Netbeans, nawet jeśli normalnie pracujesz w eclipse
źródło
Maven ma kilka zalet w porównaniu z mrówkami. Tutaj próbuję je podsumować.
Konwencja nad konfiguracją
Maven wykorzystuje charakterystyczne podejście do układu projektu i uruchamiania, które ułatwia przejście do projektu. Zwykle potrzeba tylko sumy kontrolnej i polecenia maven, aby uzyskać artefakty projektu.
Modularyzacja
projektu Konwencje projektu sugerują (lub lepiej, zmuszają) dewelopera do modularyzacji projektu. Zamiast monolitycznego projektu często jesteś zmuszony podzielić projekt na mniejsze komponenty podrzędne, co ułatwia debugowanie i zarządzanie ogólną strukturą projektu
Zarządzanie zależnościami i cykl życia projektu
Ogólnie, z dobrą konfiguracją SCM i wewnętrznym repozytorium, zarządzanie zależnościami jest dość łatwe i znowu jesteś zmuszony myśleć w kategoriach cyklu życia projektu - wersje komponentów, zarządzanie wydaniami i tak dalej. Trochę bardziej skomplikowane niż coś mrówkowego, ale znowu poprawa jakości projektu.
Co jest nie tak z mavenem?
Maven nie jest łatwe. Cykl tworzenia (co i kiedy jest zrobione) nie jest tak jasny w POM. Pojawiają się również problemy z jakością komponentów i brakującymi zależnościami w repozytoriach publicznych.
Najlepszym podejściem (dla mnie) jest posiadanie wewnętrznego repozytorium do buforowania (i utrzymywania) zależności oraz zastosowanie do zarządzania wydaniami komponentów. W przypadku projektów większych niż przykładowe projekty w książce, podziękujesz mavenowi przed lub po
źródło
Maven może zapewnić korzyści dla Twojego procesu kompilacji, stosując standardowe konwencje i praktyki w celu przyspieszenia cyklu rozwoju, a jednocześnie pomaga osiągnąć wyższy wskaźnik sukcesu. Aby uzyskać bardziej szczegółowe informacje o tym, w jaki sposób Maven może pomóc Ci w procesie rozwoju, zapoznaj się z Korzyściami z używania Maven.
źródło
Maven to potężne narzędzie do zarządzania projektami oparte na POM (model obiektowy projektu). Służy do tworzenia projektów, zależności i dokumentacji. Upraszcza proces budowania, podobnie jak ANT. Ale jest zbyt zaawansowany niż ANT. Maven pomaga w zarządzaniu - kompilacjami, dokumentacją, raportowaniem, SCM, wydaniami, dystrybucją. - repozytorium maven to katalog spakowanego pliku JAR z plikiem pom.xml. Maven wyszukuje zależności w repozytoriach.
źródło
Nigdy nie trafiłem na punkt 2? Czy możesz wyjaśnić, dlaczego uważasz, że wpływa to w jakikolwiek sposób na wdrożenie. Jeśli cokolwiek, maven pozwala na strukturyzację projektów w sposób modułowy, który faktycznie pozwala na poprawki błędów w określonej warstwie i umożliwia na przykład niezależne tworzenie API od pozostałej części projektu.
Możliwe, że próbujesz upchnąć wszystko w jednym module, w takim przypadku problem nie jest wcale maven, ale sposobem, w jaki go używasz.
źródło
To powinien być komentarz, ale nie pasował do długości komentarza, więc opublikowałem go jako odpowiedź.
Wszystkie korzyści wymienione w innych odpowiedziach można osiągnąć prostszymi środkami niż przy użyciu Mavena. Jeśli na przykład jesteś nowy w projekcie, i tak spędzisz więcej czasu na tworzeniu architektury projektu, łączeniu komponentów, kodowaniu niż na pobieraniu słoików i kopiowaniu ich do folderu lib. Jeśli masz doświadczenie w swojej domenie, to już wiesz, jak rozpocząć projekt od jakich bibliotek. Nie widzę żadnej korzyści z używania mavena, zwłaszcza gdy stwarza wiele problemów podczas automatycznego wykonywania „zarządzania zależnościami”.
Mam tylko średniozaawansowaną znajomość Mavena, ale mówię Ci, że robiłem duże projekty (takie jak ERP) bez korzystania z Mavena.
źródło