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.
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
<?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:
Puteţi obţine acelaşi lucru utilizînd sintaxa groupId:artifactId[:version]
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'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=org.apache.maven.plugins:maven-compiler-plugin
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 –Ddetail
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.




