niedziela, 1 czerwca 2008

instaluję(my) mavena 2

Wyobraźcie sobie, że od dłuższego czasu byłem dużym przeciwnikiem Mavena. Dlaczego?
Kiedyś mój mentor Javowy powiedział, że nie wierzy, że ludzie, którzy zrobili Mavena 1 (który podobno okazał się niewypałem), nie mogą zrobić porządnego. Mnie to wystarczyło, więc wszyscy guru-mentorzy-blogerzy - uważajcie co mówicie. Choć trzeba przyznać, że coś jest na rzeczy. Z prezentacji Piotra Tabora "Okiełznać Mavena 2" (WJUG) wyniosłem taki wniosek, że to wszystko jest tam tak zakręcone, że nikt nie wie, o co chodzi...

Nie wiem, co to jest Maven 1. Co to jest Maven 2?
Maven 2 to 3 rzeczy (jeszcze się nie pogubiłem w numerkach)
- to taki Ant o trochę bogatszych możliwościach (generalnie rzecz ujmując buduje - kompiluje projekt)
- to takie Ivy. Nie wiecie, co to jest Ivy? Mój mentor wiedział ;). Ja teraz też wiem. To po prosty zarządca zależności - ściąga biblioteki w wersjach, w których mu każemy.
- to takie coś, dla czego nie znam alternatywy i dlaczego zaraz zainstaluję mavena. Generalnie to narzędzie umożliwia postawienie projektu, za pomocą tzw. archetypów. Pobiera gotowe struktury katalogów i robi nam aplikację typu "hello word" w jednej z wielu wybranych przez nas technologii. Może ty, szanowny czytelniku znasz tutaj jakąś alternatywę? Ja dla tych archetypów właśnie instaluję maven2, więc twoja informacja się nie zmarnuje.

Ale do rzeczy.

Kiedyś było trudno zainstalować mavena2. Tworzyło się jakieś katalogi, dodawało jakieś zmienne środowiskowe, sranie w banie. Teraz mamy ubuntu. Ja mam Ubuntu 8.04.
Tak więc aby na Ubuntu zainstalować maven2, odpalamy konsole i wpisujemy

sudo apt-get install maven2

komputer warczy, warczy...
i jest gites.
Sprawdzam, czy działa:
mateusz@mateusz-laptop:~$ mvn [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [ERROR] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] You must specify at least one goal. Try 'mvn install' to build or 'mvn -?' for options See http://maven.apache.org for more information. [INFO] ------------------------------------------------------------------------ [INFO] For more information, run Maven with the -e switch [INFO] ------------------------------------------------------------------------ [INFO] Total time: <> [INFO] Finished at: Mon Jun 02 00:59:59 CEST 2008 [INFO] Final Memory: 1M/34M [INFO] ------------------------------------------------------------------------

Wyskoczył error, czyli działa. Takie rzeczy tylko na moim blogu ;)

Jedziemy dalej.
rzut oka na:
Maven in 5 Minutes
Maven Getting Started Guide
oczywiście nie ma tego czego szukam

dobra, wpisuję:

mvn archetype:generate -DarchetypeCatalog=http://myfaces.apache.org

coś się dzieje...
Ściągają się jakieś jary. Już wiem o co chodzi. Podałem
-DarchetypeCatalog=http://myfaces.apache.org

Co oznacza, że maven2 wszedł na stronę

http://myfaces.apache.org

i zobaczył, jakie tam są archetypy ;). Komputer robi coś za mnie. Fajnie.
Coś czuję, że zaraz będziemy mieli pierwszą aplikację z mavena.

[INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype:
1: remote -> myfaces-archetype-helloworld (Simple Web application using Apache Myfaces)
2: remote -> myfaces-archetype-helloworld-facelets (Simple Web application using Apache Myfaces and Facelets)
3: remote -> myfaces-archetype-helloworld-portlets (Simple Web application using Apache Myfaces and Portlets)
4: remote -> myfaces-archetype-jsfcomponents (Simple JSF Component using Apache Myfaces)
5: remote -> myfaces-archetype-trinidad (Simple Web application using Apache Myfaces and Trinidad)

nooo, jesteśmy w domu.
Trynidad i Tobago – wyspiarskie państwo Ameryki Środkowej, położone u północnych brzegów Ameryki Południowej.
Dla mnie bomba. Wybieramy 5 i lecimy dalej.

Downloading: http://repo1.maven.org/maven2/org/apache/myfaces/buildtools/myfaces-archetype-trinidad/1.0.1/myfaces-archetype-trinidad-1.0.1.jar
21K downloaded
Define value for groupId: : pl.najawie
Define value for artifactId: : trynidad-app
Define value for version: 1.0-SNAPSHOT: : 1.0.0
Define value for package: : pl.najawie
Confirm properties configuration:
groupId: pl.najawie
artifactId: trynidad-app
version: 1.0.0
package: pl.najawie
Y: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating OldArchetype: myfaces-archetype-trinidad:1.0.1
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: pl.najawie
[INFO] Parameter: packageName, Value: pl.najawie
[INFO] Parameter: package, Value: pl.najawie
[INFO] Parameter: artifactId, Value: trynidad-app
[INFO] Parameter: basedir, Value: /home/mateusz
[INFO] Parameter: version, Value: 1.0.0
[INFO] ********************* End of debug info from resources from generated POM ***********************
[INFO] OldArchetype created in dir: /home/mateusz/trynidad-app
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8 minutes 50 seconds
[INFO] Finished at: Mon Jun 02 01:25:07 CEST 2008
[INFO] Final Memory: 9M/57M
[INFO] ------------------------------------------------------------------------


tym razem sukces, czyli znowu sukces. jeden minus, coś tam mi powstało w katalogu /home/mateusz/trynidad-app
Będę to musiał jakoś skonfigurować. Ale na razie się tym nie przejmujmy.
Teraz:
cd trynidad-app/
mvn package

coś się ściąga... Poczytam o Trynidadzie i Tobago. No tak, przecież Beenhakker ich trenował poprzednio. Dobra, idziemy dalej.

mvn jetty:run


Ściąga się Jetty. Mój ulubiony kontener serwletów.
Wyskoczyło:

2008-06-02 01:34:41.398::INFO: Started SelectChannelConnector@0.0.0.0:8080 [INFO] Started Jetty Server [INFO] Starting scanner at interval of 10 seconds.

Z czego wnioskuję, że coś znajdę na
http://localhost:8080




klikam w link, wybieram index.jspx i...

java.lang.RuntimeException: FacesContext not found
O co chodzi? No dobra, okazało się, że ten Trynidad wybrałem w sposób nie do końca losowy i wiem mniej więcej o co chodzi. Generalnie ten trynidad który wybrałem, to taki dodatek do MyFaces która jest implementacją Java Servlet Faces.
W wyjątku tym chodzi o to, że link jest wpisany źle i plik jspx jest odpalany bez JSFów. Krótka analiza pliku web.xml i już wiem, że muszę wpisać:

http://localhost:8080/trynidad-app/faces/index.jspx

i jesteśmy w domu.



No, to tyle na teraz, ale w głowie mam już pomysły na kilka kolejnych wpisów, więc bądźcie czujni...

3 komentarze:

Mariusz Lipiński pisze...

Alternatywnie - można Maven'a zainstalować wraz z wtyczką do naszego IDE. Wszystko jest wtedy dziecinnie proste:

Eclipse - instalujemy przez "update-site", update-site to http://m2eclipse.sonatype.org/update/

NetBeans - należy użyć funkcji Update Center i zaintalować plugin "Maven"

MZ pisze...

czy taki maven działa wtedy też z linii poleceń?

Mariusz Lipiński pisze...

Hmmmm... zapewne siedzi gdzieś w postaci biblioteki więc pewnie nie. Rzeczywiście, jeśli komuś zależy na linii poleceń to sam plugin nie wystarczy.