Prikazani su postovi s oznakom Maven. Prikaži sve postove
Prikazani su postovi s oznakom Maven. Prikaži sve postove

ponedjeljak, 9. siječnja 2012.

Maven & Eclipse i prva web aplikacija pomoću njih

 Sve što se radi u Mavenu je orginalno namjenjeno da se radi iz command prompta i može se raditi, ali si obzirom da se velika većina (uzeti za zadrškom) java web alplikacija radi pomoću Eclipsea rodila se potreba za eclipse pluginom za maven.

Instalacija je krajnje jednostavna. Potrebno je odraditi korake instalacije mavena na računalo koje sam objasnio u prošlom postu. Zatim u eclipsu se maven dodaje kao svaki drugi plugin.
Help -> Install New Software i dodajte ovaj url: http://download.eclipse.org/technology/m2e/releases i odaberite m2e - Inetgration for Eclipse te next, agree i finish. Nakon svega toga još samo jedan restart eclipse i to je to!

 

Sada prelazimo na praktični dio (ujedinio i onaj zabavniji). Ništa se spektakularno nije dogodilo, na prvi pogled. Ali ako idemo napraviti novi projekt može se primjeti da imao novu opciju Maven i nekoliko odabira. Za ovaj slučaj odaberite Maven Project, kao što je prikazano na slici i Next:


Na prvom prozoru se može sve slobodno ostaviti defaultno i next jer sljedeći prozor je bitan. Možemo odabrati filter jer Maven nudi hrpu, ali doslovno hrpu templatea. Avanturisti slobodno pregledajte šta se sve nudi. Ali ako ćemo raditi web aplikaciju u filter upišite webapp i odaberiti mavenov archetype. Archetype je nešto najsličnije templateu ali maven to zove archetype.


Ima i drugih webapp archetypova i prema potreba aplikacije slobodno odaberite onaj koji vam treba ali ja ću odabrati mavenov web app, te zatim Next. To nas dovodi do jako važnog prozora:





Potrebno je popuniti nekoliko opcija. Group Id je id po kojemu ćemo raspoznavati naš projekt, može biti ime paketa ili neko smisleno ime. Artifact Id je ime projekta koje će se prikazivati u Project Exploreru. Verzija sama objašnjava, ali treba imati na umu da maven će stvoriti naš war file, ali u sljedećem obliku: ArtifactId + Verzija, znači u mom slučaju DemoWebApp-0.0.1-SNAPSHOT
I zadnje ime baznog paketa, zatim nam još jedino preostaje Finish.
Maven je za nas stvorio projekt s rasporedom svih potrebnih fileova za web aplikaciju. Plus bio je toliko dobar da nam generira i web.xml te jedan Hello World jsp. Kako divno od njega! 
Jedino što razlikuje maven projekt na prvi pogled od običnog web projekta stvorenoga u eclipsu je malo plavo slovo m iznad imena projekta i nešto potpuno novo ako se niste sreli do tada sa mavenom, a to je pom.xml


Ako otvorimo pom.xml vidjet ćemo naše opcije i ako bolje pogledamo tag: <packaging>war</packaging>
Znači kada pokrenemo build dobit ćemo war, u slučaju da radimo Java SE aplikaciju umjesto war tu bi stajalo jar.
Još jedan je novi tag ali i pojam -> Dependencies
Unutar toga stavljamo sve naše zavisnosti koju su nam potrebni za našu aplikaciju. Zavisnosti nisu ništa drugo nego jar-ovi koju su nam potrebni za izradu aplikacije. Npr. JDBC jar, spring, junit....
Zavisno što nam treba to unosimo, a to se može napraviti na nekoliko načina. Nakon otvorenog pom filea možemo vidjeti na dnu dokumenta nekoliko tabova. Pa ako kliknemo na tab Dependencies možemo dodati novu zavisnost pomoću Add. Drugi način je ako odaberemo pod tabovima pom.xml tako da možemo uređivati xml ili ako kliknemo desnom tipkom na project pa pod Maven odaberemo Add Dependecy.
Naravno nitko ne očekuje da netko zna napamet sve zavisnosti i kako ih točno napisati. Zato postoje čak i posebne web stranice. Brza pretraga googlom za Maven Repository Search će nam dati brdu rezultat, ja koristim http://mvnrepository.com
Pomoću searcha nađite šta vam treba, u mom slučaju PostgreSQL te odaberite verziju koja vam treba, u mom slučaju verzija 9. Može se uočiti da se vidi dali je verzija beta, release... Odaberite jednu i vidite sljedeće:


Jednostavno prekopirajte xml na stranici u pom.xml unutardependencies tagova i to je to. Možete početi koristiti ih koristiti u svojim programima.
Važna činjenica je da Maven zahtjeva stalno vezu s internetom. Može se koristiti i off-line verzija ali moramo imati zavisnosti skinute u naš lokalni repozitorij. Ako koristimo off-line verziju samo uz svaku opciju dodamo -o. Npr. install -o
Ono što se dogodi kada pokrenemo build, Maven skine sve zavisnosti u naš lokalni repozitorij (ako se zavisnost već ne nalazi tamo), imajte na umu da ako prvi put pokrećete build to bi moglo malo potrajati, što je sasvim normalno.

No dosta priče, potrebno je ovo dovesti k war-u :D
Način na koji se izvršavaju Maven naredbe je da se pod desnim klikom odabere Run As i Maven build... Naglasak tri točkice nisu moja kreativna sloboda, nego ono na što trebate kliknuti. Jer nam to daje mogućnost da utipkamo naredbu koja nam je potrebna.





Pod Goal utipkamo naredbu koju trebamo. Ovdje sada koristimo install (više o mogućim naredbama u mom prvom postu). Ako to radimo iz command promta onda bi utipkali mvn install, ali pošto to radimo u Eclipsu mvn prefix je nepotreban. Još nam samo preostaje klinuti na Run i obratite pozornost na Console tab u Eclipsu. Ono što tražimo je sljedeće:




S tim da nam mora pisati BUILD SUCCESS. I pogledajte cijeli zapis u konzoli i vidjet ćete da se odradi i svi buildovi prije installa. Još jedna važna stvar je gdje možemo naći naš novi novostali war file, a to nam piše neposredno BUILD SUCCESS. Ali uglavnom naš novi projekt će se promjeniti utoliko što će Maven stvoriti novi file pod imenom Targer u kojem će staviti novonastali war file.
Jedino što nam preostaje je naš war file staviti u webapps folder u Tomcat serveru (ili koji već server koristite) ili ako koriste npr. Jetty, onda postoji jedna zanimljiva naredba za vas. Umjesto da napište install možete dodati Jetty zavisnosti (potražite koje su to točno) u pom.xml i kod Run As -> Maven build... napišite Jetty run
Možete i koristiti deploy naredbu u kombinaciji s putanjom gdje želiti smjestiti vaš war file pa ne morate ručno uploadti war u Tomcat.

Ako želite koristiti Maven obavezno pročitajte knjigu Apache Maven 3 Cookbook. Vrlo dobro objašnjeno i napisano. Knjiga ima samo jedan tipfeler, a taj se nalazi na str.98 na ispisu xml-a koji se nalazi How it works. Ispod <plugin> taga vam fali tag: <groupid>org.apache.maven.plugins</groupid>
Mala sitnica ali bi vas mogla koštati nervoze, pošto je to poglavlje gdje kreće iz početka napraviti web aplikaciju i odmah na početku je nećete moći pokrenuti. Zadalo mi je malo problema do to nisam uočuio.

Još jedan dobar resurs za Maven a i ostale stvari za Javu je YouTube. Naročito Koushik (http://javabrains.koushik.org) odite nahttp://javabrains.koushik.org/p/maven.html i pogledajte njegove video tutorijale. Jako dobro objašnjava stvari, s tim da više radi u terminalu, a ne u Eclipsu. Ali kada ih pogledate, prelazak na Eclipse je mačji kašalj.
Toliko od mene za ovaj post

Maven - šta, kako i zašto?

Apache Maven je ... Ove tri točkice bi trebale biti nastavak definicije na hrvatskom jeziku ali pošto neku pametnu nisam našao, engleska će biti i više nego dovoljna. Uostalom netko tko ikad želi raditi bilo šta vezano uz programiranje a aktivno se ne koristi engleskim jezikom je poprilično osuđen na propast :D
Uglavnom prenosim definiciju prenesenu iz engleske verzije Wikipedije:

"Maven is a buil automation and softwere comprehension tool..."
Detaljniji opis se može naći ovdje: http://en.wikipedia.org/wiki/Apache_Maven

Zavisno od autora do autora, članka do članka, knjige do knjige postoji varijacija o broju dijelova "lifecyle" kod razvoja s Maven-om. Vodeći se knjigom Apache Maven 3 Cookbook od Pack Publishinga koju obavezno svakom preporučujem! Knjiga u svojih 200+ stranica objašnjava sve što će vam ikad biti potrebno znati o radu s Maven-om. Uglavnom default lifecycle prema toj knjizi:

  • Validate - validates that all project information is available and correct
  • Compile - compiles the source code
  • Test - runs unit tests within a suitable framework
  • Package - packages the compiled code in its distribution format
  • Integration-test - processes the package in the integration-test enviroment
  • Verify - runs checks to verify that the package is valid
  • Install - installs the package in the local repository
  • Deploy - installs the final package in a remote repository
Ono što obavezno treba imati na umu je da kada izvodimo bilo koju fazu builda, sve faze koje se nalaze prije nje će također biti izvršene. Tako npr. ako odaberemo mvn package - prije package biti će izvršeno validate, compile, test i tek onda package. To je ujedini i jedna od osnovih prednosti Mavena. Ako radite aplikaciju i prije deploya naravno treba provjeriti dali sa zadnjim promjenama nije nešto poremećeno, odaberemo mvn deploy i Maven nam izvrši sve build faze, što znači i naše testove, pa ne moramo to zasebno raditi.
Koliko god Eclipse IDE bio dobar on to ne može! Ali zato postoji inegracija Mavena u Eclipse (ali o tome malo kasnije).
Ovo je nešto ukratko što je potrebno znati prije nego se krene, ali ako niste došli ovdje s točnim znanjem šta je Maven točno, vjerovatno vam nije još sve jasno. Ali kada osoba odradi prvi primjer sve će mu biti jasno, a da bi to mogli napraviti, potrebno ga je instalirati.

Postupak instalacije:

  1.  http://maven.apache.org/download.html sa ovog linka skine se zip file i odapkira se negdje na hardu (u mom primjeru D:\Java\apache-maven-3.0.3)
  2. Još nam preostaje jedna stvar prije nego počnemo raditi, a to je postavljanje sistemskih varijabli za maven. Ja koristim Windows 7, postupak za Linux je malo drugačiji i radi se isključivo iz terminala, vrlo lagano i provjereno s moje strane u Ubuntu. Jedina stvar koju trebate znati je gdje se odzipali maven ( u mom slučaju home/zoki/java/apache-maven-3.0.3). Otvorite Shell i utipkajte sljedeće: export M2_HOME=/home/zoki//java/apache-maven-3.0.3 te stisnite enter, zatim utipkajte sljedeće export PATH=${PATH}:${M2_HOME}/bin
  3. Ide se na Start, te lijevi klik na MyComputer pa Properties -> Advanced System Settings
  4. Nakon toga u Advance tabu se klikne na Enviroment Variables
  5. I sada "najteži dio" - Pod System variables kliknite na New i unesite sljedeće: Pod Variable name: MAVEN_HOME , a pod Variable value: D:\Java\apache-maven-3.0.3 (lokacija gdje ste odzipali)
  6. Pod istim System variable nađite varijablu Path te dodajte %MAVEN_HOME%\bin . Varijeble odvajate s ;
  7. Treba imati na umu da bi Maven radio da treba imati i definiranu varijablu JAVA_HOME (ali to ću pretpostaviti da imate)
  8. Nisam radio screen shotove ali ako imate poteškoća progledajte ovo: http://www.mkyong.com/maven/how-to-install-maven-in-windows/
Pošto je sve instalirano, potrebno je provjeriti dali je sve ispravno instalirano. Pokrenite Command Promt i utipkajte sljedeće (nije bitno u kojem se folderu nalazite):  mvn --version
Ako je sve instalirano dobit ćete nešto slično ovome kao rezultat:

C:\>mvn --version
Apache Maven 3.0.3 (r1075438; 2011-02-28 18:31:09+0100)
Maven home: D:\Java\apache-maven-3.0.3\bin\..
Java version: 1.7.0_02, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.7.0_02\jre
Default locale: en_US, platform encoding: Cp1250
OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"

Ako niste dobili to, to znači da niste dobro napravili sistemske varijable.
Pošto ovo pišem na laptopu na kojem nemam nikakvog programa za obradu sliku (za sada) toliko od mene za ovaj post.Sljedeće što treba napraviti je zapravo i napraviti web projekt pomoću mavena ali to u sljedećem postu