Tworzenie projektów Java EE za pomocą Maven

13

Od około roku rozwijam aplikacje internetowe Java EE w Eclipse. Mój pracodawca nie korzysta z Maven, ale im więcej o nim czytam, tym bardziej jestem przekonany, że Maven + Hudson będzie dla nas bardzo korzystny. Najpierw jednak muszę swobodnie korzystać z tych technologii w wolnym czasie, aby móc stworzyć dowód koncepcji.

W tej chwili wciąż jestem początkującym Maven. Czy istnieje zestaw najlepszych praktyk dotyczących tworzenia aplikacji internetowych Java EE za pomocą Maven? Na przykład mógłbym stworzyć projekt z podstawowym archetypem, a następnie dodać wszystkie niezbędne pliki JAR, umieszczając zależności w POM dla kontenera serwletu, EJB, EclipseLink itp. Może to działać, ale nie może być najlepsze sposób to zrobić. Byłbym bardzo wdzięczny za wszelkie wskazówki dotyczące tego tematu.

Michael
źródło

Odpowiedzi:

10

Nie zawracaj sobie głowy archetypami, aż później

Aby uzyskać wszystkie informacje, które musisz wiedzieć o Maven, przeczytaj niektóre książki na ich stronie internetowej . Jest to jednak trochę przesada w stosunku do tego, co próbujesz osiągnąć.

Aby rozpocząć, ułóż aplikację internetową zgodnie ze standardową strukturą Maven dla aplikacji internetowych w następujący sposób. (Nie potrzebujesz do tego archetypu Maven, to tylko kilka standardowych folderów, możesz to zrobić w 2 minuty).

  • src/main/java - zawiera produkcyjny kod Java
  • src/main/resources - zawiera zasoby produkcyjnej ścieżki klasy (np. konteksty wiosenne)
  • src/main/webapp - (zawiera WEB-INF / web.xml, ale nie ma folderu lib)
  • src/test/java - zawiera testowy kod Java
  • src/test/resources - zawiera zasoby testowe (np. przykładowe kanały XML do testowania usług internetowych itp.)

Podstawowe wtyczki

Następnym krokiem jest wybranie kilku wtyczek. Zwykłymi podejrzanymi są, oczywiście, ci, którzy wspierają czyszczenie, kompilację i zasoby (są częścią Maven, ale możesz je skonfigurować). Następnie będziesz mieć tester jednostek surefire i wtyczkę WAR. To wystarczy, aby stworzyć bardzo podstawową aplikację internetową.

Bardziej zaawansowane wtyczki

Następnym krokiem jest wprowadzenie Findbugs i wtyczek PMD, które pozwolą Twojemu kodowi dokładnie przejrzeć i zgłosić różne potencjalne problemy. Prawdopodobnie będziesz chciał mieć JXR do odsyłania kodu źródłowego, taglist do śledzenia TODO i tagów REFACTOR i tak dalej. Ponad wszystko...

... Użyj wtyczki Jetty do aplikacji internetowych

Użyj wtyczki Jetty, aby uruchomić plik WAR w swoim IDE w celu łatwego debugowania. Jest szybki i mały i naprawdę szybko wykonuje pracę. Posiadanie Jetty jako części kompilacji Maven sprawia, że ​​Twój projekt może być testowany na dowolnej maszynie bez potrzeby IDE ze skonfigurowanym złożonym panelem Serwerów. Pozwala także deklarować zależności od innych plików WAR, co z kolei oznacza, że ​​możesz wygenerować kompletne środowisko robocze składające się z wielu aplikacji internetowych za pomocą jednego polecenia „mvn clean jetty: run”. Działa to wszędzie i możesz nawet dostarczyć testową konfigurację JNDI, aby wszystkie źródła danych z iniekcją Spring były skonfigurowane zewnętrznie. Jeśli połączysz to podejście Jetty ze standardową demonstracyjną stroną HTML (src/test/resources/demo.html) zaoszczędzisz mnóstwo godzin programistów próbujących uzyskać działające środowisko lokalne. Jedno polecenie i gotowe. Prosty.

Konfigurowanie IDE

Z Maven jest to łatwe, ponieważ obsługują go wszyscy duzi chłopcy: Eclipse, Netbeans i, oczywiście, mój ulubiony Intellij. Po prostu skieruj swoje IDE na pom.xml, a zajmie się usunięciem wszystkich wymienionych zależności. Nigdy więcej zabawy WEB-INF/lib. W Eclipse zwykle używasz File | Importuj ... | Projekt Maven | pom.xml.

Integracja z Hudsonem

Najpierw zainstaluj Hudson (to tylko aplikacja internetowa), a następnie celuj w system kontroli wersji, aby sprawdził odpowiednią wersję. Ostatnim krokiem jest skonfigurowanie go tak, aby korzystał z Maven do wykonania kompilacji. Oczywiście Maven będzie musiał zostać zainstalowany na komputerze kompilacji (zakładając, że różni się on od komputera programisty).

Hudson wykonuje tylko kompilacje migawek

Poproś Hudsona o wykonanie kompilacji migawek i pozostaw kompilacje wersji procesowi ręcznemu. Zastosowanie tego podejścia oznacza, że ​​programiści mogą udostępniać swój kod w ramach wersji migawki (np. 1.0.0-SNAPSHOT) i tylko wtedy, gdy będzie w stanie przekazać kompilację, zostanie udostępniony w repozytorium zespołu. Zazwyczaj Hudson wykona „mvn clean deploy”, chociaż uwzględnienie celu „site” może również być częścią twojego procesu, ponieważ stworzy małą stronę projektu dla każdej kompilacji. Programiści w zespole będą automatycznie aktualizować kompilację migawek do swojego projektu poprzez proces zarządzania zależnościami Maven.

Hudson zapewnia wiele wtyczek, które mogą obsługiwać wszystkie rodzaje danych. Moim osobistym faworytem jest śledzenie liczby pozytywnych testów na projekt w czasie. Wspaniale jest pokazać kierownictwu, że liczba testów jednostkowych i zasięg stale rosną.

Ogólne wskazówki dotyczące konfiguracji

Podziel swoje repozytoria na co najmniej następującą strukturę:

  • team-release - wszystkie uwolnione artefakty produkcyjne są tutaj
  • team-snapshot - Wszystkie artefakty związane z tworzeniem migawek znajdują się tutaj
  • wydanie trzeciej strony - wszystkie obsługiwane przez siebie biblioteki stron trzecich są dostępne tutaj (np. Spring, Hibernacja itp.)

Konta użytkowników programistów nie powinny mieć możliwości zapisu do repozytoriów zespołów, ani migawek, ani wydań. Umożliwi to programistom obejście Hudsona, jeśli się spieszą i szybko stanie się normą.

Upewnij się, że zawsze pobierasz podpisy źródłowe, javadocs i SHA dla wszystkich stron trzecich. Jarvana jest doskonałym eksploratorem repozytoriów dla wszystkich tych, którzy trudno znaleźć klasy.

Rozważ zainstalowanie menedżera repozytorium, takiego jak Nexus lub Artifactory, aby umożliwić lepszą kontrolę nad stale rosnącym repozytorium.

Gary Rowe
źródło
2
Sonar jest również niesamowity i dobrze pasuje do maven / Hudson
Kevin
1
Absolutnie. W tej chwili, jeśli pracuję nad projektem Maven w zespole, spodziewałbym się, że lokalny Findbugs / PMD szybko złapie problemy z zabójcą, a następnie zadanie Sonar po kompilacji Jenkinsa z rozmieszczeniem artefaktów na Nexusie lub Artifactory. Zapewnia to łatwą lokalizację artefaktów i zapewnia analizę wpływu („w przypadku użycia”) tych artefaktów w całym ekosystemie projektu. W połączeniu z git, JIRA i Fisheye masz do dyspozycji niesamowity proces rozwoju.
Gary Rowe,
1
Gary, link pdf wygasł
użytkownik1787812
1

Maven zapewnia wiele archetypów

mvn archetype:generate

wydrukuje listę dostępnych.

Główną różnicą między zwykłymi archetypami Java i archetypami J2EE jest to, że zostaną wygenerowane katalogi dla plików jsp i obrazów. Jeśli zaczynasz nowy projekt J2EE, rozważ użycie jednego z nich od samego początku.

W miarę rozwoju projektu możesz dodawać kolejne zależności. Osobiście wolę zacząć od minimalnego zbioru zależności (np. Podstawowy archetyp J2EE), a następnie stopniowo dodawać to, czego potrzebuję.

andreasmk2
źródło
0

Zrobiłem to, zaczynając od podstawowego archetypu i dodając wszystkie bity, i jestem całkiem pewien, że nie jest to zbyt dobry sposób. Ale wydaje mi się, że jest to również niewygodne; wybranie dobrego archetypu jest trudne, chyba że jesteś „głęboko zaznajomiony z sekretami”. To wszystko trochę za bardzo przypomina czarodziejską wiedzę (w przeciwieństwie do rozsądnych informacji technicznych) na mój gust…

Donal Fellows
źródło
I myślę, że to dobre pytanie. Chciałbym mieć lepszą odpowiedź.
Donal Fellows
Jest to bardzo mile widziane, proszę pana.
Michael
0

Maven umożliwia tworzenie projektów na podstawie szablonów zwanych Archetypami . Polecenie służy mvn archetype:generatedo wybierania jednego interaktywnie . Możesz także określić jeden bezpośrednio.

mvn archetype:generate \
    -DarchetypeGroupId=org.apache.maven.archetypes \
    -DarchetypeArtifactId=maven-archetype-j2ee-simple \
    -DarchetypeVersion=1.0

Wszystko w jednej linii.


źródło
0

Używam Maven i Hudsona przez ostatnie trzy miesiące. Pomaga mi regularnie sprawdzać kondycję bazy kodu, wykonując wszystkie testy jednostkowe i generując raport z testów. Możesz tego spróbować.
Możesz także spróbować Spring Roo. Jest to narzędzie RAD do tworzenia projektu J2EE opartego na Spring.

Haylem
źródło