Mavenizujemy projekt i dlaczego wyszło jak zawsze

Nie tak dawno pisałem o przygotowaniach do pisania nowej aplikacji. By odpocząć trochę po niechlubnych przygodach z JSF zabrałem się za stawianie infrastruktury dla nowego projektu. Do Springa dołączył Maven.

Co to jest Maven? W odróżnieniu od Anta jest postrzegany nie tylko jako narzędzie, które zawiaduje budowaniem aplikacji javowych, ale też umożliwia szereg innych rzeczy, jak choćby generowanie eleganckiej dokumentacji technicznej. Piszę te słowa za mądrymi książkami – w swojej karierze na razie wystarczał mi Ant i jego zadania stworzone przez NetBeansa w ramach tworzenia projektu. Jednaże trzeba się rozwijać i stąd chęć poznania głównego konkurenta Anta. W konkurencji siła.

Rzecz jasna wpierw wypadałoby zainstalować stosowną wtyczkę. W tym celu udajemy się na stronę http://m2eclipse.sonatype.org/installing-m2eclipse.html, gdzie znajdziemy wszystkie potrzebne informacje. Kiedy już zainstalujemy wtyczkę wypadałoby zabrać się za zainstalowanie samego Mavena. Rzecz wygląda tak, iż wraz z wtyczką dostajemy również i Mavena, ale jak piszą ludzie od NetBeansa najczęściej jest to ‘preview version’, czyli jakieś alfy zmieszane z betą, zatem od biedy można tego użyć, ale lepiej zainstalować stabilną wersję. Wypada zatem odwiedzić stronę Mavena i zaopatrzyć się w najnowszą wersję. Kiedy ją zainstalujemy trzeba wskazać pluginowi naszego IDE katalog z instalacją. Tools->Options->Maven i w polu External Maven Home umieszczamy katalog gdzie zainstalowaliśmy Mavena. Na razie to tyle.

O samym narzędziu możnaby mówić wiele. Od Anta różni się tym, że stosuje ‘podejście deklaratywne’, czyli mówią krótko wpisujemy co chcemy osiągnąć, a Maven to mieli. Myślę, że przykład powie więcej niż moja mozolna dłubanina. Siłą Mavena jest konwencja – wspólne cechy każdego projektu realizowanego z jego udziałem. Co więcej – podążając tropem konwencji – powstały przygotowane tzw. archetypy. Są to przygotowane zawczasu szkielety projektu. W moim przypadku tworzę projekt z udziałem Hibernate i Springa, zatem wypadało szukać takowego. New->Project->Maven->Maven Project. Pojawi się taka oto lista:

Rozwijamy ją – ja wybrałem konkretnie zakładkę Default Archetype Catalog i dalej AppFuse archetype for creating web application with Hibernate, Spring and Spring MVC. Klikamy Next i dostajemy takie okno:

Myślę, że widać rubryki i to, co w nie wpisałem. Klikamy Finish i możemy cieszyć się nowiutkim projektem. Upppppsss. Coś nie tak. Dostałem komunikat o tym, iż niemożliwym jest utworzenie projektu, gdyż podany artefakt nie jest archetypem. No świetnie się zaczyna. Ale nie daję się.

Tutorial Springa opisuje jak to wszystko postawić po kolei. No dobra, będzie oldskulowo – konsola rządzi. Na razie jednakże by wpis nie poszedł na marne próbuję osiągnąć cokolwiek z pomocą Mavena. Czyli znów New Project->Maven->Maven Web Application. Wpisujemy to, co tam potrzeba, klikamy Finish.

Scanning for projects…
Setting property: classpath.resource.loader.class => ‘org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader’.
Setting property: velocimacro.messages.on => ‘false’.
Setting property: resource.loader => ‘classpath’.
Setting property: resource.manager.logwhenfound => ‘false’.
[archetype:generate]
Generating project in Batch mode
[WARN]No archetype repository found. Falling back to central repository (http://repo1.maven.org/maven2).
[WARN]Use -DarchetypeRepository= if archetype’s repository is elsewhere.
————————————————————————
BUILD SUCCESSFUL
————————————————————————
Total time: 4 seconds
Finished at: Tue Mar 30 00:20:25 CEST 2010
Final Memory: 138M/275M
————————————————————————

Mamy progres. Pojawiła się gotowa struktura projektu. Z ciekawości prawy przycisk – Run i kolejny ZONK. NetBeans pyta się o serwer, na którym mam to uruchomić. Problem w tym, że nie listuje przy okazji żadnego z nich, a przecież Tomcat i Glassfish leżą sobie spokojnie na dysku. Po kolejnym kwadransie grzebania wyszło mi, że przy tworzeniu projektu nie mogę zaznaczyć Java EE 6, gdyż powoduje to takie właśnie problemy. Zaznaczenie wersji 5 pomaga i można sobie uruchomić szkielet programu (do Springa to jednakże jest daleko). Wyskakuje “Hello World” i chyba powinienem być zadowolony. Nie jestem. Na pewno przy Mavenie pozostanę, wszak nauczyć się chciałem czegoś nowego, ale czy to normalne, że zwykły programer jak ja ma z tak podstawowymi rzeczami problemy? Czy ja naprawdę coś robię źle?

PS. Odpaliłem projekt Spring+Hibernate poprzez standardowy generator NetBeansJava Web->Web Application. Wybrałem frameworki, określiłem serwer i nazwę i oto Ant zamielił i po 10 sekundach miałem śliczny projekt, działający, z podpiętymi bibliotekami i szczerzący się bardziej rozbudowanym “Hello World”. Idę spać, ile można się wkurzać.

Advertisements

8 thoughts on “Mavenizujemy projekt i dlaczego wyszło jak zawsze

  1. Koziołek

    Maven w NB jest bardzo średnio wspierany. Ważna rzecz. Możesz skonfigurować sobie odpowiedni plugin w pom.xml i za pomocą mavena deployować projekt na serwerze.

  2. chlebik Post author

    Oj no mi sie podoba caly pomysl na to narzedzie, po prostu denerwuje mnie, ze na kazdym kroku kiedy robie cos nowego wyskakuja takie ‘kfiatki’, ktore moim zdaniem w ogole nie powinny miec miejsca w gotowym produkcie (mowie o NB).

  3. jaceklaskowski

    Jednaże trzeba się rozwijać i stąd chęć poznania głównego konkurenta Anta – nie zgodziłbym się z takim postrzeganiem kwestii Ant vs Maven. To nie są rywale, ale podobnie jak C i C++ wygląda sprawa z Antem i Mavenem. Maven jest swego rodzaju nakładką na Anta z uproszczeniami, o których w Ancie tylko pomarzyć. Jeśli do tego dołożyć konwencje, to mamy coś, czego nie było w Ancie. Podobnie sprawa się ma z Apache Ivy. On jest pomiędzy nimi.

    Z ciekawości prawy przycisk – Run i kolejny ZONK. – nie jest też dobre, że problemy NetBeans mogą wydawać się problemami Mavena. Pamiętaj, aby to rozróżnić, bo któremuś dostanie się za innego, a przecież nie tego chcemy.

    Nie ma co ukrywać, że łatwo nie będzie z poznawaniem nowych narzędzi, szczególnie w łączeniu ich funkcjonalności – to jest sedno sprawy – integracja. To nigdy nie należało do łatwych rzeczy, bez względu czego dotyczyło. U ludzi jest podobnie 🙂

  4. Koziołek

    Jacku chyba trochę przesadzasz mówiąc, że Maven jest nakładką na Anta. Oba te narzędzia realizują podobne zadania, ale mają całkowicie różną filozofię. Porównałbym je raczej do autobusu i autokaru, oba pojazdy realizują podobne zadanie oba mogą działać na tej samej trasie, ale filozofia ich działania jest inna.

    Kolejny element do opowieści o wyborze narzędzi… hehehe…

  5. Koziołek

    Tomku, tylko na razie z Gradle i Mavenem jest tak jak było z Antem i Mavenem gdy pojawił się ten drugi. W korpo dobrze usadowiony jest ant/maven i gradle będzie musiał stoczyć ciężki bój by wyjść poza strefę OS/FS. Później pokarze się kolejne fajne narzędzie. Walec ewolucji będzie jechał dalej.

  6. e!

    Dlaczego chcesz karać ‘kolejne fajne narzędzie’? ;P
    I tak wiadomo, że makefile dla javy zapewniają najwięcej radości 😉

  7. Tomek

    @Koziołek,
    oczywiście że Gradle potrzebuje czasu by przebić się do firm. Jego przewaga nad poprzednikami jest jednak na tyle duża że uważam to za wielce prawdopodobne.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s