12 mai, 2009

Introducere în Apache Maven 2, Partea 1 - Ce este Maven?

Apache Maven Logo Acesta este primul articol dintr-o serie dedicată Apache Maven 2. Menirea acestora este de a face o introducere în privinţa acestui tool open source (instrument cu codul sursă deschis) care este pe larg utilizat atît de majoritatea proiectelor Java Open Source, cît şi de celelalte. Vreau să menţionez că se va vorbi doar despre Apache Maven 2, şi chiar dacă în context cifra 2 nu este specificată, se are în vedere anume Maven 2. Versiunea Maven 1 nu este în scopul acestei introduceri.

Deci, ce este Maven? Cea mai mare parte a utilizatorilor Maven vor spune că Maven este un instrument pentru build, în timp ce definiţia de pe pagina oficială a proiectului Apache Maven http://maven.apache.org spune că Maven este un instrument pentru management al proiectelor. Deci, care este diferenţa? Un instrument pentru build se axează în principal pe preprocesare, compilare, ambalare (packaging), testare şi distribuţie. Un instrument pentru management, cum ar fi Maven, în plus faţă de capacităţile de build pe care le are, şi care sunt cu mult mai simple şi uşoare în folosire, mai prevede de asemenea şi un ciclu de viaţă al proiectului, un sistem de management al dependenţelor, poate rula rapoarte, genera o pagină web a proiectului, facilitează comunicarea între membrii echipei de lucru prin oferirea unei interfeţe comune, şi multe alte facilităţi.

Mai jos sînt enumerate principiile de bază pe care le prevede Maven: [Click mai jos pentru a citi articolul în întregime]

  • Convenţia în favoarea Configuraţiei (Convention over Configuration) - Convenţia în favoarea Configuraţiei este un concept foarte simplu. Sistemele, bibliotecile şi framework-urile trebuie să definească valori implicite rezonabile. Fără a necesita configurare inutilă, sistemele ar trebui simplu să lucreze. Maven include acest concept prin furnizarea unor setări implicite pentru proiecte. Fără nici o personalizare şi configurare, codul sursă se presupune a fi în: src/main/java şi a resurselor în: src/main/resources. Testele se presupun a fi în: src/test şi proiectul se asumă să producă un fişier JAR. Maven presupune că se doreşte ca byte-codul să fie compilat în target/classes şi apoi să se creeze un fişier JAR repartizabil (distributable) în target. Maven aplică un set comun de convenţii pentru compilarea codului sursă, ambalarea fişierelor pentru repartizare, generarea de pagini web, şi multe alte procese. Dacă se urmează convenţiile, Maven va necesita un efort minim, aproape de zero - doar plasaţi sursele în directoarele corecte şi Maven va avea grijă de restul.
  • O interfaţă comună - Înainte ca Maven să propună o interfaţă unică pentru a face build la produsele software, fiecare proiect avea sistemul său propriu de build. Fiecare developer care dorea să facă build la proiect trebuia să se întrebe un şir de întrebări. Ce va produce build-ul? De ce biblioteci şi librării am nevoie? De unde să le descarc? Unde trebuie să le pun? Ce comandă sau goal (scop) trebuie să rulez? Developerii aveau nevoie de ceva timp ca să înveţe cum să facă build la un proiect sau altul. În prezent însă, atunci cînd vedem că un proiect foloseşte Maven, putem presupune că vom putea fară mari probleme să descarcăm sursele şi să-i facem build cu mvn install.
  • Abordare declarativă - Totul în Maven se face într-un mod declarativ folosind Project Object Model (POM) (modelul obiect al proiectului). Noi nu doar compilăm codul sursă, ci creăm o descriere a proiectului şi atributelor acestuia, în acelaşi timp alocîndu-i proiectului un set unic de coordonate. Care este licenţa proiectului? Cine dezvoltă şi contribuie la acest proiect? Care sînt proiectele de care depinde acest proiect? Tot ce trebuie de făcut este de creat fişierul pom.xml cu descrierea proiectului şi de pus sursele în directoarele predefinite. Maven va avea grijă de restul.
  • Refolosirea logicii de build - Maven a abstractizat sarcinile comune de build în plugin-uri, care sînt menţinute centralizat şi share-uite (împărţite, împărtăşite) universal către toţi. Nucleul Maven este destul de simplu şi limitat. El nu ştie altceva decît să parse-ze (analizeze) cîteva documente XML şi să menţină cîteva cicluri de viaţă a proiectului şi cîteva plugin-uri. Maven a fost creat astfel încît să delege marea responsabilitate către un set de plugin-uri Maven. Cea mai mare parte a acţiunilor în Maven se întâmplă în plugin-uri, care se ocupă de lucruri ca compilarea codului sursă, ambalarea bytecode-ului, publicarea paginilor web, precum şi orice altă activitate de care este nevoie într-un build.

Deci, pentru a răspunde la întrebarea iniţială: Maven este multe lucruri pentru multe persoane. Este un set de standarde şi o abordare specifică în dezvoltarea proiectelor software. Maven este un instrument foarte capabil, care poate fi în acelaşi timp simplu sau complex, în dependenţă de ce este nevoie. Din acest motiv, de cele mai multe ori există mai multe moduri pentru a realiza aceeaşi sarcină.

Aici încheiem acest articol. În următorul post va fi descris cum se poate de instalat Apache Maven.

Notă: Imaginea de la începutul articolului a fost luată de pe http://commons.wikimedia.org/wiki/File:Maven_logo.gif şi este licenţiată sub licenţa Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0.


Trimiteţi un comentariu

  Blogger template adapted from The Professional Template by Ourblogtemplates.com 2008

Header image adapted from Free Web Page Headers