maven & co

49
MAVEN & co Java razvojna okolina Vanja Petreski

Upload: trinhkien

Post on 05-Feb-2017

253 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: MAVEN & co

MAVEN & co

Java razvojna okolina

Vanja Petreski

Page 2: MAVEN & co

Uvod

• Šta je potrebno da bi se uspešno izveo veliki Java projekat?

• Izuzetni Java developeri?

• Vrhunske arhitekte?

• Efikasan QA tim?

Page 3: MAVEN & co

Uvod

• Odgovor je:

• Sve to + MOĆNA INFRASTRUKTURA koja će da poveţe projekat, timove, ljude u jednu celinu čiji je jedini cilj da se brzo, efikasno, udobno, kvalitetno i sa što manjim troškovima izvede Java projekat!

Page 4: MAVEN & co

Agenda

• Ukratko o strukturi i arhitekturi projekta X

• X u build okruţenju 1

• X u build okruţenju 2

• Problemi

Page 5: MAVEN & co

Agenda

• Rešenje (X u build okruţenju 3)

– Subversion (SVN)

– Apache Maven 2

– Artifactory

– Apache Continuum

– Jabber

Page 6: MAVEN & co

Agenda

• Kako to izgleda praktično

– Maven koncepti

– X (JEE aplikacija)

– Y (GUI standalone aplikacija)

– AutoZoki (Web aplikacija)

Page 7: MAVEN & co

Ukratko o strukturi X-a

• JEE aplikacija (ear: war, ejb jar, jar, deskriptori)

• Izvorni kod, resource-ovi (slike, properties fajlovi…), html, xml, deskriptori, xsd šeme…

• Aplikacija je distribuirana na dve mašine, što za posledicu ima da se proizvod sastoji iz dva, delom različita, delom ista (ali različito konfigurisana) ear-a (eksterni i interni sistem).

Page 8: MAVEN & co

Ukratko o strukturi X-a

• Development i produkciono okruţenje (baza, aplikacioni server, ostala specifična podešavanja)

• Kakvu podršku treba da imamo da bi se uspešno i što jednostavnije realizovala ovako kompleksna aplikacija i ispunili ovako kompleksni zahtevi?

Page 9: MAVEN & co

X u build okruţenju 1

• IDE: JDeveloper

• VCS: nijedan! (workaround: share!)

• Build alat: integrisano JDeveloper rešenje.

• Testiranje: nikakvo!

• Deployment: ručno, preko EM.

Page 10: MAVEN & co

X u build okruţenju 1

• Dependency menadţment: lib folder u korenom direktorijumu projekta.

• Integracija: ručna, naporna, stresna, nesigurna i (u najboljem slučaju) dan pred release-a u produkciju!

• Kolaboracija, komunikacija: nikakva!

Page 11: MAVEN & co

X u build okruţenju 1Lokalni razvoj i ručno

testiranje...

I to traje… Sve dok neki developer ne počne da zavisi od koda koji piše drugi

developer! Tada počinje razmena...

Sada svi imaju različite projekte. Da li moţete da kaţete gde se nalazi tekuća aktuelna verzija projekta?

U sred ovoga, pojavljuje se novi developer koji treba da se uključi u

razvoj.

Koji projekat ćete mu dati da moţe da krene

da radi?Developeri nastavljaju da menjaju lokalne kopije.

Projekti se sve više razlikuju. Ali bliţi se trenutak kada je potrebno integrisati lokalne

kopije i spremiti novi release.

U tom trenutku (dan pred release ili na dan release-a) se pojavljuje

mračni guru čiji je zadatak da obavi magičan proces integracije,

da izvrši deploy aplikacije na development platoformu, da SVE testira i ako sve radi (a uvek nešto

ne radi, posle čega se proces integracije ponavlja, posle

ispravke), modifikuje aplikaciju i spremi za produkciono okruţenje.

Posle mnogo vremena i uz dosta sreće, dobija se izlaz koji je spreman

za produkciju. Guru odlazi u Skadarliju da se izleči vitaminom B...

Page 12: MAVEN & co

X u build okruţenju 2

• S obzirom da se projekat uvećao, Jdeveloper je sve teţe radio build i pucao.

• Integrisano build okruţenje je zamenjeno Apache Ant-om koji je eliminisao ovaj problem.

Page 13: MAVEN & co

X u build okruţenju 2

• Doduše, upotreba Ant-a je bila na jako primitivnom nivou i bazirala se na automaskoj generaciji Ant build skripti i njihovoj blagoj modifikaciji.

• Svi ostali problemi su ostali.

• Postojao je u pokušaj upotrebe CVS-a, ali je jednom prilikom izgubljeno dosta toga, pa se od CVS-a odustalo.

Page 14: MAVEN & co

Problemi

• Developeri su osuđeni na JDeveloper, iako je on moţda neophodan u 2% slučaja.

• Nepostojanje version control sistema.

• Nepostojanje automatskog build-a (automatsko generisanje proizvoda, bez ikakve intervencije čoveka).

Page 15: MAVEN & co

Problemi

• Nepostojanje automatskih unit testova.

• Nepostojanje izveštaja o projektu.

• Projekti dupliraju lib foldere i oteţan je menadţment zavisnosti (tranzicija).

Page 16: MAVEN & co

Problemi

• Deployment na aplikacioni server je ručan, spor i podloţan greškama.

• Razvoj je spor, mučan i podloţan greškama.

• Ne postoji nikakva automatizacija, sve se radi ručno!

• Nepostojanje kontinualne integracije.

Page 17: MAVEN & co

Problemi

• Nikad se ne zna u kakvom stanju je projekat i šta je zapravo projekat.

• Mušterije su nezadovoljne.

• Refaktoring je nemoguć, jer uvek generiše greške koje pre nisu postojale (nepostojanje regresionih testova).

• ...

Page 18: MAVEN & co

Rešenje (X u build okruţenju 3)

• Rešenje je u korišćenju best of breed metodologija i tehnologija u implementaciji razvojne i prateće infrastrukture.

• Tehnologije koje ćete uskoro videti predstavljaju defacto standarde u svetu.

• Jako mali broj firmi u Srbiji ima ovakvu modernu i kompletnu infrastrukturu.

Page 19: MAVEN & co

Rešenje (X u build okruţenju 3)

• U svetu postoji rola u IT-u koja se zove build engineer i čiji je posao upravo problematika kojom se sada bavimo!

• Nadalje ćemo se upoznati sa pojedinačnim tehnologijama, a zatim videti celokupnu sliku.

Page 20: MAVEN & co

Subversion (SVN)

• Version control sistem koji omogućava korisnicima da prate promene nad bilo kojim tipom elektronskih podataka, tipično izvornog koda, web stranica i slično putem koncepta repozitorijuma.

• Popularna alternativa i kvalitetniji naslednik CVS-a.

Page 21: MAVEN & co

Subversion (SVN)

• Mogućnosti su značajno unapređene u odnosu na CVS i nećemo ih sve nabrajati ovde. Samo ćemo pomenute neke najznačanije.

• Komitovanje je atomsko, potpuno verzionisanje, integracija sa Apache HTTPD preko WebDav protokola, mali saobraćaj (diff), branching i tagging su jeftine operacije...

Page 22: MAVEN & co

Apache Maven 2 - Uvod

• Maven je alat za menadţment softverskih projekata, kao i comprehension alat.

• Baziran na konceptu projektno objektnog modela (POM), Maven moţe da menadţuje projektne build-ove, reporting i dokumentaciju iz centralnog izvora informacija.

Page 23: MAVEN & co

Apache Maven 2 - Uvod

• Maven, Jevrejska reč koja znači akumulator znanja ili shvatanje, je originalno startovan kao pokušaj da se uprosti build proces u Apache Jakarta Turbine projektu.

• Postojalo je nekoliko projekata od kojih je svaki imao svoje Ant skripte koje su se sve razlikovale i JAR-ove koji su bili checkout-ovani na CVS.

• Apache je ţeleo standardan način za build-ovanje projekata, čistu definiciju od čega se projekat sastoji, lak način za objavljivanje projektnih informacija i način da se dele JAR-ovi između više projekata.

Page 24: MAVEN & co

Apache Maven 2 - Uvod

• Rezultat je alat koji se moţe koristiti za build-ovanje i menadţovanje bilo kakvih Java-baziranih projekata.

• Napravljeno je nešto što će olakšati svakodnevni rad Java developera i generalno pomoći poimanje bilo kog Java-baziranog projekta.

Page 25: MAVEN & co

Apache Maven 2 - Cilj

• Mavenov primarni cilj je da omogući developeru da shvati kompletno stanje razvojne delatnosti u što kraćem vremenskom periodu.

Page 26: MAVEN & co

Apache Maven 2 - Cilj

• Da bi ispunio ovaj cilj, postoji nekoliko oblasti interesovanja sa kojima Maven pokušava da se izbori:

– Obezbediti jednostavan build proces

– Obezbediti uniforman build sistem

– Obezbediti kvalitetne informacije o projektu

– Obezbediti vodič za best practices razvoj

– Dozvoliti transparentnu migraciju ka novim mogućnostima

Page 27: MAVEN & co

Apache Maven 2 - Cilj

• Obezbediti jednostavan build proces.

Page 28: MAVEN & co

Apache Maven 2 - Cilj

• Obezbediti uniforman build sistem.

– Maven omogućava da se projekat build-uje koristeći svoj projektno objektni model (POM) i set plugin-ova koji su deljeni između svih projekata koji koriste Maven, obezbeđujući uniforman build sistem.

– Kada se jednom familijarizujete kako se jedan Maven projekat bilduje, automatski znate kako se svi Maven projekti bilduju što neverovatno smanjuje količinu utrošenog vremena kada pokušavate da se krećete kroz više projekata.

Page 29: MAVEN & co

Apache Maven 2 - Cilj

• Obezbediti kvalitetne informacije o projektu.

– Maven nudi gomilu korisnih projektnih informacija koje su delom generisane iz POM-a projekata, a delom iz sors koda projekta.

– Na primer, Maven moţe da obezbedi: Change log dokument kreiran direktno sa SVN-a, cross referencirani sors, mailing liste, liste zavisnosti, unit test izveštaje uključujući pokrivenost.

Page 30: MAVEN & co

Apache Maven 2 - Cilj

• Obezbediti vodič za best practices razvoj.

– Maven teţi da iskoristi trenutne principe best practices razvoja, i omogućava da se projekat lako vodi u tom pravcu.

– Na primer, specifikacija, izvršavanje i reporting unit testova je deo normalnog build ciklusa Mavena. Trenutno najbolja praksa je korišćena: čuvanje test sors koda i odvojenom, ali paralelnom sors stablu, korišćenje test case naming konvencija za lociranje i izvršavanje testova, test case-ovi imaju svoje setup okruţenje i ne oslanjaju se na modifikaciju build-a za pripremu testova.

Page 31: MAVEN & co

Apache Maven 2 - Cilj

• Obezbediti vodič za best practices razvoj.

– Maven takođe teţi da asistira u projektnom workflow-u kao što je release management i issue tracking.

– Maven sugeriše kako da dizajnirate layout projektne folder strukture tako da kada je jednom naučite, lako moţete da se krećete kroz druge koji koriste Maven i iste default-e.

Page 32: MAVEN & co

Apache Maven 2 - Cilj

• Dozvoliti transparentnu migraciju ka novim mogućnostima.

– Maven omogućava lak način Maven klijentima da update-uju svoje instalacije kako bi mogli da iskoriste sve novine koje su napravljen u samom Mavenu.

– Instalacija novih ili update-ovanih plugin-ova od third parties ili samog Mavena je iz ovog razloga trivijalna.

Page 33: MAVEN & co

Maven 2 – Spisak mogućnosti

• Jednostavan setup projekta koji prati najbolje prakse –startovanje novog projekta ili modula za par sekundi.

• Konzistentno korišćenje između više projekata znači da više nema trošenja vremena na ulazak novih developera na projekat.

• Superioran menadţment zavisnosti koji uključuje automatski update, zatvaranje zavisnosti (tranzitivne zavisnosti)

• Mogućnost lakog rada na više projekata istovremeno.

Page 34: MAVEN & co

Maven 2 – Spisak mogućnosti

• Ogroman repozitorijum (koji stalno raste) biblioteka i metapodataka koji su spremni za korišćenje. Postoje dogovori sa najvećim Open Source projektima za real-time dostupnost njihovih poslednjih release-ova.

• Ekstenzibilnost sa mogućnošću lakog pisanja pluginova u Javi ili skripting jezicima.

• Instant pristup novim mogućnostima sa malo ili bez dodatne konfiguracije.

Page 35: MAVEN & co

Maven 2 – Spisak mogućnosti

• Ant taskovi za menadţment zavisnosti i deployment izvan Mavena.

• Bild baziran na modelu: Maven je sposoban za bildovanje projekata u predefinisane izlazne tipove kao što su JAR, WAR, ili distribucije bazirane na metapodacima o projektu, bez potrebe za skriptingom u većini slučajeva.

Page 36: MAVEN & co

Maven 2 – Spisak mogućnosti

• Koherentno mesto projektnih informacija: Koristeći iste metapodatke kao i za bild proces, Maven je sposoban da generiše web sajt ili PDF uključujuči dokumentaciju koju ţelite i izveštaje o stanju razvoja projekta.

Page 37: MAVEN & co

Maven 2 – Spisak mogućnosti

• Release menadţment i public-ovanje distribucije: Bez mnogo dodatne konfiguracije, Maven se integriše sa SCM sistemima kao što je, na primer, SVN i menadţuje release projekta bazirano na određenom tagu. Ovo takođe moţe da objavi na lokaciji distribucije kako bi se koristio od strane drugih projekata. Postoji mogućnost objavljivanja izlaza kao što je JAR, arhiv koji uključuje i zavisnosti i dokumentaciju ili kao source distribuciju.

Page 38: MAVEN & co

Maven 2 – Spisak mogućnosti

• Menadţment zavisnosti: Maven koristi centralni repozitorijum JAR-ova i drugih zavisnosti. Maven dolazi sa mehanizmom koji omogućava klijentima vašeg projekta da download-uju bilo koji potreban JAR potreban za bildovanje vašeg projekta sa cetralnog JAR repozitorijuma, slično kao Perlov CPAN. Ovo omogućava Maven korisnicima reupotrebu JAR-ova između projekata i podstrekuje komunikaciju između projekata kako bi omogućio razrešavanje problema sa backward kompatibilnosti.

Page 39: MAVEN & co

Artifactory

• Maven artifakt

• Maven koordinatni sistem

• Repozitorijum

– Local

– Remote

– Inhouse

• Menadţeri repozitorijuma

Page 40: MAVEN & co

Apache Continuum

• Kontinualna integracija (CI serveri)

Page 41: MAVEN & co

Jabber

• IM rešenje

Page 42: MAVEN & co

Celokupna slika

IM

Continuum

Dizajnira Maven

strukturu projekta

Importuje projekat na

SVN

Sada se zna gde je

projekat –na glavnoj

liniji razvoja!

Developeri checkout-uju

projekat i tako dobijaju

lokalnu kopiju

mvn eclipse:eclipse,

test, code, refactor, local build, update,

commit…

Kada Mavenu zatreba artifakt,

prvo se proverava lokalni

repozitorijum

Ako ga nema, kontaktira se

inhouse

Ako ne postoji u inhouse, inhouse će kontaktirati

remote

CI proces

I konfiguriše CI da osluškuje taj

projekat

Page 43: MAVEN & co

Benefiti

• Developeri mogu da biraju IDE

• Standardizovana struktura projekata, nezavisna od IDE

• Brz (jeftin) proces uključivanja developera u razvoj projekta

• Moćan VCS, branching, tagging

Page 44: MAVEN & co

Benefiti

• Na VCS se smešta samo light-weight Maven projekat, nema biblioteka, nema projektnih fajlova

• Postojanje izuzetno moćnog automatskog builda: Maven

• Podrazumevani automatski unit testovi

• Izuzetno moćan reporting o projektu

Page 45: MAVEN & co

Benefiti

• Centralizacija biblioteka u repozitorijumu, nema dupliranja lib foldera

• Extremno moćan dependency management, tranzitivne zavisnosti...

• Razvoj je brz, jasan i minimalno podloţan greškama koje se brzo detektuju

• Postojanje kontinualne integracije!

Page 46: MAVEN & co

Benefiti

• Projekat je uvek u zdravom stanju na glavnoj liniji razvoja

• Svako moţe u bilo kom trenutku na virgin mašini krenuti u razvoj

• Refaktoring je moguć, poţeljan i suguran, zbog postojanja regresionih testova i same best practiciesstrukture

• ...

Page 47: MAVEN & co

Zaključak

• Imamo moćnu infrastrukturu, ali to je tek početak

• Potrebno je još mnogo toga uraditi

Page 48: MAVEN & co

Zaključak

• Uvesti jednu od best practicies SVN politika branhinga, tagginga...

• Uvesti moćan release menagement

• Uvesti moćan issue tracking management

• Realizovati interni Maven projekat (Ekstenzija Mavena za vaše potrebe: archetype, plugins...)

Page 49: MAVEN & co

HVALA NA PAŢNJI