30 mai, 2009

Introducere în Apache Maven 2, Partea 5 - Plugin-urile şi goal-urile Maven

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.

Maven Plugin With Goals

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. Un goal este o unitate de lucru în Maven. Exemple de goal-uri includ goal-ul compile din plugin-ul Compiler care compilează tot codul sursă al proiectului, sau goal-ul test 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. [Click mai jos pentru a citi articolul în întregime]

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 compiler:compile corespunde clasei CompilerMojo în Plugin-ul Maven Compiler şi goal-ul jar:jar corespunde clasei JarMojo în Plugin-ul Maven Jar.

Pentru a executa un singur goal al unui plug-in Maven vom folosi sintaxa mvn compiler:compile, unde compiler este prefixul plugin-ului şi compile este goal-ul. De asemenea putem transmite perechi -Dname=value ca argumente atunci cînd executăm un goal. Aceste argumente sînt sub forma de -D proprietăţi, similare cu acele opţiuni care pot fi transmise către Java Virtual Machine din linia de comandă.

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 groupId, artifactId, version şi goal-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:

mvn org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile
puteţi folosi prefix-ul de plugin compiler şi transforma linia de comandă de mai sus în mvn compiler:compile. Cum Maven transformă compiler:compile în org.apache.maven.plugins:maven-compiler-plugin:2.0.2? Maven se uită într-un fişier în repozitoriul Maven pentru a obţine lista de plugin-uri pentru un anumit groupId. În mod implicit, Maven este configurat să caute plugin-uri în două grupe: org.apache.maven.plugins şi org.codehaus.mojo. Cînd Maven caută plugin-uri pentru un anumit groupId, 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 org.apache.maven.plugins în repozitoriul local Maven (<user_home>/.m2/repository) în fişierul org/apache/maven/plugins/maven-metadata-central.xml. Mai jos este arătat un fragment din fişierul maven-metadata-central.xml din grupul org.apache.maven.plugins.
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <plugins>
    ...
    <plugin>
      <name>Maven Clean Plugin</name>
      <prefix>clean</prefix>
      <artifactId>maven-clean-plugin</artifactId>
    </plugin>
    <plugin>
      <name>Maven Compiler Plugin</name>
      <prefix>compiler</prefix>
      <artifactId>maven-compiler-plugin</artifactId>
    </plugin>
    <plugin>
      <name>Maven Jar Plugin</name>
      <prefix>jar</prefix>
      <artifactId>maven-jar-plugin</artifactId>
    </plugin>
    ...
  </plugins>
</metadata>

După cum se poate vedea anume fişierul maven-metadata-central.xml în repozitoriul local este ceea ce face posibil ca dvs. să executaţi plugin-uri folosind doar prefixul plugin-ului.


Plugin-ul de Ajutor Maven

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.

Plugin-ul de Ajutor Maven are patru goal-uri. Următoarele comenzi oferă cîteva informaţii generale despre cele patru goal-uri:

  • help:describe - descrie atributele unui plugin. Acest goal vă arată informaţii despre un plugin sau un goal al unul plugin. Cu ajutorul parametrului plugin 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 compiler pentru maven-compiler-plugin) sau groupId:artifactId[:version] unde versiunea este opţională. De exemplu, următoarea comandă foloseşte goal-ul describe al plugin-ului de Ajutor pentru a afişa informaţii despre plugin-ul Maven Compiler:
    mvn help:describe -Dplugin=compiler
    ...
    [INFO] [help:describe]
    [INFO] org.apache.maven.plugins:maven-compiler-plugin:2.0.2

    Name: Maven Compiler Plugin
    Description: Maven Plugins
    Group Id: org.apache.maven.plugins
    Artifact Id: maven-compiler-plugin
    Version: 2.0.2
    Goal Prefix: compiler

    This plugin has 2 goals:

    compiler:compile
    Description: Compiles application sources
    Deprecated. No reason given

    compiler:testCompile
    Description: Compiles application test sources
    Deprecated. No reason given

    For more information, run 'mvn help:describe [...] -Ddetail'
    Puteţi obţine acelaşi lucru utilizînd sintaxa groupId:artifactId[:version]
    mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin
    Dacă doriţi ca Plugin-ul de Ajutor să afişeze lista completă a goal-urilor cu parametri, executaţi goal-ul help:describe cu parametrul detail, după cum urmează:
    mvn help:describe -Dplugin=compiler –Ddetail
    Pentru a obţine informaţii despre un singur goal, setaţi parametrul mojo alături de parametrul plugin. Următoarea comandă afişează toată informaţia cu privire la goal-ul compile din plugin-ul Compiler:
    mvn help:describe -Dplugin=compiler -Dmojo=compile -Ddetail

    Celelalte trei goal-uri: active-profiles, effective-pom şi effective-settings trebuie să fie rulate în directorul de bază ale unui proiect.
  • help:active-profiles - afişează profilurile (proiect, utilizator, la nivel global) care sînt active pentru build.
  • help:effective-pom - afişează POM-ul efectiv pentru build-ul curent luînd în consideraţie profilurile active.
  • help:effective-settings - 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.

Aici încheiem acest post. În următorul post vom vorbi despre Ciclul de viaţă Maven.


Trimiteţi un comentariu

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

Header image adapted from Free Web Page Headers