Вы находитесь на странице: 1из 49

Java razvojna okolina

MAVEN & co

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

• Izuzetni Java developeri?

• Vrhunske arhitekte?

• Efikasan QA tim?
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!
Agenda
• Ukratko o strukturi i arhitekturi projekta X

• X u build okruţenju 1

• X u build okruţenju 2

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

– Subversion (SVN)
– Apache Maven 2
– Artifactory
– Apache Continuum
– Jabber
Agenda
• Kako to izgleda praktično
– Maven koncepti
– X (JEE aplikacija)
– Y (GUI standalone aplikacija)
– AutoZoki (Web aplikacija)
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).
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?
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.


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!


X u build okruţenju 1
SadaI tosvitraje…
imaju Sve
različite
dok projekte.
neki developer
Da li ne
moţete
počne da dazavisi
kaţeteodgde koda
sekoji
nalazi
piše drugi
Lokalni
tekuća razvoj
developer!
aktuelna i
Tada ručno
verzija
počinje
projekta?
razmena...
testiranje...

Koji projekat
U sred ovoga, ćete mu
pojavljuje
datisedanovi
moţe da krene
developer koji
Developeri nastavljaju da
treba
dada se uključimenjaju
radi? u lokalne kopije.
razvoj. Projekti se sve više razlikuju.
U tom trenutku (dan pred release
Ali bliţi se trenutak kada je
ili na dan release-a) se pojavljuje
mračni guru čiji je zadatak potrebno
da integrisati lokalne
obavi magičan proces integracije,
kopije i spremiti novi release.
da izvrši deploy aplikacije na
Posle mnogoplatoformu,
development vremena i da uz SVE
dosta
sreće,
testira dobija
i ako svese radi
izlaz(a
koji
uvekje spreman
nešto
nezaradi, posle čega
produkciju. Guruseodlazi
procesu
Skadarliju da seponavlja,
integracije izleči vitaminom
posle B...
ispravke), modifikuje aplikaciju i
spremi za produkciono okruţenje.
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.
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.
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).
Problemi
• Nepostojanje automatskih unit testova.

• Nepostojanje izveštaja o projektu.

• Projekti dupliraju lib foldere i oteţan je menadţment


zavisnosti (tranzicija).
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.


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).

• ...
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.
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.
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.


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...
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.
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.
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.
Apache Maven 2 - Cilj
• Mavenov primarni cilj je da omogući developeru da
shvati kompletno stanje razvojne delatnosti u što kraćem
vremenskom periodu.
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


Apache Maven 2 - Cilj
• Obezbediti jednostavan build proces.
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.
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.
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.
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.
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.
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.


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.
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.
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.
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.
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.
Artifactory
• Maven artifakt

• Maven koordinatni sistem

• Repozitorijum
– Local
– Remote
– Inhouse

• Menadţeri repozitorijuma
Apache Continuum
• Kontinualna integracija (CI serveri)
Jabber
• IM rešenje
Celokupna slika
Developeri
AkoAko mvn
ganenema,
postoji
checkout-uju
Kada Mavenu
eclipse:eclipse,
kontaktira se
u inhouse,
projekat
zatreba
test, code, i
artifakt,
refactor,
inhouse će
inhouse
tako
local prvo seupdate,
dobijaju
build,
kontaktirati
commit…
proverava
lokalnu
remotelokalni
repozitorijum
Sada
kopijuse zna
gde je
proces –
CIprojekat IM
na glavnoj
Dizajnira
Importuje
liniji razvoja!
Maven
projekat na
strukturu
SVN
projekta

I konfiguriše CI Continuum

da osluškuje taj
projekat
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


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


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!


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 practicies
strukture

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

• Potrebno je još mnogo toga uraditi


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...)
HVALA NA PAŢNJI

Вам также может понравиться