<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10romanianfull.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C08MQHo4fSp7ImA9WxNUGE8.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576</id><updated>2009-11-10T04:58:01.435+02:00</updated><title>Învăţăm Împreună</title><subtitle type="html">Articole, analize, prezentări şi păreri personale despre tehnologiile informaţionale, programare, framework-uri, instrumente şi lumea IT în general.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://azagorneanu.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><geo:lat>34.683682</geo:lat><geo:long>33.045207</geo:long><link rel="license" type="text/html" href="http://creativecommons.org/licenses/by-nc-sa/3.0/" /><logo>http://creativecommons.org/images/public/somerights20.gif</logo><link rel="self" href="http://feeds.feedburner.com/azagorneanu" type="application/atom+xml" /><feedburner:emailServiceId>azagorneanu</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/azagorneanu" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fazagorneanu" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;DEAAQX8-eSp7ImA9WxJQF00.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-4282731505055328449</id><published>2009-05-30T20:47:00.001+03:00</published><updated>2009-05-30T21:05:40.151+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-30T21:05:40.151+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Introducere în Apache Maven 2, Partea 5 - Plugin-urile şi goal-urile Maven</title><content type="html">&lt;p&gt;Nucleul Maven este foarte puţin implicat în sarcinile legate de build-ul proiectului dvs. Singur, Maven nu ştie cum să compileze codul dvs. sau cum să creeze un fişier JAR. Maven deleagă tot acest lucru către plugin-urile Maven, cum ar fi plugin-ul Compiler pentru compilare, plugin-ul Jar pentru crearea fişierelor Jar, etc. Aceste plugin-uri sînt descărcate din repozitoriul central Maven la prima necesitate. Atunci cînd descărcaţi Maven, dvs. descărcaţi doar nucleul Maven, care constă dintr-un shell care ştie doar să analizeze comenzile din linia de comandă, să gestioneze classpath-ul, să analizeze fişierul POM şi să descarce plugin-uri Maven atunci cînd este necesar. Prin păstrarea plugin-ului Compiler separat de nucleul Maven şi asigurarea unui mecanism de actualizare, Maven face mai uşor pentru utilizatori de a avea acces la cele mai noi opţiuni în compilator. În Maven, noi nu definim sarcina de compilare într-un fişier de build, în schimb folosim plugin-ul Compiler care este împărtăşit de fiecare utilizator de Maven. Dacă apare o îmbunătăţire a plugin-ului Compiler, atunci fiecare proiect care utilizează Maven imediat poate beneficia de această îmbunătăţire fără a fi nevoie de careva schimbări.
&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xeWfOij1Jjg/SiFQlP8jQ8I/AAAAAAAAC3Y/dgzUcXYffwc/s1600-h/maven-plugin-with-goals.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 319px; height: 282px;" src="http://3.bp.blogspot.com/_xeWfOij1Jjg/SiFQlP8jQ8I/AAAAAAAAC3Y/dgzUcXYffwc/s400/maven-plugin-with-goals.png" alt="Maven Plugin With Goals" id="BLOGGER_PHOTO_ID_5341639233904001986" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;
Un Plugin Maven este o colecţie de unul sau mai multe goal-uri (scop, sarcină). Un goal este o sarcină specifică, care poate fi executat ca un goal de sine stătător sau împreună cu alte goal-uri ca parte a unui build mai mare. &lt;span style="font-weight: bold;"&gt;Un goal este o unitate de lucru în Maven.&lt;/span&gt; Exemple de goal-uri includ goal-ul &lt;span style="font-family:courier new;"&gt;compile&lt;/span&gt; din plugin-ul Compiler care compilează tot codul sursă al proiectului, sau goal-ul &lt;span style="font-family:courier new;"&gt;test&lt;/span&gt; din plugin-ul Surefire care execută unit testele. Goal-urile sînt configurate cu ajutorul proprietăţilor de configurare care pot fi utilizate pentru a personaliza comportamentul acestora. &lt;span class="fullposthint"&gt;[Click mai jos pentru a citi articolul în întregime]&lt;/span&gt;
&lt;/p&gt;
&lt;span class="fullpost"&gt;&lt;p&gt;
Maven prevede de asemenea posibilitatea de a defini plugin-uri personalizate. Un plug-in personalizat poate fi scris în Java sau în orice alt limbaj, inclusiv Ant, Groovy, Ruby, beanshell. Cînd scrieţi un plug-in propriu, dvs. pur şi simplu grupaţi un set de goal-uri într-un singur artifact de plugin. Fiecare goal în Maven corespunde unui MOJO (Maven Old Java Object). De exemplu goal-ul &lt;span style="font-family:courier new;"&gt;compiler:compile&lt;/span&gt; corespunde clasei CompilerMojo în Plugin-ul Maven Compiler şi goal-ul &lt;span style="font-family:courier new;"&gt;jar:jar&lt;/span&gt; corespunde clasei JarMojo în Plugin-ul Maven Jar.
&lt;/p&gt;&lt;p&gt;
Pentru a executa un singur goal al unui plug-in Maven vom folosi sintaxa &lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn compiler:compile&lt;/span&gt;, unde &lt;span style="font-family:courier new;"&gt;compiler&lt;/span&gt; este prefixul plugin-ului şi &lt;span style="font-family:courier new;"&gt;compile&lt;/span&gt; este goal-ul. De asemenea putem transmite perechi &lt;span style="font-family:courier new;"&gt;-Dname=value&lt;/span&gt; ca argumente atunci cînd executăm un goal. Aceste argumente sînt sub forma de &lt;span style="font-family:courier new;"&gt;-D&lt;/span&gt; proprietăţi, similare cu acele opţiuni care pot fi transmise către Java Virtual Machine din linia de comandă.
&lt;/p&gt;&lt;p&gt;
Acum, să descriem mai detaliat ce înseamnă prefixul unui plugin. Deoarece fiecare plugin Maven este un artifact Maven, el ar trebui să fie referit folosind coordonatele Maven. Specificarea de fiecare dată a &lt;span style="font-family:courier new;"&gt;groupId, artifactId, version&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;goal&lt;/span&gt;-ulului în linia de comandă este greoaie. Pentru a rezolva acest lucru, Maven atribuie cîte un prefix fiecărui plugin. Acum în loc să tastaţi:
&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;
&lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile&lt;/span&gt;
&lt;/blockquote&gt;&lt;/div&gt;
puteţi folosi prefix-ul de plugin &lt;span style="font-family:courier new;"&gt;compiler&lt;/span&gt; şi transforma linia de comandă de mai sus în &lt;span style="font-family:courier new;"&gt;mvn compiler:compile&lt;/span&gt;. Cum Maven transformă &lt;span style="font-family:courier new;"&gt;compiler:compile&lt;/span&gt; în &lt;span style="font-family:courier new;"&gt;org.apache.maven.plugins:maven-compiler-plugin:2.0.2&lt;/span&gt;? Maven se uită într-un fişier în repozitoriul Maven pentru a obţine lista de plugin-uri pentru un anumit &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt;. În mod implicit, Maven este configurat să caute plugin-uri în două grupe: &lt;span style="font-family:courier new;"&gt;org.apache.maven.plugins&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;org.codehaus.mojo&lt;/span&gt;. Cînd Maven caută plugin-uri pentru un anumit &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt;, el preia un fişier XML din repozitoriul Maven care conţine metadate despre artifact-ele conţinute într-un grup. Acest fişier XML este specific pentru fiecare repozitoriu. Dvs. puteţi vedea metadatele Maven pentru grupul &lt;span style="font-family:courier new;"&gt;org.apache.maven.plugins&lt;/span&gt; în repozitoriul local Maven (&lt;span style="font-family:courier new;"&gt;&amp;lt;user_home&amp;gt;/.m2/repository&lt;/span&gt;) în fişierul &lt;span style="font-family:courier new;"&gt;org/apache/maven/plugins/maven-metadata-central.xml&lt;/span&gt;. Mai jos este arătat un fragment din fişierul &lt;span style="font-family:courier new;"&gt;maven-metadata-central.xml&lt;/span&gt; din grupul &lt;span style="font-family:courier new;"&gt;org.apache.maven.plugins&lt;/span&gt;.
&lt;pre class="brush: xml;"&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;metadata&amp;gt;
  &amp;lt;plugins&amp;gt;
    ...
    &amp;lt;plugin&amp;gt;
      &amp;lt;name&amp;gt;Maven Clean Plugin&amp;lt;/name&amp;gt;
      &amp;lt;prefix&amp;gt;clean&amp;lt;/prefix&amp;gt;
      &amp;lt;artifactId&amp;gt;maven-clean-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;/plugin&amp;gt;
    &amp;lt;plugin&amp;gt;
      &amp;lt;name&amp;gt;Maven Compiler Plugin&amp;lt;/name&amp;gt;
      &amp;lt;prefix&amp;gt;compiler&amp;lt;/prefix&amp;gt;
      &amp;lt;artifactId&amp;gt;maven-compiler-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;/plugin&amp;gt;
    &amp;lt;plugin&amp;gt;
      &amp;lt;name&amp;gt;Maven Jar Plugin&amp;lt;/name&amp;gt;
      &amp;lt;prefix&amp;gt;jar&amp;lt;/prefix&amp;gt;
      &amp;lt;artifactId&amp;gt;maven-jar-plugin&amp;lt;/artifactId&amp;gt;
    &amp;lt;/plugin&amp;gt;
    ...
  &amp;lt;/plugins&amp;gt;
&amp;lt;/metadata&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
După cum se poate vedea anume fişierul &lt;span style="font-family:courier new;"&gt;maven-metadata-central.xml&lt;/span&gt; în repozitoriul local este ceea ce face posibil ca dvs. să executaţi plugin-uri folosind doar prefixul plugin-ului.
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span style="font-size:150%;"&gt;Plugin-ul de Ajutor Maven&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
Plugin-ul de Ajutor Maven vă permite să aflaţi listă de atribute a unui plugin Maven, să afişaţi POM-ul efectiv, să vedeţi setările efective sau lista activă de profiluri Maven.
&lt;/p&gt;&lt;p&gt;
Plugin-ul de Ajutor Maven are patru goal-uri. Următoarele comenzi oferă cîteva informaţii generale despre cele patru goal-uri:
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;help:describe&lt;/span&gt; - descrie atributele unui plugin. Acest goal vă arată informaţii despre un plugin sau un goal al unul plugin. Cu ajutorul parametrului &lt;span style="font-family:courier new;"&gt;plugin&lt;/span&gt; puteţi specifica plugin-ul pe care doriţi să-l investigaţi. Ca valoare a acestui parametru poate fi atît prefixul plugin-ului (de exemplu &lt;span style="font-family:courier new;"&gt;compiler&lt;/span&gt; pentru &lt;span style="font-family:courier new;"&gt;maven-compiler-plugin&lt;/span&gt;) sau &lt;span style="font-family:courier new;"&gt;groupId:artifactId[:version]&lt;/span&gt; unde versiunea este opţională. De exemplu, următoarea comandă foloseşte goal-ul &lt;span style="font-family:courier new;"&gt;describe&lt;/span&gt; al plugin-ului de Ajutor pentru a afişa informaţii despre plugin-ul Maven Compiler:
&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;
&lt;span style="font-weight: bold;font-family:courier new;"&gt;mvn help:describe -Dplugin=compiler&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-family:courier new;"&gt;...&lt;br/&gt;
[INFO] [help:describe]&lt;br/&gt;
[INFO] org.apache.maven.plugins:maven-compiler-plugin:2.0.2&lt;br/&gt;
&lt;br/&gt;
Name: Maven Compiler Plugin&lt;br/&gt;
Description: Maven Plugins&lt;br/&gt;
Group Id: org.apache.maven.plugins&lt;br/&gt;
Artifact Id: maven-compiler-plugin&lt;br/&gt;
Version: 2.0.2&lt;br/&gt;
Goal Prefix: compiler&lt;br/&gt;
&lt;br/&gt;
This plugin has 2 goals:&lt;br/&gt;
&lt;br/&gt;
compiler:compile&lt;br/&gt;
  Description: Compiles application sources&lt;br/&gt;
  Deprecated. No reason given&lt;br/&gt;
&lt;br/&gt;
compiler:testCompile&lt;br/&gt;
  Description: Compiles application test sources&lt;br/&gt;
  Deprecated. No reason given&lt;br/&gt;
&lt;br/&gt;
For more information, run 'mvn help:describe [...] -Ddetail'
&lt;/span&gt;
&lt;/blockquote&gt;&lt;/div&gt;
Puteţi obţine acelaşi lucru utilizînd sintaxa &lt;span style="font-family:courier new;"&gt;groupId:artifactId[:version]&lt;/span&gt;
&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;
&lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin&lt;/span&gt;
&lt;/blockquote&gt;&lt;/div&gt;
Dacă doriţi ca Plugin-ul de Ajutor să afişeze lista completă a goal-urilor cu parametri, executaţi goal-ul &lt;span style="font-family:courier new;"&gt;help:describe&lt;/span&gt; cu parametrul &lt;span style="font-family:courier new;"&gt;detail&lt;/span&gt;, după cum urmează:
&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;
&lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn help:describe -Dplugin=compiler –Ddetail&lt;/span&gt;
&lt;/blockquote&gt;&lt;/div&gt;
Pentru a obţine informaţii despre un singur goal, setaţi parametrul &lt;span style="font-family:courier new;"&gt;mojo&lt;/span&gt; alături de parametrul &lt;span style="font-family:courier new;"&gt;plugin&lt;/span&gt;. Următoarea comandă afişează toată informaţia cu privire la goal-ul &lt;span style="font-family:courier new;"&gt;compile&lt;/span&gt; din plugin-ul Compiler:
&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;
&lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn help:describe -Dplugin=compiler -Dmojo=compile -Ddetail&lt;/span&gt;
&lt;/blockquote&gt;&lt;/div&gt;
&lt;br/&gt;
Celelalte trei goal-uri: &lt;span style="font-family:courier new;"&gt;active-profiles, effective-pom&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;effective-settings&lt;/span&gt; trebuie să fie rulate în directorul de bază ale unui proiect.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new; font-weight: bold;"&gt;help:active-profiles&lt;/span&gt; - afişează profilurile (proiect, utilizator, la nivel global) care sînt active pentru build.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new; font-weight: bold;"&gt;help:effective-pom&lt;/span&gt; - afişează POM-ul efectiv pentru build-ul curent luînd în consideraţie profilurile active.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new; font-weight: bold;"&gt;help:effective-settings&lt;/span&gt; - afişează setările calculate pentru acest proiect avînd în vedere orice profil de îmbunătăţire şi de moştenirea setărilor globale.
&lt;/li&gt;&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
Aici încheiem acest post. În următorul post vom vorbi despre &lt;span style="font-weight:bold;"&gt;Ciclul de viaţă Maven.&lt;/span&gt;
&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-4282731505055328449?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=depbGduToFY:qKm2BU64XrQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=depbGduToFY:qKm2BU64XrQ:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=depbGduToFY:qKm2BU64XrQ:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/depbGduToFY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/4282731505055328449/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-5.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/4282731505055328449?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/4282731505055328449?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/depbGduToFY/introducere-in-apache-maven-2-partea-5.html" title="Introducere în Apache Maven 2, Partea 5 - Plugin-urile şi goal-urile Maven" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_xeWfOij1Jjg/SiFQlP8jQ8I/AAAAAAAAC3Y/dgzUcXYffwc/s72-c/maven-plugin-with-goals.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkUMQ306fCp7ImA9WxJQEUg.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-5613169866087277674</id><published>2009-05-24T11:20:00.001+03:00</published><updated>2009-05-24T11:38:02.314+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-24T11:38:02.314+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Introducere în Apache Maven 2, Partea 4 - Dependenţele proiectelor</title><content type="html">&lt;p&gt;Posibilitatea de a localiza uşor un artifact într-un repozitoriu pe baza coordonatelor Maven, ne oferă posibilitatea de a defini dependenţe către alte artifacte în POM-ul proiectului. Dacă veţi analiza POM-ul care a fost arătat în articolul precedent &lt;a href="http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-3.html"&gt;Introducere în Apache Maven 2, Partea 3 - Project Object Model (POM)&lt;/a&gt;, în paragraful &lt;span style="font-weight: bold;"&gt;Coordonatele Maven&lt;/span&gt;, veţi vedea că există o secţiune care se ocupă de dependenţe, şi că în această secţiune se conţine o singură dependenţă către JUnit.
&lt;/p&gt;&lt;p&gt;
Maven poate gestiona atât dependenţe interne, cît şi externe. O dependenţă externă pentru un proiect Java ar putea fi o bibliotecă, cum ar fi Log4J sau Spring Framework. O dependenţă internă este reprezentată prin unul din proiectele dvs. care depinde de un alt proiect al dvs. De exemplu, un proiect cu o aplicaţie web, care depinde de un alt proiect care conţine service clasele sau logica de persistenţă.
&lt;/p&gt;&lt;p&gt;
Pentru a înţelege mai bine, mai jos sînt arătate câteva exemple de dependenţe:
&lt;pre class="brush: xml;"&gt;
&amp;lt;project&amp;gt;
  ...
  &amp;lt;dependencies&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.apache.velocity&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;velocity&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;1.6.2&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;3.8.1&amp;lt;/version&amp;gt;
      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;servlet-api&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;2.4&amp;lt;/version&amp;gt;
      &amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
  &amp;lt;/dependencies&amp;gt;
  ...
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;span class="fullposthint"&gt;[Click mai jos pentru a citi articolul în întregime]&lt;/span&gt;&lt;/p&gt;
&lt;span class="fullpost"&gt;&lt;p&gt;
Prima întrebare pe care o să vă o puneţi este: De unde am ştiut noi exact care sînt valorile pentru &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt; pentru aceste artifacte? Puteţi localiza toate artifactele Maven folosind pagina web &lt;a href="http://www.mvnrepository.com/"&gt;http://www.mvnrepository.com&lt;/a&gt;. Acest site oferă o interfaţă de căutare pentru repozitoriul Maven. Cu ajutorul lui puteţi căuta artifactele de care aveţi nevoie pentru a le adăuga ca dependenţe în proiectul dvs. Aveţi posibilitatea să căutaţi un artifact după &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt; sau chiar descriere. La căutare, o să vă fie afişat artifactul cu lista tuturor versiunilor cunoscute de repozitoriul central Maven. Făcînd click pe detaliile pentru o anumită versiune, veţi fi redirecţionat către o altă pagină care va conţine elementul &lt;span style="font-family:courier new;"&gt;&amp;lt;dependency&amp;gt;&lt;/span&gt; pe care îl puteţi copia şi insera în propriul &lt;span style="font-family:courier new;"&gt;pom.xml&lt;/span&gt;. Unele dintre aceste dependenţe sînt atât de des utilizate (de exemplu JUnit), încît le veţi memoriza foarte rapid &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt;.
&lt;/p&gt;&lt;p&gt;
După cum se vede din fragmentul de POM de mai sus, o dependenţă se declară folosind &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;version&lt;/span&gt; ale artifactului, şi &lt;span style="font-family:courier new;"&gt;scope&lt;/span&gt; (domeniul de aplicare) al acestei dependenţe.
&lt;/p&gt;&lt;p&gt;
Maven prevede diferite domenii de aplicare(scope) ale dependenţelor. Domeniul de aplicare dirijează care dependenţe sînt disponibile, şi în care classpath. Totodată el dirijează care dependenţe sînt incluse în distribuţie o dată cu aplicaţia. Să examinăm fiecare domeniu de aplicare în detaliu:
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;compile&lt;/span&gt; - este domeniul de aplicare implicit. Toate dependenţele au domeniul de aplicare &lt;span style="font-family:courier new;"&gt;compile&lt;/span&gt; în cazul în care domeniul de aplicare nu este specificat. Dependenţele cu domeniul de aplicare &lt;span style="font-family:courier new;"&gt;compile&lt;/span&gt; sînt disponibile în toate classpath-urile, de asemenea ele sînt ambalate(packaged) odată cu aplicaţia la distribuire.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;provided&lt;/span&gt; - sînt folosite atunci când aşteptaţi ca JDK, container-ul sau server-ul să vă ofere aceste dependenţe. De exemplu, dacă dezvoltaţi o aplicaţie web, veţi avea nevoie de Servlet API disponibil în classpath-ul de compilare pentru a compila un servlet, dar nu doriţi să includeţi Servlet API la ambalare în WAR, deoarece jar-ul cu Servlet API este furnizat de server-ul sau servlet container-ul dvs. Dependenţele &lt;span style="font-family:courier new;"&gt;provided&lt;/span&gt; sînt disponibile doar în classpath-ul de compilare, nu runtime. De asemenea ele nu sînt ambalate odată cu aplicaţia la distribuire.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;runtime&lt;/span&gt; - sînt necesare pentru executarea şi testare sistemului, dar nu sînt necesare pentru compilare. De exemplu, aţi putea avea nevoie de jar-ul cu JDBC API la momentul compilării şi de implementarea driver-ului JDBC numai la runtime.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;test&lt;/span&gt; - nu sînt necesare în timpul funcţionării normale a aplicaţiei şi sînt disponibile numai în perioada de compilare şi execuţie a testelor.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;system&lt;/span&gt; - este similar cu &lt;span style="font-family:courier new;"&gt;provided&lt;/span&gt; cu excepţia faptului că va trebui să oferiţi o cale explicită către fişierul jar în sistemul de fişiere local. Acest lucru este destinat pentru a permite compilarea cu folosirea bibliotecilor native. Dacă declaraţi domeniului de aplicare &lt;span style="font-family:courier new;"&gt;system&lt;/span&gt;, atunci trebuie să specificaţi de asemenea şi elementul &lt;span style="font-family:courier new;"&gt;systemPath&lt;/span&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
Pe lîngă specificarea unei versiuni fixe, puteţi de asemenea specifica o serie de versiuni care ar putea satisface o anumită dependenţă. Puteţi face acest lucru prin plasarea unui sau mai multor numere de versiuni între următoarele caractere:
&lt;/p&gt;&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;(, )&lt;/span&gt; - Cuantificatori exclusivi
&lt;/p&gt;&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;[, ]&lt;/span&gt; - Cuantificatori inclusivi
&lt;/p&gt;&lt;p&gt;
De exemplu, dacă doriţi să accesaţi orice versiune JUnit mai mare sau egală decît 3.8, dar mai mică decît 4.0, dependenţa dumneavoastră ar arăta aşa cum este arătat mai jos:
&lt;pre class="brush: xml; highlight: 4;"&gt;
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;[3.8,4.0)&amp;lt;/version&amp;gt;
  &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
Dacă doriţi să depindeţi de orice versiune de JUnit nu mai mare decît 3.8.1, atunci trebuie să specificaţi doar o limită superioară inclusiv. Versiunea înainte de, sau după virgulă nu este necesară, şi înseamnă +/- infinit.
&lt;pre class="brush: xml; highlight: 4;"&gt;
&amp;lt;dependency&amp;gt;
  &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;[,3.8.1]&amp;lt;/version&amp;gt;
  &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
&amp;lt;/dependency&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;Notă:&lt;/span&gt; Versiunea [1.2] înseamnă doar versiunea 1.2 şi nimic altceva. Când se declară o versiune normală, cum ar fi versiunea 3.8.1 de Junit, intern, aceasta este reprezentată ca: "permite orice, dar prefera 3.8.1". Acest lucru înseamnă că atunci când este detectat un conflict, Maven este autorizat să folosească algoritmi de conflict pentru a alege cea mai buna versiune. Dacă se specifică [3.8.1], aceasta înseamnă că doar 3.8.1 va fi folosit şi nimic altceva. Dacă în altă parte există o dependenţă care a specificat [3.8.2], atunci veţi obţine o eroare de conflict la build.
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span style="font-weight: bold; font-size: 150%;" &gt;Dependenţe Tranzitive&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
O dependenţă tranzitivă este o dependenţă de către o altă dependenţă. Dacă un proiect A depinde de un alt proiect B, care la rîndul său depinde de proiectul C, atunci proiectul C este considerat o dependenţă tranzitivă a proiectului A. Dacă proiectul C depinde la rîndul său de proiectul D, atunci şi proiectul D de asemenea este considerat o dependenţă tranzitivă a proiectului A.
&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_xeWfOij1Jjg/Shg3o8R8eqI/AAAAAAAAC2w/jKx3X6EuKPo/s1600-h/maven-transitive-dependencies.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 363px; height: 400px;" src="http://2.bp.blogspot.com/_xeWfOij1Jjg/Shg3o8R8eqI/AAAAAAAAC2w/jKx3X6EuKPo/s400/maven-transitive-dependencies.png" alt="Maven Transitive Dependencies" id="BLOGGER_PHOTO_ID_5339078534763412130" border="0" /&gt;&lt;/a&gt;
&lt;p&gt;
Maven poate gestiona dependenţele tranzitive şi scuti developer-ul de necesitatea de a găsi toate dependenţele necesare pentru a compila şi rula o aplicaţie. Puteţi doar să declaraţi o dependenţă de vre-un framework sau bibliotecă fără să vă faceţi griji pentru depistarea tuturor dependenţelor pe care acestea le au.
&lt;/p&gt;&lt;p&gt;
Maven realizează acest lucru prin construirea unui graf de dependenţe şi rezolvarea tuturor conflictelor şi suprapunerilor care ar putea apărea. De exemplu, dacă Maven găseşte două proiecte care depind de aceleaşi &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt;, acesta va selecta în mod automat care dependenţă să o folosească, întotdeauna favorizînd cea mai recentă versiune a dependenţei. Deşi sună convenabil, există unele cazuri în care dependenţele tranzitive pot cauza unele probleme de configurare. În astfel de scenarii, puteţi utiliza excluderea de dependenţe.
&lt;/p&gt;&lt;p&gt;
Mai jos este arătat un exemplu în care se adaugă o dependenţă de proiectul A, dar se exclude dependenţa tranzitivă de proiectul B şi se înlocuieşte cu o dependenţă de proiectul X:
&lt;pre class="brush: xml; highlight: [6, 7, 8, 9, 10, 11]"&gt;
&amp;lt;dependencies&amp;gt;
  &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;project-a&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;
    &amp;lt;exclusions&amp;gt;
      &amp;lt;exclusion&amp;gt;
        &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
        &amp;lt;artifactId&amp;gt;project-b&amp;lt;/artifactId&amp;gt;
      &amp;lt;/exclusion&amp;gt;
    &amp;lt;/exclusions&amp;gt;
  &amp;lt;/dependency&amp;gt;
  &amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;project-x&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1.0&amp;lt;/version&amp;gt;
  &amp;lt;/dependency&amp;gt;
&amp;lt;/dependencies&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
După cum puteţi observa nu există nici un semn că dependenţa de proiectul X este o înlocuire. În cazul acesta proiectul X este o bibliotecă care asigură acelaşi API ca şi proiectul B. Pentru a înlocui o dependenţă tranzitivă cu o altă dependenţă, trebui să excludeţi dependenţa tranzitivă şi să declaraţi o altă dependenţă în loc.
&lt;/p&gt;&lt;p&gt;
De menţionat, că Maven nu descărca doar fişierul JAR al dependenţei, Maven descarcă de asemenea şi fişierul POM al dependenţei. Faptul că Maven descarcă fişierele POM adăugător faţă de artifacte îi permite să suporte dependenţele tranzitive, deoarece Maven consultă POM-urile dependenţelor pentru a găsi oricare alte dependenţe tranzitive. Aceste dependenţe tranzitive sînt apoi adaugate ca dependenţe a proiectului curent.
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span style="font-weight: bold; font-size: 150%;" &gt;Dependenţe Opţionale&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
Dacă aveţi nevoie de câteva biblioteci pentru a compila proiectul dvs, dar nu doriţi ca toate bibliotecile să apară ca dependenţe tranzitive pentru proiectele care vor utiliza proiectul dvs ca dependenţă, atunci puteţi utiliza dependenţe opţionale aşa cum este arătat mai jos. De obicei aceasta situaţie poate apărea atunci cînd aplicaţia dvs suportă diferite implementări ale unui şi acelaşi API şi dvs lăsaţi utilizatorii să-şi aleagă singuri implementarea pe care o doresc.
&lt;pre class="brush: xml; highlight: [11, 17]"&gt;
&amp;lt;project&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;my-project&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
  &amp;lt;dependencies&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;org.othercompany&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;project-a&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;1.2.0&amp;lt;/version&amp;gt;
      &amp;lt;optional&amp;gt;true&amp;lt;/optional&amp;gt;
    &amp;lt;/dependency&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;net.bigcompany&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;project-b&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;2&amp;lt;/version&amp;gt;
      &amp;lt;optional&amp;gt;true&amp;lt;/optional&amp;gt;
    &amp;lt;/dependency&amp;gt;
  &amp;lt;/dependencies&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
Odată ce aţi declarat aceste dependenţe ca opţionale, sînteţi obligat să le includeţi în mod explicit în cadrul proiectului care depinde de &lt;span style="font-family:courier new;"&gt;my-project&lt;/span&gt;. De exemplu, dacă a-ţi scris o aplicaţie care depinde de &lt;span style="font-family:courier new;"&gt;my-project&lt;/span&gt; şi doriţi să folosiţi &lt;span style="font-family:courier new;"&gt;project-b&lt;/span&gt; ca implementare, atunci va trebui să adăugaţi următoarea configurare pentru proiectului dvs:
&lt;pre class="brush: xml;"&gt;
&amp;lt;project&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;my-application&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
  &amp;lt;dependencies&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;my-project&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;1.0.0&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;net.bigcompany&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;project-b&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;2&amp;lt;/version&amp;gt;
    &amp;lt;/dependency&amp;gt;
  &amp;lt;/dependencies&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;
&lt;br/&gt;
&lt;p&gt;&lt;span style="font-weight: bold;font-size: 150%;" &gt;Referinţe către Proprietăţi&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
POM-ul poate include referinţe la proprietăţi precedate de semnul dolarului şi înconjurate de două acolade. Spre exemplu, priviţi la următorul POM:
&lt;pre class="brush: xml;"&gt;
&amp;lt;project&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;project-a&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;
  &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
  &amp;lt;build&amp;gt;
    &amp;lt;finalName&amp;gt;${project.groupId}-${project.artifactId}&amp;lt;/finalName&amp;gt;
  &amp;lt;/build&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
Când Maven citeşte POM-ul, el înlocuieşte referinţele la proprietăţi cu valorile acestora. În exemplul de mai sus &lt;span style="font-family:courier new;"&gt;finalName&lt;/span&gt; va fi evaluat în &lt;span style="font-family:courier new;"&gt;com.company.project-project-a&lt;/span&gt;. Aici noi am personalizat numele fişierului JAR generat prin adăugarea elementului &lt;span style="font-family:courier new;"&gt;finalName&lt;/span&gt; în configurarea de build a proiectului. Cu &lt;span style="font-family:courier new;"&gt;finalName&lt;/span&gt; egal cu &lt;span style="font-family:courier new;"&gt;com.company.project-proiect-a&lt;/span&gt;, build-ul va produce un fişier JAR în &lt;span style="font-family:courier new;"&gt;target/com.company.project-project-a.jar&lt;/span&gt;.
&lt;/p&gt;&lt;p&gt;
Maven pune la dispoziţie trei variabile implicite care pot fi folosite pentru a accesa variabilele de mediu şi sistem, informaţii din POM şi setările Maven:
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;env&lt;/span&gt; - expune variabile de mediu şi sistem care la rîndul lor sînt expuse de către sistemul de operare sau shell. De exemplu, o referinţă la &lt;span style="font-family:courier new;"&gt;${env.PATH}&lt;/span&gt; într-un POM Maven va fi înlocuită cu valoarea variabilei de mediu &lt;span style="font-family:courier new;"&gt;$PATH&lt;/span&gt; (sau &lt;span style="font-family:courier new;"&gt;%PATH%&lt;/span&gt; în Windows).
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;project&lt;/span&gt; - expune POM-ul în întregime. Puteţi utiliza punctul (.) pentru a crea calea de referinţă către valoarea unui element din POM. De exemplu, în această secţiune am folosit &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt; pentru a seta elementul &lt;span style="font-family:courier new;"&gt;finalName&lt;/span&gt;. Sintaxa pentru aceste referinţe a fost: &lt;span style="font-family:courier new;"&gt;${project.groupId}-${project.artifactId}&lt;/span&gt;.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;settings&lt;/span&gt; - expune informaţiile despre setările Maven. Puteţi utiliza punctul (.) pentru a crea calea de referinţă către valoarea unui element din fişierul &lt;span style="font-family:courier new;"&gt;settings.xml&lt;/span&gt;. De exemplu &lt;span style="font-family:courier new;"&gt;${settings.offline}&lt;/span&gt; face referinţă la valoarea din elementul &lt;span style="font-family:courier new;"&gt;offline&lt;/span&gt; în &lt;span style="font-family:courier new;"&gt;&amp;lt;user_home&amp;gt;/.m2/settings.xml&lt;/span&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
În plus faţă de cele trei variabile implicite, puteţi face referinţă la proprietăţile de sistem Java precum şi orice proprietăţi personalizate definite în POM sau într-un profil de build:
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;Proprietăţile de sistem Java&lt;/span&gt; - toate proprietăţile accesibile prin metoda &lt;span style="font-family:courier new;"&gt;getProperties()&lt;/span&gt; din &lt;span style="font-family:courier new;"&gt;java.lang.System&lt;/span&gt; sînt expuse ca POM proprietăţi. Câteva exemple de de proprietăţi sînt: &lt;span style="font-family:courier new;"&gt;${user.name}, ${user.home}, ${java.home}, ${os.name}&lt;/span&gt;, etc. O listă completă a proprietăţilor de sistem Java pot fi găsite în Javadoc pentru clasa &lt;span style="font-family:courier new;"&gt;java.lang.System&lt;/span&gt;.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-family: courier new; font-weight: bold;"&gt;Proprietăţile personalizate&lt;/span&gt; - pot fi setate cu ajutorul elementului &lt;span style="font-family: courier new;"&gt;properties&lt;/span&gt; în &lt;span style="font-family: courier new;"&gt;pom.xml&lt;/span&gt; sau &lt;span style="font-family: courier new;"&gt;settings.xml&lt;/span&gt;, sau pot fi încărcate din fişiere externe. Dacă aţi stabilit o proprietate numită &lt;span style="font-family: courier new;"&gt;myproperty&lt;/span&gt; în &lt;span style="font-family: courier new;"&gt;pom.xml&lt;/span&gt;, atunci la această proprietate se poate face referinţă cu &lt;span style="font-family: courier new;"&gt;${myproperty}&lt;/span&gt;. Mai jos este arătată sintaxa pentru definirea &lt;span style="font-family: courier new;"&gt;${myproperty} = myvalue&lt;/span&gt; în POM:
&lt;pre class="brush: xml;"&gt;
&amp;lt;project&amp;gt;
  ...
  &amp;lt;properties&amp;gt;
    &amp;lt;myproperty&amp;gt;myvalue&amp;lt;/myproperty&amp;gt;
  &amp;lt;/properties&amp;gt;
  ...
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;/p&gt;&lt;p&gt;
Atît pentru astăzi. În următorul post vom descrie &lt;span style="font-weight:bold;"&gt;Plugin-urile şi Goal-urile Maven&lt;/span&gt;.
&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-5613169866087277674?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=MftcviPUwC8:QouzcgBMBn0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=MftcviPUwC8:QouzcgBMBn0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=MftcviPUwC8:QouzcgBMBn0:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/MftcviPUwC8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/5613169866087277674/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-4.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/5613169866087277674?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/5613169866087277674?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/MftcviPUwC8/introducere-in-apache-maven-2-partea-4.html" title="Introducere în Apache Maven 2, Partea 4 - Dependenţele proiectelor" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_xeWfOij1Jjg/Shg3o8R8eqI/AAAAAAAAC2w/jKx3X6EuKPo/s72-c/maven-transitive-dependencies.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEMQ307fSp7ImA9WxJRFEU.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-3034320388148076241</id><published>2009-05-16T17:00:00.002+03:00</published><updated>2009-05-16T17:38:02.305+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-16T17:38:02.305+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Introducere în Apache Maven 2, Partea 3 - Project Object Model (POM)</title><content type="html">&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Project Object Model&lt;/span&gt; (modelul obiect al proiectului) este un fişier XML, numit &lt;span style="font-family:courier new;"&gt;pom.xml&lt;/span&gt;, în care este definită structura proiectului, este configurat build-ul şi sînt definite relaţiile dintre proiecte. Un proiect Maven este caracterizat prin prezenţa fişierului &lt;span style="font-family:courier new;"&gt;pom.xml&lt;/span&gt;. Cînd Maven rulează, el consultă &lt;span style="font-family:courier new;"&gt;pom.xml&lt;/span&gt; pentru informaţii despre proiect. POM răspunde la astfel de întrebări ca: Ce fel de tip de proiect este acesta? Care este numele proiectului? Există careva personalizări pentru acest proiect?
&lt;/p&gt;&lt;p&gt;
Informaţia din POM este împărţită în 4 categorii:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Informaţia generală despre proiect&lt;/span&gt; - aceasta include numele proiectului, URL-ul proiectului, compania dezvoltatoare, lista de developeri şi colaboratori, licenţă proiectului.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Setările pentru build&lt;/span&gt; - În această secţiune se conţin toate personalizările proiectului. Se poate schimba locaţia fişierelor sursă, a testelor, se pot adăuga noi plugin-uri, se pot ataşa noi goal-uri (scopuri, obiective) ale plugin-urilor la ciclul de viaţă al proiectului, se pot personaliza parametrii pentru generarea paginii web a proiectului.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Mediul de build&lt;/span&gt; - constă din profiluri care pot fi activate pentru a fi utilizate în diferite medii (environment-uri). De exemplu, în timpul dezvoltării (development) se poate de ales de a face deploy pe un server de dezvoltare, iar în producţie de a face deploy pe un server de producţie.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Relaţiile POM-ului&lt;/span&gt; - Un proiect rareori este singur. De cele mai multe ori el depinde de alte proiecte, moşteneşte setări din POM-ul proiectului părinte, îşi defineşte propriile coordonate şi poate include şi sub-module.
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
Dacă dvs. doriţi să dezvoltaţi un proiect simplu, care produce un JAR, din sursele aflate în &lt;span style="font-family:courier new;"&gt;src/main/java&lt;/span&gt;, şi doriţi să rulaţi testele JUnit din &lt;span style="font-family:courier new;"&gt;src/test/java&lt;/span&gt;, atunci nu aveţi nevoie să personalizaţi nimic. Tot de ce aveţi nevoie în acest caz este cel mai simplu POM posibil, arătat mai jos:
&lt;pre class="brush: xml;"&gt;
&amp;lt;project&amp;gt;
    &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
    &amp;lt;groupId&amp;gt;com.company.example&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;simple-project&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
Dacă puneţi careva cod sursă în subdirectorul &lt;span style="font-family:courier new;"&gt;src/main/java&lt;/span&gt; şi rulaţi &lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn install&lt;/span&gt; atunci în directorul &lt;span style="font-family:courier new;"&gt;target&lt;/span&gt; veţi avea generat fişierul &lt;span style="font-family:courier new;"&gt;simple-project-1.jar&lt;/span&gt;. &lt;span class="fullposthint"&gt;[Click mai jos pentru a citi articolul în întregime]&lt;/span&gt;&lt;/p&gt;
&lt;span class="fullpost"&gt;&lt;p&gt;
Toate POM-urile proiectelor Maven extind acelaşi Super POM, care defineşte un set de valori şi setări implicite împărtăşite de toate proiectele. Super POM-ul este o parte din instalarea Maven, şi poate fi găsit în fişierul &lt;span style="font-family:courier new;"&gt;maven-2.1.0-uber.jar&lt;/span&gt; în &lt;span style="font-family:courier new;"&gt;${M2_HOME}/lib&lt;/span&gt;. Dacă vă uitaţi în acest fişier JAR, veţi găsi un fişier numit &lt;span style="font-family:courier new;"&gt;pom-4.0.0.xml&lt;/span&gt; în pachetul &lt;span style="font-family:courier new;"&gt;org.apache.maven.project&lt;/span&gt;.
&lt;/p&gt;&lt;p&gt;
Deoarece POM-urile pot moşteni configurarea de la alte POM-uri, întotdeauna trebuie să ne gîndim la POM din punct de vedere al asocierii Super POM-ului cu POM-ul părinte şi în final cu POM-ul proiectului propriu zis. Maven începe cu Super POM şi apoi suprascrie configurarea implicită a acestuia cu unul sau mai multe POM-uri părinte. Apoi suprascrie configurarea primită cu POM-ul proiectului propriu zis. În final se ajunge la un &lt;span style="font-weight: bold;"&gt;POM efectiv&lt;/span&gt;, care este un amestec de diverse POM-uri. Dacă doriţi să vedeţi POM-ul efectiv al proiectului atunci puteţi să rulaţi goal-ul &lt;span style="font-family:courier new;"&gt;effective-pom&lt;/span&gt;  al plugin-ului de ajutor Maven:
&lt;div style="text-align: left;"&gt;
&lt;blockquote&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;
$ mvn help:effective-pom
&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;/p&gt;&lt;p&gt;
După executarea acestei comenzi, ar trebui să vedeţi un POM mai mare, care expune pe lîngă ceea ce aţi definit dvs. explicit în POM, şi setările implicite de Maven (deoarece le va moşteni din Super POM). Plugin-urile şi goal-urile din Maven vor fi explicate în continuare într-un articol separat.&lt;/p&gt;
&lt;br/&gt;&lt;p&gt;
&lt;span style="font-weight: bold;font-size:150%;" &gt;Coordonatele Maven&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
Cînd Maven execută un goal, fiecare goal are acces la informaţia definită în POM-ul proiectului. Cînd goal-ul &lt;span style="font-family:courier new;"&gt;jar:jar&lt;/span&gt; crează un fişier JAR, el accesează POM-ul pentru a găsi care trebuie sa fie numele fişierului JAR. Cînd goal-ul &lt;span style="font-family:courier new;"&gt;compiler:compile&lt;/span&gt; compilează sursele în byte-cod, el la fel accesează POM-ul pentru a vedea dacă nu sînt careva parametri definiţi pentru goal-ul &lt;span style="font-family:courier new;"&gt;compile&lt;/span&gt;. Toate goal-urile sînt executate în contextul POM-ului. Goal-urile nu sînt altceva decît nişte acţiuni pe care noi dorim să le aplicăm asupra unui proiect, iar proiectul este definit printr-un POM. POM-ul îi dă nume proiectului, îl înzestrează cu un set unic de identificatori (coordonate) şi stabileşte relaţii între acest proiect şi alte proiecte prin intermediul dependenţelor şi părinţilor.
&lt;/p&gt;&lt;p&gt;
Coordonatele Maven definesc un set de identificatori care pot fi folosiţi pentru a identifica un proiect, o dependenţă sau un plugin într-un POM Maven. Daţi să examinăm următorul POM simplu:
&lt;pre class="brush: xml; highlight: [6,7,8,9];"&gt;
&amp;lt;project xmlns=&amp;quot;http://maven.apache.org/POM/4.0.0&amp;quot; 
         xmlns:xsi=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;
  xsi:schemaLocation=&amp;quot;http://maven.apache.org/POM/4.0.0 
                      http://maven.apache.org/maven-v4_0_0.xsd&amp;quot;&amp;gt;
  &amp;lt;modelVersion&amp;gt;4.0.0&amp;lt;/modelVersion&amp;gt;
  &amp;lt;groupId&amp;gt;com.company.project&amp;lt;/groupId&amp;gt;
  &amp;lt;artifactId&amp;gt;simple&amp;lt;/artifactId&amp;gt;
  &amp;lt;version&amp;gt;1.0-SNAPSHOT&amp;lt;/version&amp;gt;
  &amp;lt;packaging&amp;gt;jar&amp;lt;/packaging&amp;gt;
  &amp;lt;name&amp;gt;simple&amp;lt;/name&amp;gt;
  &amp;lt;url&amp;gt;http://maven.apache.org&amp;lt;/url&amp;gt;
  &amp;lt;dependencies&amp;gt;
    &amp;lt;dependency&amp;gt;
      &amp;lt;groupId&amp;gt;junit&amp;lt;/groupId&amp;gt;
      &amp;lt;artifactId&amp;gt;junit&amp;lt;/artifactId&amp;gt;
      &amp;lt;version&amp;gt;3.8.1&amp;lt;/version&amp;gt;
      &amp;lt;scope&amp;gt;test&amp;lt;/scope&amp;gt;
    &amp;lt;/dependency&amp;gt;
  &amp;lt;/dependencies&amp;gt;
&amp;lt;/project&amp;gt;
&lt;/pre&gt;
&lt;/p&gt;&lt;p&gt;
În POM-ul de mai sus am evidenţiat (rîndurile 6, 7, 8, 9) coordonatele Maven pentru acest proiect: &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;version&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;packaging&lt;/span&gt;. Aceşti identificatori combinaţi împreună, plus încă unul &lt;span style="font-family:courier new;"&gt;classifier&lt;/span&gt;, care nu este menţionat în acest POM, reprezintă coordonatele unui un proiect în Maven. La fel ca şi în oricare alt sistem de coordonate, în Maven, coordonatele reprezintă o adresă pentru un anumit punct din "spaţiu". Maven face referinţă la un proiect prin coordonatele sale în cazul în care un proiect se referă la un alt proiect, fie ca dependenţă, plugin sau o referinţă către proiectul părinte. Coordonatele Maven sînt adesea scrise utilizând un 2 puncte(:) ca delimitator în următorul format: &lt;span style="font-family:courier new;"&gt;groupId:artifactId:packaging:version&lt;/span&gt;. În exemplul de POM de mai sus, coordonatele pentru proiect sînt &lt;span style="font-family:courier new;"&gt;org.company:simple:jar:1.0-SNAPSHOT&lt;/span&gt;.
&lt;/p&gt;&lt;p&gt;
Mai jos vom examina fiecare identificator în parte:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;groupId&lt;/span&gt; - Grupul, compania, echipa, organizaţia, proiectul, sau un oricare alt grup. Convenţia pentru identificatoarele de grup este că ele încep cu numele invers al domen-ului organizaţiei care creează proiectului. De exemplu &lt;span style="font-family:courier new;"&gt;org.apache.maven&lt;/span&gt; este baza pentru toate &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt; ale artifactelor produse de proiectul Apache Maven. Identificatoarele de grup, sînt transpuse în locaţii în repozitoriul Maven, de exemplu, &lt;span style="font-family:courier new;"&gt;org.apache.maven&lt;/span&gt; poate fi găsit în &lt;span style="font-family:courier new;"&gt;/org/apache/maven&lt;/span&gt;.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;artifactId&lt;/span&gt; - este identificatorul principal al proiectului. Este un identificator unic în cadrul &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt; care reprezintă un singur proiect. Nu pot exista două proiecte cu aceleaşi &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt;. În timp ce "." (punct) este frecvent utilizat în &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt;, aici ar trebui să se evite utilizarea lui. Acest lucru poate cauza probleme la analiza numelor.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;version&lt;/span&gt; - versiunea proiectului. Proiectele care au fost puse în circulaţie deja (released), au o versiune fixă. În Maven versiunile sînt formate din următoarele părţi: versiunea majoră, versiunea minoră, versiunea incrementală şi calificativul. Într-o versiune, aceste părţi corespund următorului format:
&lt;div style="text-align: left;"&gt;
&lt;blockquote&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;
&amp;lt;major version&amp;gt;.&amp;lt;minor version&amp;gt;.&amp;lt;incremental version&amp;gt;-&amp;lt;qualifier&amp;gt;
&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;
De exemplu, versiunea &lt;span style="font-family:courier new;"&gt;"1.3.5-beta-01"&lt;/span&gt; are o versiune majoră de 1, versiunea minoră 3, versiunea incrementală 5 şi un calificativ &lt;span style="font-family:courier new;"&gt;beta-01&lt;/span&gt;. Calificativul există pentru a reprezenta release-urile: &lt;span style="font-family:courier new;"&gt;alfa&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;beta&lt;/span&gt;. Versiunile Maven pot de asemenea să conţină şi următorul şir de literali:
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;SNAPSHOT&lt;/span&gt; - ceea ce semnifică faptul că un proiect este în prezent în curs de dezvoltare activ. Există posibilitatea de a configura Maven pentru a descărca periodic cea mai recentă versiune snapshot din repozitoriu. În cazul în care o versiune conţine şirul de caractere &lt;span style="font-family:courier new;"&gt;SNAPSHOT&lt;/span&gt;, atunci Maven va înlocui acest şir cu valoarea datei şi orei convertite la UTC (Coordinated Universal Time) atunci cînd se instalează sau se pune în circulaţie acest component. De exemplu, &lt;span style="font-family:courier new;"&gt;1.4-SNAPSHOT&lt;/span&gt; se va transforma în &lt;span style="font-family:courier new;"&gt;1.4-20090501-112507-1&lt;/span&gt; dacă i-ar fi fost făcut deploy la 11:25 la 1 mai 2009 UTC.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;LATEST&lt;/span&gt; - se referă la cea mai recentă versiune snapshot sau la cea mai recentă versiune lansată (released) a unui anumit artifact din repozitoriu.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;RELEASE&lt;/span&gt; - se referă la cea mai recentă versiune care nu este snapshot a unui anumit artifact din repozitoriu.
&lt;/li&gt;&lt;/ul&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Packaging-ul (formatul de ambalare) proiectului este de asemenea o componentă importantă în sistemul de coordonate Maven, dar acesta nu face parte din sistemul unic de identificatori ale unui proiect Maven. Setul &lt;span style="font-family:courier new;"&gt;groupId:artifactId:version&lt;/span&gt; face proiectul unic; nu poate exista un proiect cu aceleaşi trei &lt;span style="font-family:courier new;"&gt;groupId&lt;/span&gt;, &lt;span style="font-family:courier new;"&gt;artifactId&lt;/span&gt;, şi &lt;span style="font-family:courier new;"&gt;version&lt;/span&gt;.
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;packaging&lt;/span&gt; - tipul proiectului, implicit este &lt;span style="font-family:courier new;"&gt;jar&lt;/span&gt;. Descrie ce format produce proiectul respectiv. Un proiect cu packaging &lt;span style="font-family:courier new;"&gt;jar&lt;/span&gt;, produce un fişier JAR. Un proiect cu packaging &lt;span style="font-family:courier new;"&gt;war&lt;/span&gt;, produce o aplicaţie web.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Şi al patrulea, mai puţin folosit identificator:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;classifier&lt;/span&gt; - se foloseşte atunci cînd este necesar pentru acelaşi proiect de a produce două artifacte separate, din motive tehnice. De exemplu, dacă se doreşte două artifacte JAR, unul compilat cu compilator Java 1.4 şi altul compilat cu compilator Java 6. În acest caz se poate utiliza calificativul pentru a produce două artifacte JAR în aceeaşi combinaţie &lt;span style="font-family:courier new;"&gt;groupId:artifactId:version&lt;/span&gt;.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;În cazul în care proiectul este instalat în repozitoriul local Maven, acesta devine imediat disponibil pe plan local pentru orice alt proiect care doreşte să-l folosească. Tot ce trebuie de făcut este de-al adăuga ca pe o dependenţă folosind setul unic de coordonate Maven.
&lt;/p&gt;
&lt;br/&gt;&lt;p&gt;
&lt;span style="font-weight: bold;font-size:150%;" &gt;Repozitoriile Maven&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
Maven vine cu o locaţie implicită a remote repozitoriului &lt;a href="http://repo1.maven.org/maven2"&gt;http://repo1.maven.org/maven2&lt;/a&gt;, care este folosită pentru a descărca plugin-urile Maven de bază şi dependenţele. Maven descarcă plugin-urile şi dependenţele din repozitoriul remote la dvs. pe computer, într-un repozitoriu local. Odată ce Maven a descărcat un artifact din repozitoriul remote, el niciodată nu va mai avea nevoie să-l descarce încă o dată, deoarece Maven se uită întotdeaună mai întîi în repozitoriul local. În Windows XP repozitoriul local este situat în &lt;span style="font-family:courier new;"&gt;C:\Documents and Settings\USERNAME\.m2\repository&lt;/span&gt;, în sistemele din familia Unix el se afla în &lt;span style="font-family:courier new;"&gt;~/.m2/repository&lt;/span&gt;.
&lt;/p&gt;&lt;p&gt;
Ce face un repozitoriu să fie un Maven repozitoriu? Un Maven repozitoriu este definit prin structura sa, un repozitoriu este o colecţie de artifacte ale proiectelor, stocate într-o structură şi un format care poate fi uşor înţeles de către Maven. Într-un repozitoriu Maven totul este stocat într-o structură de directoare, care se aseamănă foarte mult cu sistemul de coordonate Maven al unui proiect. Puteţi vedea această structură prin accesarea paginii repozitoriului central Maven &lt;a href="http://repo1.maven.org/maven2/"&gt;http://repo1.maven.org/maven2/&lt;/a&gt;. Veţi vedea că un artifact cu coordonatele &lt;span style="font-family:courier new;"&gt;org.apache.velocity:velocity:1.6.2&lt;/span&gt; este disponibil în sub-directoriul &lt;span style="font-family:courier new;"&gt;/org/apache/velocity/velocity/1.6.2/&lt;/span&gt; într-un fişier numit &lt;span style="font-family:courier new;"&gt;velocity-1.6.2.jar&lt;/span&gt;. Standardul pentru un repozitoriu Maven este de a stoca un artifact în următoarea locaţie relativ cu directorul rădăcină al repozitoriului:
&lt;div style="text-align: left;"&gt;
&lt;blockquote&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;
/&amp;lt;groupId&amp;gt;/&amp;lt;artifactId&amp;gt;/&amp;lt;version&amp;gt;/&amp;lt;artifactId&amp;gt;-&amp;lt;version&amp;gt;.&amp;lt;packaging&amp;gt;
&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;/p&gt;&lt;p&gt;
Repozitoriul Maven este atît un cache local pentru artifactele descărcate din repozitoriul remote, cît şi un mecanism care permite proiectelor de a depinde unul de celălalt. Dacă aveţi 2 proiecte, A şi B, unde proiectul B depinde de artifactele produse de proiectul A, atunci Maven va prelua artifactele proiectului A din repozitoriul local atunci cînd va face build proiectului B.
&lt;/p&gt;&lt;p&gt;
Aici încheiem acest articol. În următorul post vom vorbi despre dependenţele proiectelor în Maven.
&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-3034320388148076241?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=D45VV3HMw_8:ZSAVXbpMI-Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=D45VV3HMw_8:ZSAVXbpMI-Y:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=D45VV3HMw_8:ZSAVXbpMI-Y:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/D45VV3HMw_8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/3034320388148076241/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-3.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/3034320388148076241?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/3034320388148076241?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/D45VV3HMw_8/introducere-in-apache-maven-2-partea-3.html" title="Introducere în Apache Maven 2, Partea 3 - Project Object Model (POM)" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-3.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYGSXYzeip7ImA9WxJRFEo.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-4350612936052208730</id><published>2009-05-13T22:30:00.011+03:00</published><updated>2009-05-16T15:48:48.882+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-16T15:48:48.882+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Introducere în Apache Maven 2, Partea 2 - Instalarea Maven</title><content type="html">&lt;p&gt;În acest articol se va descrie cum de instalat Apache Maven pe computer-ul dvs. Mai jos sînt enumerate instrucţiunile care trebuiesc urmate:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Verificaţi instalarea Java&lt;/span&gt; - Încredinţaţi-vă că aveţi instalată cel puţin Java 5.  Atît Java 5 cît şi Java 6 se potrivesc, dar cel mai bine e să aveţi ultima versiune disponibilă. Pentru a verifica ce versiune de Java aveţi instalată puteţi rula următoarea comandă:
&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;
&lt;span style="font-weight: bold; font-family: courier new;"&gt;
C:\&gt;java -version&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-family:courier new;"&gt;java version "1.5.0_18"&lt;br/&gt;
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_18-b02)&lt;br/&gt;
Java HotSpot(TM) Client VM (build 1.5.0_18-b02, mixed mode, sharing)&lt;/span&gt;
&lt;/blockquote&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Descărcaţi Maven&lt;/span&gt; - Puteţi descărca Maven de pe pagina oficiala a proiectului Apache Maven &lt;a href="http://maven.apache.org/download.html"&gt;http://maven.apache.org/download.html&lt;/a&gt;. Aveţi grijă să alegeţi ultima versiune disponibilă.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Instalaţi Maven&lt;/span&gt; - După ce l-aţi descărcat, alegeţi o locaţie şi despachetaţi fişierul arhivat descărcat. Apoi veţi avea nevoie să definiţi 2 variabile de sistem: &lt;span style="font-family:courier new;"&gt;PATH&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;M2_HOME&lt;/span&gt;. Dacă lucraţi pe Windows, o puteţi face cu următoarele comenzi:
&lt;div style="text-align: left;"&gt;&lt;blockquote&gt;
&lt;span style="font-family: courier new;"&gt;
set M2_HOME=c:\apache-maven-2.1.0&lt;br/&gt;
set PATH=%PATH%;%M2_HOME%\bin
&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;
Rularea acestor comenzi în linia de comandă vă va permite să rulaţi Maven doar în sesiunea curentă, pentru a evita setarea lor de fiecare dată, le puteţi seta în Control Panel ca &lt;span style="font-style: italic;"&gt;Environment Variables&lt;/span&gt;.
&lt;br/&gt;&lt;br/&gt;
Dacă lucraţi pe un sistem de operare din familia Unix, atunci puteţi folosi următoarele comenzi:
&lt;div style="text-align: left;"&gt;
&lt;blockquote&gt;&lt;span style="font-family: courier new;"&gt;
export M2_HOME=/usr/local/apache-maven-2.1.0&lt;br/&gt;
export PATH=${M2_HOME}/bin:${PATH}
&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Testaţi instalarea&lt;/span&gt; - După ce aţi instalat Maven, îl puteţi testa rulînd &lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn -version&lt;/span&gt; din linia de comandă pentru a vedea versiunea acestuia. Dacă instalarea a fost OK, atunci va trebui să vedeţi ceva de genul acesta:
&lt;div style="text-align: left;"&gt;
&lt;blockquote&gt;&lt;span style="font-weight: bold; font-family: courier new;"&gt;
C:\&gt;mvn -version&lt;/span&gt;&lt;br/&gt;
&lt;span style="font-family: courier new;"&gt;Apache Maven 2.1.0 (r755702; 2009-03-18 21:10:27+0200)&lt;br/&gt;
Java version: 1.5.0_18&lt;br/&gt;
Java home: C:\Program Files\Java\jdk1.5.0_18\jre&lt;br/&gt;
Default locale: ro_RO, platform encoding: Cp1250&lt;br/&gt;
OS name: "windows xp" version: "5.1" arch: "x86" Family: "windows"
&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;
Dacă nu puteţi vizualiza acest mesaj sau sistemul de operare nu poate găsi comanda &lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn&lt;/span&gt; atunci ar trebui să verificaţi încă o dată dacă variabilele &lt;span style="font-family:courier new;"&gt;PATH&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;M2_HOME&lt;/span&gt; sînt setate corect. &lt;span class="fullposthint"&gt;[Click mai jos pentru a citi articolul în întregime]&lt;/span&gt;
&lt;/li&gt;&lt;span class="fullpost"&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Setarea de Proxy&lt;/span&gt; - Dacă aveţi acces direct la internet puteţi omite acest pas. Doar cei care folosesc un proxy pentru ieşirea în internet au nevoie să urmeze instrucţiunile de mai jos. Deoarece Maven are nevoie de Internet atunci cînd lucrează în modul cel mai optim, este nevoie de a-l configura pentru a şti ce proxy aveţi dvs. Pentru aceasta creaţi (sau dacă există deja modificaţi) fişierul &lt;span style="font-family:courier new;"&gt;&amp;lt;user_home&amp;gt;/.m2/settings.xml&lt;/span&gt; cu următorul conţinut:
&lt;pre class="brush: xml;"&gt;
&amp;lt;settings xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
          http://maven.apache.org/xsd/settings-1.0.0.xsd"&amp;gt;
  &amp;lt;proxies&amp;gt;
    &amp;lt;proxy&amp;gt;
      &amp;lt;id&amp;gt;myproxy&amp;lt;/id&amp;gt;
      &amp;lt;active&amp;gt;true&amp;lt;/active&amp;gt;
      &amp;lt;protocol&amp;gt;http&amp;lt;/protocol&amp;gt;
      &amp;lt;host&amp;gt;proxy.somewhere.com&amp;lt;/host&amp;gt;
      &amp;lt;port&amp;gt;8080&amp;lt;/port&amp;gt;
      &amp;lt;username&amp;gt;proxyuser&amp;lt;/username&amp;gt;
      &amp;lt;password&amp;gt;somepassword&amp;lt;/password&amp;gt;
    &amp;lt;/proxy&amp;gt;
  &amp;lt;/proxies&amp;gt;
&amp;lt;/settings&amp;gt;
&lt;/pre&gt;
Fişierul &lt;span style="font-family:courier new;"&gt;&amp;lt;user_home&amp;gt;/.m2/settings.xml&lt;/span&gt; conţine setările specifice utilizatorului respectiv pentru autentificare, repositorii (repositories) şi alte lucruri care pot modifica comportamentul Maven.
&lt;br/&gt;&lt;br/&gt;
&lt;span style="font-weight: bold;"&gt;Notă:&lt;/span&gt; Vom utiliză syntaxa &lt;span style="font-family:courier new;"&gt;&amp;lt;user_home&amp;gt;&lt;/span&gt; pentru a ne referi la directorul de pornire al utilizatorului. În sistemele de operare din familia Unix, directorul de pornire a utilizatorului este &lt;span style="font-family:courier new;"&gt;/home/USERNAME&lt;/span&gt; sau &lt;span style="font-family:courier new;"&gt;~&lt;/span&gt;. În Windows XP directorul de pornire al utilizatorului este &lt;span style="font-family:courier new;"&gt;C:\Documents and Settings\USERNAME&lt;/span&gt;. De acum înainte dvs. trebuie să interpretaţi locaţiile de genul &lt;span style="font-family:courier new;"&gt;&amp;lt;user_home&amp;gt;/.m2/settings.xml&lt;/span&gt; în dependenţă de sistemul dvs. de operare.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Ştergerea (uninstall) Maven&lt;/span&gt; - Dacă doriţi să ştergeţi Maven de pe computer-ul dvs, atunci va trebui să ştergeţi directorul unde a-ţi instalat Maven şi să eliminaţi variabilele de sistem. De asemenea va fi nevoie să ştergeţi şi directorul &lt;span style="font-family:courier new;"&gt;&amp;lt;user_home&amp;gt;/.m2&lt;/span&gt; care reprezintă repositorul local Maven.
&lt;br/&gt;&lt;br/&gt;
Aici încheiem acest articol. În următorul post vom descrie &lt;span style="font-weight: bold;"&gt;Project Object Model (POM).&lt;/span&gt;
&lt;/li&gt;&lt;/ol&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-4350612936052208730?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=d-IF6jE1mQg:jzhLRLijbzY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=d-IF6jE1mQg:jzhLRLijbzY:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=d-IF6jE1mQg:jzhLRLijbzY:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/d-IF6jE1mQg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/4350612936052208730/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-2.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/4350612936052208730?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/4350612936052208730?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/d-IF6jE1mQg/introducere-in-apache-maven-2-partea-2.html" title="Introducere în Apache Maven 2, Partea 2 - Instalarea Maven" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkcBRH87cSp7ImA9WxJRFEo.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-2565480607018636300</id><published>2009-05-12T20:38:00.001+03:00</published><updated>2009-05-16T15:47:35.109+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-16T15:47:35.109+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="build" /><category scheme="http://www.blogger.com/atom/ns#" term="apache" /><category scheme="http://www.blogger.com/atom/ns#" term="maven" /><title>Introducere în Apache Maven 2, Partea 1 - Ce este Maven?</title><content type="html">&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xeWfOij1Jjg/SghntiaO_WI/AAAAAAAAC2o/7LyuNqKQKRg/s1600-h/apache-maven-logo-resized.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 310px; height: 70px;" src="http://3.bp.blogspot.com/_xeWfOij1Jjg/SghntiaO_WI/AAAAAAAAC2o/7LyuNqKQKRg/s400/apache-maven-logo-resized.png" alt="Apache Maven Logo" id="BLOGGER_PHOTO_ID_5334627790648966498" border="0" /&gt;&lt;/a&gt;
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.
&lt;/p&gt;&lt;p&gt;
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 &lt;a href="http://maven.apache.org/"&gt;http://maven.apache.org&lt;/a&gt; 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.
&lt;/p&gt;&lt;p&gt;
Mai jos sînt enumerate principiile de bază pe care le prevede Maven:
&lt;span class="fullposthint"&gt;[Click mai jos pentru a citi articolul în întregime]&lt;/span&gt;&lt;/p&gt;
&lt;span class="fullpost"&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Convenţia în favoarea Configuraţiei (Convention over Configuration)&lt;/span&gt; - 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: &lt;span style="font-weight: bold;font-family:courier new;" &gt;src/main/java&lt;/span&gt; şi a resurselor în: &lt;span style="font-weight: bold;font-family:courier new;" &gt;src/main/resources&lt;/span&gt;. Testele se presupun a fi în: &lt;span style="font-weight: bold;font-family:courier new;" &gt;src/test&lt;/span&gt; şi proiectul se asumă să producă un fişier JAR. Maven presupune că se doreşte ca byte-codul să fie compilat în &lt;span style="font-weight: bold;font-family:courier new;" &gt;target/classes&lt;/span&gt; şi apoi să se creeze un fişier JAR repartizabil (distributable) în &lt;span style="font-weight: bold;font-family:courier new;" &gt;target&lt;/span&gt;. 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.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;O interfaţă comună&lt;/span&gt; - Î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 &lt;span style="font-weight: bold;font-family:courier new;" &gt;mvn install&lt;/span&gt;.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Abordare declarativă&lt;/span&gt; - Totul în Maven se face într-un mod declarativ folosind Project Object Model (&lt;span style="font-weight: bold;"&gt;POM&lt;/span&gt;) (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 &lt;span style="font-weight: bold;font-family:courier new;" &gt;pom.xml&lt;/span&gt; cu descrierea proiectului şi de pus sursele în directoarele predefinite. Maven va avea grijă de restul.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Refolosirea logicii de build&lt;/span&gt; - 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.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;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ă.
&lt;/p&gt;&lt;p&gt;
Aici încheiem acest articol. În următorul post va fi descris cum se poate de instalat Apache Maven.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;Notă:&lt;/span&gt; Imaginea de la începutul articolului a fost luată de pe &lt;a href="http://commons.wikimedia.org/wiki/File:Maven_logo.gif"&gt;http://commons.wikimedia.org/wiki/File:Maven_logo.gif&lt;/a&gt; şi este licenţiată sub licenţa Apache License, Version 2.0 &lt;a href="http://www.apache.org/licenses/LICENSE-2.0"&gt;http://www.apache.org/licenses/LICENSE-2.0&lt;/a&gt;.
&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-2565480607018636300?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=kT49vfFQIuM:tJC0HyUQNj0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=kT49vfFQIuM:tJC0HyUQNj0:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=kT49vfFQIuM:tJC0HyUQNj0:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/kT49vfFQIuM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/2565480607018636300/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-1.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/2565480607018636300?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/2565480607018636300?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/kT49vfFQIuM/introducere-in-apache-maven-2-partea-1.html" title="Introducere în Apache Maven 2, Partea 1 - Ce este Maven?" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_xeWfOij1Jjg/SghntiaO_WI/AAAAAAAAC2o/7LyuNqKQKRg/s72-c/apache-maven-logo-resized.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/05/introducere-in-apache-maven-2-partea-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMBQXY_cCp7ImA9WxJSGUo.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-5768096684865362190</id><published>2009-05-10T18:42:00.004+03:00</published><updated>2009-05-10T19:54:10.848+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T19:54:10.848+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><title>Cum de creat articole extensibile (expandable posts) pe Blogger</title><content type="html">&lt;p&gt;
Mai întîi o explicaţie, ce se înţelege prin articole extensibile. Acestea sunt articolele formate din 2 părţi: rezumatul articolului sau introducerea şi conţinutul propriu zis al articolului. Pe pagina principală a blog-ului, vizitatorul vede doar rezumatul articolului. Pentru a citi articolul în întregime vizitatorul poate face click pe link-ul care se afla îndată după rezumat şi atunci întregul articol va fi afişat.
&lt;/p&gt;&lt;p&gt;
Mai jos voi descrie cum se poate de făcut acest lucru pe Blogger. Ceea ce voi descrie eu de fapt este un rezumat şi o traducere în română al unui articol chiar de pe pagina de ajutor a Blogger-ului, o puteţi găsi aici &lt;a href="http://help.blogger.com/bin/answer.py?hl=en&amp;amp;answer=42215"&gt;http://help.blogger.com/bin/answer.py?hl=en&amp;amp;answer=42215&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
Mai jos sînt prezentaţi paşii ce trebuie urmaţi:
&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Încredinţaţi-vă că aveţi activate paginile de postări. Pentru aceasta mergeţi la &lt;span style="font-style: italic;"&gt;Setări -&gt; Arhivare -&gt; Activaţi paginile de postări (Settings -&gt; Archiving -&gt; Enable Post Pages)&lt;/span&gt; şi alegeţi &lt;span style="font-weight: bold;"&gt;Da&lt;/span&gt;. Nu uitaţi să salvaţi.
&lt;/li&gt;&lt;li&gt;Mergeţi la &lt;span style="font-style: italic;"&gt;Aspect -&gt; Editaţi HTML (Layout -&gt; Edit HTML)&lt;/span&gt; şi Extindeţi şabloanele control (Expand Widget Templates) (faceţi click pe check-box-ul cu acelaşi nume).&lt;/li&gt;&lt;li&gt;Căutaţi următoare linie:
&lt;span style="font-weight: bold;"&gt;&amp;lt;title&amp;gt;&amp;lt;data:blog.pageTitle/&amp;gt;&amp;lt;/title&amp;gt;&lt;/span&gt; şi îndată după ea adăugaţi următoarea secvenţă de cod:
&lt;pre class="brush: html;"&gt;
&amp;lt;style&amp;gt;
  &amp;lt;b:if cond='data:blog.pageType == "item"'&amp;gt;
    span.fullpost {display:inline;}
  &amp;lt;b:else/&amp;gt;
    span.fullpost {display:none;}
  &amp;lt;/b:if&amp;gt;
&amp;lt;/style&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Căutaţi mai apoi următoarea linie: &lt;span style="font-weight: bold;"&gt;&amp;lt;data:post.body/&amp;gt;&lt;/span&gt; şi îndată după ea adăugaţi următoarea secvenţă de cod:
&lt;pre class="brush: html;"&gt;
&amp;lt;b:if cond='data:blog.pageType != "item"'&amp;gt;
  &amp;lt;a expr:href='data:post.url'&amp;gt;Citeşte articolul în întregime&amp;lt;/a&amp;gt;
&amp;lt;/b:if&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Salvaţi şablonul.&lt;/li&gt;&lt;li&gt;Mergeţi la &lt;span style="font-style: italic;"&gt;Setări -&gt; Formatare -&gt; Şablon pentru postare (Settings -&gt; Formatting -&gt; Post Template)&lt;/span&gt; şi adăugaţi următorul lucru:
&lt;pre class="brush: html;"&gt;
Rezumatul
&amp;lt;span class="fullpost"&amp;gt;Restul conţinutului&amp;lt;/span&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Salvaţi.
&lt;/li&gt;&lt;/ol&gt;
&lt;p&gt;Acum de fiecare dată cînd veţi începe a scrie un nou post (articol), el va conţine deja acele ultime 2 linii de cod adăugate în &lt;span style="font-style: italic;"&gt;Şablonul pentru postare&lt;/span&gt;. Nu vă rămîne decît să plasaţi rezumatul şi restul conţinutului în locurile corespunzătoare. De asemenea puteţi merge şi edita articolele deja existente, lăsînd o parte din text ca introducere, iar cealaltă incluzînd-o între tag-urile &lt;span style="font-weight:bold;"&gt;&amp;lt;span class="fullpost"&amp;gt;...&amp;lt;/span&amp;gt;&lt;/span&gt;.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-5768096684865362190?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=2MAimsIvRY8:A76T5yTODZo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=2MAimsIvRY8:A76T5yTODZo:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=2MAimsIvRY8:A76T5yTODZo:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/2MAimsIvRY8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/5768096684865362190/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/05/cum-de-creat-articole-extensibile.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/5768096684865362190?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/5768096684865362190?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/2MAimsIvRY8/cum-de-creat-articole-extensibile.html" title="Cum de creat articole extensibile (expandable posts) pe Blogger" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/05/cum-de-creat-articole-extensibile.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMARHo4eip7ImA9WxJSGUw.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-6375516210848269404</id><published>2009-05-09T23:43:00.007+03:00</published><updated>2009-05-10T02:40:45.432+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-10T02:40:45.432+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><title>Articole asociate, legate, înrudite (related posts) pe Blogger</title><content type="html">&lt;p&gt;
Un nou articol nu la temă :-) Oare cînd vei începe Zagorneanu să scrii o dată despre programare? Ştiu, ştiu, va fi şi asta în curînd. Pînă atunci un scurt post despre cum de pus pe Blogger un widget (în limba noastră româna ar fi ceva de genul "o drăcărie" ;-)) care ar afişa lista articolelor care sînt asociate (legate, înrudite) cu articolul curent. O chestie foarte bună pentru cititor, atunci cînd caută careva informaţie, dar şi pentru tine, deoarece menţii mai mult timp cititorul pe site.
&lt;/p&gt;&lt;p&gt;
Mai întîi aş vrea să explic ce se înţelege prin articole asociate. În contextul nostru acestea nu sînt alt ceva decît articolele care sunt etichetate cu aceeaşi etichetă (etichetă = label). Deci pentru a putea folosi această nouă funcţionalitate articolele dvs. trebuie sa fie etichetate corespunzător.
&lt;/p&gt;&lt;p&gt;
Există 2 modalităţi de a instala această funcţionalitate pe Blogger: una foarte simplă şi alta simplă :-) Să începem cu cea foarte simplă.
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Adăugarea articolelor asociate ca widget separat.&lt;/span&gt; Aceasta înseamnă ca lista cu articolele asociate (etichetate cu aceeaşi etichetă) va fi afişată undeva într-o parte (dreapta, stînga, josul paginii) în dependenţă de design-ul paginii. Pentru aceasta accesaţi următoarea pagina &lt;a href="http://brps.appspot.com/"&gt;http://brps.appspot.com/&lt;/a&gt;, coborîţi un pic mai jos în pagină pînă la alineatul &lt;span style="font-weight: bold;"&gt;Installation&lt;/span&gt; şi face-ţi click pe butonul albastru-oranj pe care scrie &lt;span style="font-style: italic;"&gt;Add to Blogger&lt;/span&gt;. Atîta tot. Acum aranjaţi widget-ul unde doriţi în pagină şi salvaţi. Trebuie de menţionat că lista cu articolele asociate nu va apărea pe prima pagină a blog-ului dvs, în schimb, ea va fi afişată cînd veţi deschide un articol. Atunci veţi vedea lista cu articolele etichetate la fel.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Adăugarea articolelor asociate sub (dedesubt) articol.&lt;/span&gt; În acest mod lista cu articolele asociate va fi afişată sub articol, ceea ce după părerea mea e mai bine şi cade mai bine în vizorul cititorului. Pentru aceasta va fi nevoie să efectuaţi următorii paşi:
&lt;ol&gt;&lt;li&gt;Mergeţi la &lt;span style="font-style: italic;"&gt;Setări -&gt; Aspect -&gt; Editaţi HTML (Settings -&gt; Layout -&gt; Edit HTML)&lt;/span&gt; şi Extindeţi şabloanele control (Expand Widget Templates) (faceţi click pe check-box-ul cu acelaşi nume).&lt;/li&gt;&lt;li&gt;Căutaţi următoare linie:
&lt;pre class="brush: html;"&gt;
&amp;lt;div class='post-footer-line post-footer-line-3'/&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Adăugaţi o line nouă, cea evidenţiată (ultima linie din exemplu), aşa cum este arătat mai jos. Fiţi atenţi, linia noua trebuie adăugată după următorul &lt;span style="font-weight: bold;"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt; ce urmează linia de cod găsită.
&lt;pre class="brush: html; highlight: 4;"&gt;
&amp;lt;div class='post-footer-line post-footer-line-3'/&amp;gt;
...
&amp;lt;/div&amp;gt;
&amp;lt;div id='related_posts'/&amp;gt;
&lt;/pre&gt;
&lt;/li&gt;&lt;li&gt;Mergeţi la sfîrşitul şablonului şi înainte de &lt;span style="font-weight: bold;"&gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt; adăugaţi următoarele 2 rînduri aşa cum este arătat mai jos:
&lt;pre class="brush: html; highlight: [1, 2];"&gt;
&amp;lt;script src='http://www.google.com/jsapi'/&amp;gt;
&amp;lt;script src='http://brps.appspot.com/brps.js' type='text/javascript'/&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/pre&gt;
Ca şi în primul caz, lista articolelor asociate nu va fi afişată pe pagina principală a blog-ului, dar în dedesubtul fiecărui articol, atunci cînd acesta este deschis.
&lt;/li&gt;&lt;/ol&gt;
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;Pentru mai multe informaţii în privinţa personalizării (titlul, numărul de articole afişate, folosirea CSS) puteţi accesa următoarea pagină &lt;a href="http://code.google.com/p/brps/"&gt;http://code.google.com/p/brps/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;P.S. Puteţi vedea acest widget în acţiune chiar în dedesubtul acestui articol.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-6375516210848269404?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=JbSKbHXP_JA:F5Cyjzdxvtc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=JbSKbHXP_JA:F5Cyjzdxvtc:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=JbSKbHXP_JA:F5Cyjzdxvtc:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/JbSKbHXP_JA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/6375516210848269404/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/05/articole-asociate-legate-inrudite.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/6375516210848269404?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/6375516210848269404?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/JbSKbHXP_JA/articole-asociate-legate-inrudite.html" title="Articole asociate, legate, înrudite (related posts) pe Blogger" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/05/articole-asociate-legate-inrudite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGRH48eCp7ImA9WxJSF0U.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-4539527059431356565</id><published>2009-03-08T15:30:00.014+02:00</published><updated>2009-05-08T15:55:25.070+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T15:55:25.070+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><title>Cum setăm o pictogramă favorită (favicon) pe Blogger</title><content type="html">&lt;p&gt;
Cu scopul de a-mi personaliza blog-ul, a-m hotărît să-mi schimb pictograma (iconiţa, favicon-ul) blog-ului. În continuare voi descrie cum de făcut acest lucru. Deci, pentru a schimba pictograma blog-ului, dvs aveţi nevoie de parcurs următorii paşi:
&lt;/p&gt;&lt;p&gt;
1. Să vă găsiţi o pictogramă pe plac, cu mărimea 16x16 în format &lt;span style="font-family:courier new;"&gt;.png&lt;/span&gt; sau &lt;span style="font-family:courier new;"&gt;.ico&lt;/span&gt; (pictograma în format .ico trebuie să folosească gama de 256 de culori)
&lt;/p&gt;&lt;p&gt;
2. Să încărcaţi pictograma respectivă pe un site public unde fiecare are acces. De exemplu &lt;a href="http://sites.google.com/"&gt;Google Sites&lt;/a&gt;. Cum de creat un site nou pe Google Sites şi mai apoi încărcat fişiere pe el am descris în &lt;a href="http://azagorneanu.blogspot.com/2009/03/cum-instalam-si-utilizam.html"&gt;articolul precedent&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
3. Mergeţi la &lt;span style="font-style: italic;"&gt;Setări -&gt; Aspect -&gt; Editaţi HTML (Settings -&gt; Layout -&gt; Edit HTML)&lt;/span&gt; şi imediat după rîndul de mai jos
&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;title&amp;gt;&amp;lt;data:blog.pagetitle/&amp;gt;&amp;lt;/title&amp;gt;
&lt;/pre&gt;
&lt;p&gt;adăugaţi următorul lucru:&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;link href='http://adresadvs/pictogramadvs.png' rel='shortcut icon' type='image/x-icon'/&amp;gt;
&lt;/pre&gt;&lt;p&gt;
unde &lt;span style="font-weight: bold;font-family:courier new;" &gt;adresadvs&lt;/span&gt; este adresa unde a-ţi încărcat pictograma, iar &lt;span style="font-weight: bold;font-family:courier new;" &gt;pictogramadvs&lt;/span&gt; este numele pictogramei. (dacă pictograma este în format &lt;span style="font-family:courier new;"&gt;.ico&lt;/span&gt;, în adresă veţi specifica respectiv &lt;span style="font-family:courier new;"&gt;pictogramadvs.ico&lt;/span&gt;)
&lt;/p&gt;&lt;p&gt;
În final trebuie să aveţi următorul lucru:
&lt;/p&gt;
&lt;pre class="brush: html"&gt;&amp;lt;title&amp;gt;&amp;lt;data:blog.pagetitle/&amp;gt;&amp;lt;/title&amp;gt;
&amp;lt;link href='http://adresadvs/pictogramadvs.png' rel='shortcut icon' type='image/x-icon'/&amp;gt;
&lt;/pre&gt;&lt;p&gt;
4. Salvaţi şablonul blog-ului şi faceţi click pentru  a vizualiza schimbările. Pictograma specificată de dvs trebuie sa apară.
&lt;/p&gt;&lt;p&gt;
P.S. Pictograma folosită de mine a fost descărcată de pe site-ul &lt;a href="http://www.faviconsr.us/"&gt;http://www.faviconsr.us/&lt;/a&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-4539527059431356565?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=h8XgwnjRwWE:Jq_1jeuutjI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=h8XgwnjRwWE:Jq_1jeuutjI:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=h8XgwnjRwWE:Jq_1jeuutjI:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/h8XgwnjRwWE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/4539527059431356565/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/03/cum-setam-o-pictograma-favorita-favicon.html#comment-form" title="1 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/4539527059431356565?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/4539527059431356565?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/h8XgwnjRwWE/cum-setam-o-pictograma-favorita-favicon.html" title="Cum setăm o pictogramă favorită (favicon) pe Blogger" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/03/cum-setam-o-pictograma-favorita-favicon.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8CQH4_eip7ImA9WxJSGEo.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-1189124892985811180</id><published>2009-03-02T23:26:00.037+02:00</published><updated>2009-05-09T15:41:01.042+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-09T15:41:01.042+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogger" /><category scheme="http://www.blogger.com/atom/ns#" term="syntaxhighlighter" /><title>Cum instalăm şi utilizăm SyntaxHighlighter 2.0 pe Blogger</title><content type="html">&lt;p&gt;
Deoarece majoritatea articolelor publicate pe acest blog vor avea legătură cu IT(Information Technology), şi cum IT-ul fără de cod nu poate exista, am hotărît să-mi instalez pe blog un modul care va evidenţia şi colora codul sursă publicat în articole.
&lt;/p&gt;&lt;p&gt;
După o căutare pe Google am dat de &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter"&gt;SyntaxHighlighter&lt;/a&gt;, o bibliotecă scrisă în JavaScript menită să evidenţieze şi să coloreze codul sursă. De notat că SyntaxHighlighter începînd cu 1 martie 2009 este licenţiat sub licenţa &lt;a href="http://www.gnu.org/licenses/gpl-3.0.html"&gt;LGPL3&lt;/a&gt;, ceea ce ne permite să-l utilizăm liber şi gratis.
&lt;/p&gt;&lt;p&gt;
Curios este faptul că pînă la 1 martie 2009 SyntaxHighlighter era licenţiat sub licenţa &lt;a href="http://creativecommons.org/licenses/LGPL/2.1/"&gt;LGPL2.1&lt;/a&gt; dar cu o excepţie adăugată de autorul bibliotecii, prin care acesta cerea utilizatorilor care folosesc această bibliotecă pe paginile lor web sau în produsele acestora să doneze în mod obligatoriu cît îi lasă inima pentru susţinerea şi dezvoltarea de mai departe a acestui proiect. Acest lucru este complet incompatibil cu licenţa LGPL, fapt care probabil nu a fost observat de către autor. Îmbucurător este faptul că autorul s-a auto-sesizat şi acum donaţiile nu mai sunt obligatorii ci doar binevenite. Aşa că dacă utilizaţi şi vă place acest produs, susţine-ţi autorii acestei minunate biblioteci donînd cît consideraţi necesar.
&lt;/p&gt;&lt;p&gt;
În acest articol voi descrie cum de instalat şi mai apoi folosit SyntaxHighlighter 2.0 pe Blogger. De menţionat faptul ca versiunile precedente mai sunt găzduite pe &lt;a href="http://code.google.com/p/syntaxhighlighter/"&gt;Google Code&lt;/a&gt; cu toate că în prezent acesta nu mai este un proiect activ.
&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;
&lt;span style="font-weight: bold;font-size:130%;" &gt;1. De ce avem nevoie de SyntaxHighlighter.&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
Pentru a demonstra utilitatea evidenţierii şi colorării codului sursă este suficient să aducem următorul exemplu.
&lt;/p&gt;&lt;p&gt;
Aşa arată fragmentul de cod fără a utiliza SyntaxHighlighter. Fragmentul de cod este inclus între &lt;span style="font-family:courier new;"&gt;&amp;lt;pre&amp;gt;...&amp;lt;/pre&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;pre&gt;public class HelloWorld {
public static void main(String[] args) {
 System.out.println("Hello World!");

 System.out.print("Echo: ");
 for(int i = 0; i &amp;lt; 5; i++) {
     System.out.print("Hello! ");
 }
}
}
&lt;/pre&gt;&lt;p&gt;
Astfel arată fragmentul de cod cu utilizarea SyntaxHighlighter. Fragmentul de cod este inclus între &lt;span style="font-family:courier new;"&gt;&amp;lt;pre class="brush: java; highlight:[6, 7, 8]"&amp;gt;...&amp;lt;/pre&amp;gt;&lt;/span&gt; astfel specificînd limbajul şi numerele rîndurilor pe care dorim să le selectăm.
&lt;/p&gt;
&lt;pre class="brush: java; highlight:[6, 7, 8];"&gt;public class HelloWorld {
public static void main(String[] args) {
 System.out.println("Hello World!");

 System.out.print("Echo: ");
 for(int i = 0; i &amp;lt; 5; i++) {
     System.out.print("Hello! ");
 }
}
}
&lt;/pre&gt;&lt;p&gt;
Este simplu şi arată mult mai bine nu-i aşa? Pe lîngă evidenţierea şi colorarea cuvintelor cheie, numerotării rîndurilor, mai există şi posibilitatea selectării individuale a rîndurilor pentru a atrage atenţia cititorului sau pentru a face referire la ele din text. &lt;span class="fullposthint"&gt;[Click mai jos pentru a citi articolul în întregime]&lt;/span&gt;
&lt;/p&gt;
&lt;span class="fullpost"&gt;&lt;br/&gt;&lt;p&gt;
&lt;span style="font-weight: bold;font-size:130%;" &gt;2. Cum instalăm SyntaxHighlighter.&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
Pentru început este nevoie de a descărca SyntaxHighlighter de &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Download"&gt;aici&lt;/a&gt; şi de a-l încărca pe blog-ul dumneavoastră. Dar aşa cum Blogger nu oferă posibilitatea încărcării fişierelor(cu excepţia pozelor şi filmuleţelor) va trebui să-l încărcăm pe un site public unde oricine are acces.
&lt;/p&gt;&lt;p&gt;
O altă opţiune este folosirea versiunii găzduite pe site-ul SyntaxHighlighter. Mai multe detalii &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Hosting"&gt;aici&lt;/a&gt;. Dacă alegeţi această opţiune atunci puteţi trece direct la pasul următor (nr. 3), dar totuşi ar fi bine sa urmăriţi comentariile şi observaţiile ce ţin de performanţă care se vor aduce în continuare.
&lt;/p&gt;&lt;p&gt;
Pentru a găzdui SyntaxHighlighter eu am ales &lt;a href="http://sites.google.com/"&gt;Google Sites&lt;/a&gt;, unde există posibilitatea de a crea un site  gratis în doar cîteva clipe. În plus există posibilitatea de a păstra aici fişiere şi de a face referire la ele de pe blog. Spaţiul oferit de Google Sites este de 100MB.
&lt;/p&gt;&lt;p&gt;
Biblioteca SyntaxHighlighter constă din două mape &lt;span style="font-family:courier new;"&gt;scripts&lt;/span&gt; şi &lt;span style="font-family:courier new;"&gt;styles&lt;/span&gt;. Anume conţinutul lor şi trebuie încărcat. Mapa &lt;span style="font-family:courier new;"&gt;scripts&lt;/span&gt; conţine următoarele fişiere:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;clipboard.swf&lt;/span&gt; - este un fişier Flash folosit de către SyntaxHighlighter pentru a copia textul în clipboard atunci cînd utilizatorul apasă butonul &lt;span style="font-style: italic;"&gt;Copy to clipboard&lt;/span&gt; de pe toolbar. Dacă doriţi această funcţionalitate atunci acest fişier trebuie încarcat, dacă nu, atunci ignoraţi-l.
&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;shCore.js&lt;/span&gt; - este nucleul bibliotecii. Trebuie încărcat obligatoriu.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;shLegacy.js&lt;/span&gt; - este un proxy pentru fragmentele de cod publicate folosind versiunile mai vechi ale SyntaxHighlighter. Mai multe detalii &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Upgrading"&gt;aici&lt;/a&gt;. Dacă nu aţi mai folosit SyntaxHighlighter pînă acum puteţi ignora acest fişier.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;shBrush*.js&lt;/span&gt; - sunt fişiere pensule pentru fiecare limbaj susţinut de bibliotecă. Acestea din urmă conţin informaţia despre cuvintele cheie, structura şi comentariile limbajelor respective. Este nevoie de încărcat doar fişierele pentru limbajele pe care le veţi folosi pe blog-ul dvs.
&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
Mapa &lt;span style="font-family:courier new;"&gt;styles&lt;/span&gt; conţine următoarele fişiere:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;shCore.css&lt;/span&gt; - este fişierul CSS de bază. Trebuie încărcat obligatoriu.&lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;shTheme*.css&lt;/span&gt; - SyntaxHighlighter 2.0 a întrodus noţiunea de temă sau aspect. Aceasta permite schimbarea aspectului şi palitrei de culori utilizate de SyntaxHighlighter. Mai multă informaţie&lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Themes"&gt; aici&lt;/a&gt;. Este nevoie de încărcat doar fişierul cu tema pe care doriţi să o utilizaţi pe blog-ul dvs. &lt;/li&gt;&lt;li&gt;&lt;span style="font-family:courier new;"&gt;*.png&lt;/span&gt; - imaginile folosite de SyntaxHighlighter. Trebuie încărcate obligatoriu.&lt;/li&gt;&lt;/ul&gt;
&lt;blockquote&gt;&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;NOTĂ DE PERFORMANŢĂ:&lt;/span&gt; După ce vor fi încărcate pe Google Sites, şablonul blog-ului dvs va trebui modificat pentru a include toate aceste fişiere. Ca urmare, browserul dvs va trebui să descarce toate aceste fişiere, ceea ce înseamnă în jur de 20 de conexiuni adăugătoare. Cu toate că aceste fişiere sunt foarte mici, fiecare conexiune nouă este costisitoare. Sfatul meu este să combinaţi toate fişierele &lt;span style="font-family:courier new;"&gt;shBrush*.js&lt;/span&gt; în unul singur, şi să-l numiţi &lt;span style="font-family:courier new;"&gt;shBrushAll.js&lt;/span&gt;, astfel veţi reduce considerabil numărul conexiunilor necesare pe care browserul dvs va trebui sa le facă şi veţi îmbunătăţi performanţa.
&lt;/p&gt;&lt;p&gt;
Acelaşi lucru este şi cu fişierele CSS. Alegeţi tema pe care o veţi folosi pe blog-ul dvs şi combinaţi acest fişier cu &lt;span style="font-family:courier new;"&gt;shCore.css&lt;/span&gt;. De exemplu daca utilizaţi &lt;span style="font-family:courier new;"&gt;shThemeDefault.css&lt;/span&gt; atunci fişierul primit de la combinarea &lt;span style="font-family:courier new;"&gt;shCore.css&lt;/span&gt; cu &lt;span style="font-family:courier new;"&gt;shThemeDefault.css&lt;/span&gt; poate fi numit &lt;span style="font-family:courier new;"&gt;shCoreThemeDefault.css&lt;/span&gt;.
&lt;/p&gt;&lt;p&gt;
În această privinţă am făcut chiar un test, în care am măsurat timpul de încărcare al unei pagini pe Blogger care includea fiecare &lt;span style="font-family:courier new;"&gt;shBrush*.js&lt;/span&gt; în parte şi al altei pagini care includea doar &lt;span style="font-family:courier new;"&gt;shBrushAll.js&lt;/span&gt;. Iată rezultatele: 20 de secunde contra a 4 secunde. O îmbunătăţire de 5 ori. Timpul de încărcare a fost măsurat cu ajutorul serviciului &lt;a href="http://www.numion.com/Stopwatch/"&gt;Stopwatch&lt;/a&gt;. După părerea mea 20 de secunde pentru o pagină care practic nu avea nimic pe ea e prea mult.
&lt;/p&gt;&lt;p&gt;
Aşa că gîndiţi-vă bine înainte de a folosi versiunea găzduită pe site-ul SyntaxHighlighter, deoarece în acest caz veţi fi nevoit să includeţi fiecare fişier în parte, ceea ce înseamnă un timp mai mare de încărcare a paginilor dvs.
&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;
Pentru a instala SyntaxHighlighter pe Google Sites veţi avea nevoie să parcurgeţi următorii paşi:
&lt;/p&gt;&lt;p&gt;
a) Înregistraţi-vă şi creaţi un site nou. Fiţi siguri ca aţi ales opţiunea de a-l face public, adică oricine va putea accesa acest site.
&lt;/p&gt;&lt;p&gt;
b) Creaţi o pagină web nouă accesînd butonul din imagine.
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xeWfOij1Jjg/SarlbbBVmFI/AAAAAAAACo4/_cvNUdry7Wg/s1600-h/google-sites-create-new-page-button.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 50px;" src="http://3.bp.blogspot.com/_xeWfOij1Jjg/SarlbbBVmFI/AAAAAAAACo4/_cvNUdry7Wg/s400/google-sites-create-new-page-button.png" alt="" id="BLOGGER_PHOTO_ID_5308307370082146386" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
c) Alegeţi setările astfel cum este arătat în imaginea de mai jos.
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xeWfOij1Jjg/Sark1enaCnI/AAAAAAAACos/tURz7-54gfA/s1600-h/syntaxhighlighter-google-sites-create-new-web-page.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 211px;" src="http://4.bp.blogspot.com/_xeWfOij1Jjg/Sark1enaCnI/AAAAAAAACos/tURz7-54gfA/s400/syntaxhighlighter-google-sites-create-new-web-page.png" alt="" id="BLOGGER_PHOTO_ID_5308306718212098674" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
d) Creaţi o altă pagină web şi alegeţi setările astfel cum este arătat în următoarea imagine. Fiţi atenţi la alegerea locaţiei. Pagina&lt;span style="font-family:courier new;"&gt; scripts&lt;/span&gt; trebuie sa fie inclusă în &lt;span style="font-family:courier new;"&gt;syntaxhighlighter&lt;/span&gt;. Pentru a specifica locaţia folosiţi link-ul &lt;span style="font-style: italic;"&gt;Alege o altă locaţie (Choose a different location)&lt;/span&gt;
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xeWfOij1Jjg/SasAkT9E2LI/AAAAAAAACpA/FTAq04jkZpc/s1600-h/syntaxhighlighter-google-sites-create-new-file-cabinet.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 212px;" src="http://3.bp.blogspot.com/_xeWfOij1Jjg/SasAkT9E2LI/AAAAAAAACpA/FTAq04jkZpc/s400/syntaxhighlighter-google-sites-create-new-file-cabinet.png" alt="" id="BLOGGER_PHOTO_ID_5308337209617995954" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
e) Unul cîte unul, încărcaţi toate fişierele din mapa &lt;span style="font-family:courier new;"&gt;scripts&lt;/span&gt; pe noua pagină web &lt;span style="font-family:courier new;"&gt;scripts&lt;/span&gt;, folosind butonul din imagine. (Dacă aţi hotărît combinarea tuturor fişierelor &lt;span style="font-family:courier new;"&gt;shBrush*.js&lt;/span&gt; în unul singur &lt;span style="font-family:courier new;"&gt;shBrushAll.js&lt;/span&gt; atunci încărcaţi-l doar pe cel din urmă. În orice caz nu uitaţi să încărcaţi şi &lt;span style="font-family:courier new;"&gt;shCore.js&lt;/span&gt;)
&lt;/p&gt;&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;ATENŢIE:&lt;/span&gt; Google Sites nu permite încărcarea fişierelor JavaScript (extensia &lt;span style="font-family:courier new;"&gt;.js&lt;/span&gt;), din acest motiv înainte de a încarca fişierele, schimbaţi-le extensia în &lt;span style="font-family:courier new;"&gt;.txt&lt;/span&gt;
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xeWfOij1Jjg/SasCFg5HzGI/AAAAAAAACpI/qNfu7MUJ5M8/s1600-h/syntaxhighlighter-google-sites-add-file.png"&gt;&lt;img style="cursor: pointer; width: 400px; height: 153px;" src="http://3.bp.blogspot.com/_xeWfOij1Jjg/SasCFg5HzGI/AAAAAAAACpI/qNfu7MUJ5M8/s400/syntaxhighlighter-google-sites-add-file.png" alt="" id="BLOGGER_PHOTO_ID_5308338879538383970" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
f) Repetaţi paşii d) şi e) pentru mapa &lt;span style="font-family:courier new;"&gt;styles&lt;/span&gt;. Folosiţi aceleaşi setări schimbînd doar numele cu &lt;span style="font-family:courier new;"&gt;styles&lt;/span&gt;.
&lt;/p&gt;&lt;p&gt;
g) În final trebuie sa aveţi următoare ierarhie de pagini. (În această imagine este arătată doar ierarhia paginilor, fără fişierele pe care acestea le conţin)
&lt;/p&gt;
&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xeWfOij1Jjg/SasDJMGK2jI/AAAAAAAACpQ/DYsvOdNGEkM/s1600-h/syntaxhighlighter-google-sites-sitemap.png"&gt;&lt;img style="cursor: pointer; width: 208px; height: 233px;" src="http://4.bp.blogspot.com/_xeWfOij1Jjg/SasDJMGK2jI/AAAAAAAACpQ/DYsvOdNGEkM/s400/syntaxhighlighter-google-sites-sitemap.png" alt="" id="BLOGGER_PHOTO_ID_5308340042187070002" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;br/&gt;
&lt;p&gt;
&lt;span style="font-weight: bold;font-size:130%;" &gt;3. Cum configurăm SyntaxHighlighter.&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
După ce aţi încarcat toate fişierele, urmează modificarea şablonului blog-ului dvs cu scopul de a include toate aceste fişiere. Pentru aceasta mergeţi la &lt;span style="font-style: italic;"&gt;Setări -&gt; Aspect -&gt; Editaţi HTML (Settings -&gt; Layout -&gt; Edit HTML)&lt;/span&gt; şi imediat după tag-ul &lt;span style="font-weight: bold;font-family:courier new;" &gt;&amp;lt;head&amp;gt;&lt;/span&gt; adăugaţi fişierul CSS de bază şi cel ce ţine de tema aleasă de dvs, aşa cum este arătat mai jos (în exemplul de mai jos am folosit tema &lt;span style="font-family:courier new;"&gt;shThemeDefault.css,&lt;/span&gt; dar dvs puteţi folosi oricare alta):
&lt;/p&gt;
&lt;pre class="brush: html;"&gt;&amp;lt;head&amp;gt;
&amp;lt;link type="text/css" rel="stylesheet" href="http://sites.google.com/site/numeledvs/syntaxhighlighter/styles/shCore.css" /&amp;gt;
&amp;lt;link type="text/css" rel="stylesheet" href="http://sites.google.com/site/numeledvs/syntaxhighlighter/styles/shThemeDefault.css" /&amp;gt;
...
&lt;/pre&gt;
&lt;p&gt;
Apoi trebuie adăugat &lt;span style="font-family:courier new;"&gt;shCore.js&lt;/span&gt; urmat de toate fişierele pensule pe care le veţi folosi pe blog-ul dvs (în exemplul de mai jos extensia fişierelor este &lt;span style="font-family:courier new;"&gt;.js&lt;/span&gt; pentru a nu crea confuzii în cazul în care cineva a hotărît să găzduiască SyntaxHighlighter pe un site altfel decît Google Sites, dvs însă trebuie să o schimbaţi în &lt;span style="font-family:courier new;"&gt;.txt&lt;/span&gt; în cazul în care aţi încărcat fişierele pe Google Sites):
&lt;/p&gt;
&lt;pre class="brush: html;"&gt;&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shCore.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushJScript.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushJava.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushSql.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushXml.js"&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Şi în sfîrşit trebuie invocată funcţia &lt;span style="font-family:courier new;"&gt;SyntaxHighlighter.all()&lt;/span&gt; care practic şi face tot job-ul:
&lt;/p&gt;
&lt;pre class="brush: js; highlight: 2;"&gt;&amp;lt;script type="text/javascript"&amp;gt;
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Ţin să atenţionez asupra importanţei liniei de cod subliniate. Aceasta din urmă trebuie adăugată atunci cînd folosim SyntaxHighlighter pe Blogger. Aceasta se datorează faptului ca Blogger foloseşte &amp;lt;br&amp;gt; pentru trecerea la rînd nou, şi fără setarea acestui parametru toate &amp;lt;br&amp;gt; vor fi afişate în fragmentele de cod. Iată un exemplu. Aşa va arăta fragmentul de cod cu specificarea &lt;span style="font-family:courier new;"&gt;bloggerMode = true;&lt;/span&gt;
&lt;/p&gt;
&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_xeWfOij1Jjg/SaxNPqInNRI/AAAAAAAACpY/hSk0YNwbBiM/s1600-h/syntaxhighlighter-bloggerMode-true.PNG"&gt;&lt;img style="cursor: pointer; width: 217px; height: 37px;" src="http://4.bp.blogspot.com/_xeWfOij1Jjg/SaxNPqInNRI/AAAAAAAACpY/hSk0YNwbBiM/s400/syntaxhighlighter-bloggerMode-true.PNG" alt="" id="BLOGGER_PHOTO_ID_5308702992166761746" border="0" /&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
Iar aşa fără specificare:
&lt;/p&gt;
&lt;div style="text-align: left;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_xeWfOij1Jjg/SaxNWcpzNRI/AAAAAAAACpg/w1JbTUjpcBk/s1600-h/syntaxhighlighter-bloggerMode-false.PNG"&gt;&lt;img style="cursor: pointer; width: 275px; height: 51px;" src="http://3.bp.blogspot.com/_xeWfOij1Jjg/SaxNWcpzNRI/AAAAAAAACpg/w1JbTUjpcBk/s400/syntaxhighlighter-bloggerMode-false.PNG" alt="" id="BLOGGER_PHOTO_ID_5308703108806948114" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;
În final totul împreună trebuie să arate aşa:
&lt;/p&gt;
&lt;pre class="brush: html;"&gt;&amp;lt;head&amp;gt;
&amp;lt;link type="text/css" rel="stylesheet" href="http://sites.google.com/site/numeledvs/syntaxhighlighter/styles/shCore.css" /&amp;gt;
&amp;lt;link type="text/css" rel="stylesheet" href="http://sites.google.com/site/numeledvs/syntaxhighlighter/styles/shThemeDefault.css" /&amp;gt;

&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shCore.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushJScript.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushJava.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushSql.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushXml.js"&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script type="text/javascript"&amp;gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.all();
&amp;lt;/script&amp;gt;
...
&lt;/pre&gt;
&lt;p&gt;
Sau dacă mi-aţi urmat sfatul şi aţi combinat fişierele împreună, atunci rezultatul final va arăta aşa:
&lt;/p&gt;
&lt;pre class="brush: html;"&gt;&amp;lt;head&amp;gt;
&amp;lt;link type="text/css" rel="stylesheet" href="http://sites.google.com/site/numeledvs/syntaxhighlighter/styles/shCoreThemeDefault.css" /&amp;gt;

&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shCore.js"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script type="text/javascript" src="http://sites.google.com/site/numeledvs/syntaxhighlighter/scripts/shBrushAll.js"&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;script type="text/javascript"&amp;gt;
 SyntaxHighlighter.config.bloggerMode = true;
 SyntaxHighlighter.all();
&amp;lt;/script&amp;gt;
...
&lt;/pre&gt;
&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;ATENŢIE:&lt;/span&gt; Nu uitaţi să schimbaţi &lt;span style="font-weight: bold;font-family:courier new;" &gt;numeledvs&lt;/span&gt; în toate adresele cu numele pe care l-aţi dat site-ului în momentul în care l-aţi creat.
&lt;/p&gt;&lt;br/&gt;
&lt;p&gt;
&lt;span style="font-weight: bold;font-size:130%;" &gt;4. Cum utilizăm SyntaxHighlighter.&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
Simplu de tot. SyntaxHighlighter caută în pagină toate tag-urile &lt;span style="font-family:courier new;"&gt;&amp;lt;pre&amp;gt;&lt;/span&gt; care conţin atributul &lt;span style="font-family:courier new;"&gt;class&lt;/span&gt; formatat într-un mod special. Acest format este acelaşi ca şi al atributului &lt;span style="font-family:courier new;"&gt;style&lt;/span&gt; în HTML. Unicul parametru obligator este &lt;span style="font-family:courier new;"&gt;brush&lt;/span&gt; care trebuie setat cu unul dintre sinonimele &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes"&gt;fişierelor pensulă&lt;/a&gt; incluse de dvs. Acesta din urmă va specifica limbajul fragmentului de cod utilizat.
&lt;/p&gt;&lt;p&gt;
Iată un caz tipic de utilizare:
&lt;/p&gt;
&lt;pre class="brush: java;"&gt;&amp;lt;pre class="brush: java"&amp;gt;
System.out.println("Hello World!");
&amp;lt;/pre&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
&lt;span style="font-weight: bold;"&gt;IMPORTANT:&lt;/span&gt; Fiţi atenţi la fragmentele de cod ce conţin caracterele &lt;span style="font-weight: bold;"&gt;&amp;lt;&lt;/span&gt; şi &lt;span style="font-weight: bold;"&gt;&amp;gt;&lt;/span&gt; Acestea trebuie înlocuite cu &lt;span style="font-weight: bold;font-family:courier new;" &gt;&amp;amp;lt;&lt;/span&gt; şi respectiv &lt;span style="font-weight: bold;font-family:courier new;" &gt;&amp;amp;gt;&lt;/span&gt;
&lt;/p&gt;&lt;p&gt;
De asemenea pe lîngă parametrul obligatoriu brush, mai putem specifica şi alţi parametri. Lista întreagă cu toţi parametri şi descrierea acestora o găsiţi &lt;a href="http://alexgorbatchev.com/wiki/SyntaxHighlighter:Configuration"&gt;aici&lt;/a&gt;.
&lt;/p&gt;&lt;p&gt;
Iată un exemplu mai sofisticat:
&lt;/p&gt;
&lt;pre class="brush: java; ruler: true; toolbar: false; first-line: 10; highlight: [11, 12]; font-size: 125%"&gt;&amp;lt;pre class="brush: java; ruler: true; toolbar: false; first-line: 10; highlight: [11, 12]; font-size: 125%"&amp;gt;
System.out.println("Hello World 1!");
System.out.println("Hello World 2!");
System.out.println("Hello World 3!");
&amp;lt;/pre&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Parametrii adiţionali care au fost specificaţi au dus la următoarele:
&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Vizualizarea riglei.&lt;/li&gt;&lt;li&gt;Ascunderea toolbar-ului.
&lt;/li&gt;&lt;li&gt;Numerotarea rîndurilor începe de la 10.&lt;/li&gt;&lt;li&gt;Liniile 11 şi 12 sunt selectate.&lt;/li&gt;&lt;li&gt;Specificarea mărimii font-ului de 125%.&lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;
Un lucru important este faptul că există posibilitatea redefinirii valorilor implicite a acestor parametri. De exemplu, dacă doriţi să ascundeţi toolbar-ul în toate fragmentele din toate articolele dvs, atunci puteţi adăuga următoarea linie de cod selectată, înaintea invocării &lt;span style="font-family:courier new;"&gt;SyntaxHighlighter.all();&lt;/span&gt; aşa cum este arătat mai jos:
&lt;/p&gt;
&lt;pre class="brush: js; highlight: 3"&gt;&amp;lt;script type="text/javascript"&amp;gt;
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
&amp;lt;/script&amp;gt;
&lt;/pre&gt;
&lt;p&gt;
Aceasta va seta valoarea implicită a parametrului &lt;span style="font-family:courier new;"&gt;toolbar&lt;/span&gt;. Ca rezultat toate fragmentele de cod care nu au specificat explicit valoarea acestui parametru, vor utiliza aceasta valoare, ceea ce va duce la ascunderea toolbar-ului.
&lt;/p&gt;&lt;p&gt;
După cum vedeţi SyntaxHighlighter este foarte simplu şi uşor în utilizare şi în acelaşi timp oferă o gamă largă de posibilităţi.
&lt;/p&gt;&lt;p&gt;
Utilizare plăcută :-)
&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-1189124892985811180?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=n8bimUA1wgc:LTiPz451T-Q:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=n8bimUA1wgc:LTiPz451T-Q:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=n8bimUA1wgc:LTiPz451T-Q:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/n8bimUA1wgc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/1189124892985811180/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/03/cum-instalam-si-utilizam.html#comment-form" title="1 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/1189124892985811180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/1189124892985811180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/n8bimUA1wgc/cum-instalam-si-utilizam.html" title="Cum instalăm şi utilizăm SyntaxHighlighter 2.0 pe Blogger" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_xeWfOij1Jjg/SarlbbBVmFI/AAAAAAAACo4/_cvNUdry7Wg/s72-c/google-sites-create-new-page-button.png" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/03/cum-instalam-si-utilizam.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGRH48eSp7ImA9WxJSF0U.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-1318495705522078587</id><published>2009-03-01T11:47:00.011+02:00</published><updated>2009-05-08T15:55:25.071+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T15:55:25.071+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="personal" /><title>Cuvînt înainte</title><content type="html">&lt;p&gt;
După aproape 3 ani de la crearea acestui blog şi publicarea primului mesaj de test, m-am convins că ar fi bine sa scriu cîte ceva pe acest blog, care de altfel a fost conceput ca unul personal, dar pe care din mai multe motive nu am postat nimic :-)
&lt;/p&gt;&lt;p&gt;
Zis şi făcut, de astăzi voi începe publicarea unor articole, care vor ţine mai mult de domeniul în care activez, şi anume tehnologii informaţionale. Desigur vor fi publicate şi articole ce ţin nemijlocit de internet, web şi chiar de utilizarea unor produse software.
&lt;/p&gt;&lt;p&gt;
Motivul principal pentru publicarea articolelor este de a-mi crea on-line un şir de notiţe, analize, sfaturi, investigaţii, etc.
&lt;/p&gt;&lt;p&gt;
Într-un ceas bun!
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-1318495705522078587?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=DplMlagqgVk:tLzkab63xNs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=DplMlagqgVk:tLzkab63xNs:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=DplMlagqgVk:tLzkab63xNs:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/DplMlagqgVk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/1318495705522078587/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2009/03/cuvint-inainte.html#comment-form" title="0 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/1318495705522078587?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/1318495705522078587?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/DplMlagqgVk/cuvint-inainte.html" title="Cuvînt înainte" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2009/03/cuvint-inainte.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUUDRX84eSp7ImA9WxJSGE0.&quot;"><id>tag:blogger.com,1999:blog-8369030687505463576.post-7373928620152625542</id><published>2006-08-29T10:53:00.011+03:00</published><updated>2009-05-08T20:21:14.131+03:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T20:21:14.131+03:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="testing" /><title>Test</title><content type="html">&lt;p&gt;
Test
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8369030687505463576-7373928620152625542?l=azagorneanu.blogspot.com%2Findex.html'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=Smt3O1rX0yc:b7S9v5KigAw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=Smt3O1rX0yc:b7S9v5KigAw:63t7Ie-LG7Y"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=63t7Ie-LG7Y" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/azagorneanu?a=Smt3O1rX0yc:b7S9v5KigAw:2nqncYFp4_M"&gt;&lt;img src="http://feeds.feedburner.com/~ff/azagorneanu?d=2nqncYFp4_M" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/azagorneanu/~4/Smt3O1rX0yc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://azagorneanu.blogspot.com/feeds/7373928620152625542/comments/default" title="Postare comentarii" /><link rel="replies" type="text/html" href="http://azagorneanu.blogspot.com/2006/08/test.html#comment-form" title="1 comentarii" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/7373928620152625542?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8369030687505463576/posts/default/7373928620152625542?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/azagorneanu/~3/Smt3O1rX0yc/test.html" title="Test" /><author><name>Andrei Zagorneanu</name><uri>http://www.blogger.com/profile/04979424616588139827</uri><email>AZagorneanu@gmail.com</email><gd:extendedProperty name="OpenSocialUserId" value="16142137906780093048" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://azagorneanu.blogspot.com/2006/08/test.html</feedburner:origLink></entry></feed>
