Tworzenie wtyczek Maven 2 w Groovy
Z Jacek Laskowski - Wiki Projektanta Java EE
Jakiś czas temu planowałem stworzenie wtyczki Apache Maven 2 dla wzbogacenia możliwości Apache OpenEJB. W międzyczasie zainteresowałem się językami skryptowymi, szczególnie Groovy oraz JRuby, więc kiedy natrafiłem na wtyczkę Maven 2 wspomagającą tworzenie wtyczek Maven 2 w Groovy - groovy-maven-plugin wiedziałem, że to jest właśnie ten moment. I nie myliłem się. Prostota tworzenia wtyczek w Groovy uwidacznia się już przy bardzo trywialnych wtyczkach, jaką będzie nasza wtyczka, kiedy to nie jest konieczne deklarowanie wyjątków czy typów parametrów (chociaż jest to zalecane). Zobaczmy to w działaniu.
Spis treści |
Oprogramowanie
Na potrzeby artykułu konieczne jest zainstalowanie Apache Maven 2. Wybór zintegrowanego środowiska programowania (IDE), które wspomaga tworzenie aplikacji w Groovy i które dodatkowo wspiera projekty Maven 2 składam na Twoje barki. W zasadzie większość z popularnych narzędzi IDE ma obie te funkcjonalności.
Kompletny projekt powitanie-maven-plugin gotowy do uruchomienia, dostępny jest do pobrania jako powitanie-maven-plugin.zip.
Utworzenie projektu wtyczki - powitanie-maven-plugin
Utworzenie projektu wykonujemy przy pomocy wtyczki-archetypu org.codehaus.mojo.groovy.groovy-maven-archetype.
mvn archetype:create \ -DarchetypeGroupId=org.codehaus.mojo.groovy \ -DarchetypeArtifactId=groovy-maven-archetype \ -DgroupId=pl.jaceklaskowski.maven \ -DpackageName=pl.jaceklaskowski.maven.plugins \ -DartifactId=powitanie-maven-plugin
W ten sposób utworzyliśmy podstawową strukturę projektową dla wtyczki powitanie-maven-plugin.
Kolejne polecenia będą wykonywane z poziomu katalogu powitanie-maven-plugin.
Konfiguracja projektu - pom.xml
Zgodnie z dokumentem Guide to Developing with Maven 2 and Groovy konieczne są pewne zmiany w konfiguracji projektu - pom.xml. Ostatecznie plik pom.xml powinien prezentować się następująco.
<?xml version="1.0" encoding="UTF-8"?>
<project 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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>pl.jaceklaskowski.maven</groupId>
<artifactId>powitanie-maven-plugin</artifactId>
<name>Example Groovy Module - powitanie-maven-plugin</name>
<packaging>maven-plugin</packaging>
<version>1.0</version>
<url>http://www.jaceklaskowski.pl/wiki/Tworzenie_wtyczek_Maven_2_w_Groovy</url>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo.groovy.runtime</groupId>
<artifactId>groovy-runtime-default</artifactId>
<version>1.0-beta-3</version>
</dependency>
<dependency>
<groupId>org.codehaus.mojo.groovy</groupId>
<artifactId>groovy-mojo-support</artifactId>
<version>1.0-beta-3</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-artifact</artifactId>
<version>2.0.5</version>
</dependency>
<dependency>
<groupId>org.apache.maven.shared</groupId>
<artifactId>file-management</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo.groovy</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<configuration>
<providerSelection>default</providerSelection>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.codehaus.mojo.groovy</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<extensions>true</extensions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo.groovy</groupId>
<artifactId>groovy-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>generateStubs</goal>
<goal>compile</goal>
<goal>generateTestStubs</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
Kod źródłowy wtyczki - PowitajMojo.groovy
Kod źródłowy wtyczki domyślnie szukany jest w katalogu src/main/groovy. Nie został on utworzony podczas tworzenia projektu, więc należy stworzyć go samodzielnie.
W katalogu src/main/groovy zakładamy kolejny podkatalog pl/jaceklaskowski/maven/plugins, w którym będzie znajdowała się nasza wtyczka.
package pl.jaceklaskowski.maven.plugins
import org.codehaus.mojo.groovy.GroovyMojo
/**
* Powitaj uzytkownika
*
* @goal powitaj
*/
class PowitajMojo extends GroovyMojo
{
void execute() {
log.info('Witaj uzytkowniku!')
}
}
Cały katalog src/main/java usuwamy jako niepotrzebny.
Uruchomienie wtyczki
Zanim przejdziemy do uruchomienia wtyczki należy ją zbudować poleceniem mvn clean install.
jlaskowski@dev /cygdrive/c/powitanie-maven-plugin $ mvn clean install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building Example Groovy Module - powitanie-maven-plugin [INFO] task-segment: [clean, install] [INFO] ------------------------------------------------------------------------ ... [INFO] [plugin:updateRegistry] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------
Poprawne zbudowanie wtyczki i jej instalacja w lokalnym repozytorium umożliwia wykonanie kolejnego kroku - uruchomienia wtyczki za pomocą polecenia mvn pl.jaceklaskowski.maven::powitanie-maven-plugin::powitaj.
jlaskowski@dev /cygdrive/c/powitanie-maven-plugin $ mvn pl.jaceklaskowski.maven::powitanie-maven-plugin::powitaj [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building Example Groovy Module - powitanie-maven-plugin [INFO] task-segment: [pl.jaceklaskowski.maven::powitanie-maven-plugin::powitaj] [INFO] ------------------------------------------------------------------------ [INFO] [powitanie:powitaj] [INFO] Witaj uzytkowniku! [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------
Pojawienie się komunikatu Witaj uzytkowniku! świadczy o poprawnym wykonaniu wtyczki. I to kończy pierwszą część tworzenia wtyczki. Kolejna będzie rozbudowywała ją o obsługę parametrów konfiguracyjnych.
Parametr konfiguracyjny wtyczki - imie
Dodanie prywatnego pola imie z adnotacją @parameter wprowadza obsługę parametrów konfiguracyjnych dla wtyczki. Domyślnie wartość parametru to uzytkowniku zgodnie z elementem default-value, podczas gdy możliwa jest jej zmiana za pomocą zmiennej powitaj.imie podanej z linii poleceń (element expression).
package pl.jaceklaskowski.maven.plugins
import org.codehaus.mojo.groovy.GroovyMojo
/**
* Powitaj uzytkownika
*
* @goal powitaj
*/
class PowitajMojo extends GroovyMojo
{
/**
* Imie uzytkowika
*
* @parameter expression="${powitaj.imie}" default-value="uzytkowniku"
*/
private String imie
void execute() {
log.info('Witaj ' + imie + '!')
}
}
Uruchomienie wtyczki z parametrem imie
Pozostaje sprawdzić poprawność dokonanych zmian przez zbudowanie wtyczki poleceniem mvn clean install i jej wykonaniu z parametrem powitaj.imie.
jlaskowski@dev /cygdrive/c/powitanie-maven-plugin $ mvn clean install [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building Example Groovy Module - powitanie-maven-plugin [INFO] task-segment: [clean, install] [INFO] ------------------------------------------------------------------------ ... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ jlaskowski@dev /cygdrive/c/powitanie-maven-plugin $ mvn pl.jaceklaskowski.maven::powitanie-maven-plugin::powitaj -Dpowitaj.imie=Jacek [INFO] Scanning for projects... [INFO] ------------------------------------------------------------------------ [INFO] Building Example Groovy Module - powitanie-maven-plugin [INFO] task-segment: [pl.jaceklaskowski.maven::powitanie-maven-plugin::powitaj] [INFO] ------------------------------------------------------------------------ [INFO] [powitanie:powitaj] [INFO] Witaj Jacek! [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------
Komunikat Witaj Jacek! świadczy o poprawnym utworzeniu wtyczki.
