Sziasztok!
Korábbi bejegyzésünkben megismerkedtünk a Maven dependenciákkal, valamint a repository-kal. Most elsőként szeretném bemutatni a property-ket, melyek segítségével különböző környezeti változókat érhetünk el, illetve hozhatunk létre saját, a projektre érvényes változókat is (vagyis explicit értékeket helyettesíthetünk velük). Ezek után a build plugin-eket ismerheted meg, melyek lehetővé teszik különböző kiegészítő eszközök használatát.
Property-k
A property-kre ${property_név} formában tudunk hivatkozni. Segítségükkel egyszerűbbé tehetjük Maven projektjeink karbantartását, valamint megkönnyíthetjük hordozhatóságát. Például, ha néhány dependencia szorosan kapcsolódik egymáshoz, s azt szeretnénk, ha mind ugyanazt a verziószámú verziót használják, akkor azt a verziószámot beleírhatjuk egy property-be, így a későbbiekben csak egy helyen kell megváltoztatni azt. De a property-k segítségével használhatjuk projektünk környezeti változóit is (például a pom fájlt tartalmazó könyvtár), annak érdekében, hogy a projekten dolgozó összes fejlesztő változtatás nélkül tudja használni a pom fájlt. Végső soron több féle property különböztethető meg:
- Beépített property-k:
- ${basedir} a pom fájlt tartalmazó könyvtár-t reprezentálja
- ${version} a projekt verziószámát reprezentálja
- Projekt property-k: A projektünkre vonatkozó, automatikusan létrejövő property-k. Például: ${project.name}
- Rendszerünk környezeti változóira is hivatkozhatunk. Például: ${java.home}, ${env.M2_HOME}
- Saját magunk is hozhatunk létre property-ket a pom fájlban a <properties>…</properties> tag-ek között.
De lássuk a fent említett verziószámos példát:
<properties>
<vaadin.version>7.3.2</vaadin.version>
</properties>
<dependencies>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-server</artifactId>
<version>${vaadin.version}</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-client-compiled</artifactId>
<version>${vaadin.version}</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-themes</artifactId>
<version>${vaadin.version}</version>
</dependency>
<dependency>
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
</dependency>
</dependencies>
A property-ket továbbá a resource-ok kezelésében is fontos szerepet játszanak. Na de mik is azok a resource-ok? A resource-nak hívjuk a projektünk által használt, nem java forrásállományokat, például különböző xml leírókat, property fájlokat, vagy akár képeket is. A property-k segítségével a resource-ok könnyen paraméterezhetőek lesznek, ez által projektünk hordozhatóbbá válik (például elképzelhető, hogy az egyik fejlesztő Windows-t a másik Linuxot használ, s ez esetben a resource-ok elérési útvonala eltérhet).
Build Plugin-ek
A Maven alapvetően egy pluginekkel modularizált rendszer, vagyis a pom.xml értelmezésétől eltekintve, projektjeink gyakorlatilag plugin-ek futtatásának eredményeképp jönnek létre. Például az install plugin segítségével lefordíthatjuk és lokálisan installálhatjuk projektünket. Ám rengeteg olyan plugin létezik, melyeket alapvetően nem használnak a projektek, de kézzel beköthetjük őket. Pom fájlunk <build>…</build> tag-ekkel határolt részében adhatunk meg mindenféle, a fordítási folyamattal kapcsolatos beállítást, például build plugin-eket is itt húzhatunk be a projektbe. Az alábbi példában, az előző blogbejegyzésben található demo pom fájlját egészítjük ki két build plugin használatával.
- A maven-jar-plugin segítségével többek közt megadhatjuk, hogy mely osztályunkban található a main metódus, mivel a plugin használata nélkül a jar fájlok futtatásakor kellene ezt megadni (pl. mvn exec:java -Dexec.mainClass=”hu.zerotohero.MavenDemo”).
- A maven-dependency-plugin a dependenciák kezeléséért felel. A copy-dependencies goal felel azért, hogy a repositoryból, projektünk egy meghatározott könyvtárába kerüljenek a felhasznált dependenciák.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<manifest>
<mainClass>hu.zerotohero.MavenDemo</mainClass>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.8</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Amint láthatod a <plugins>…</plugins> tag-ek között kell felsorolni a különböző plugineket. Hasonlóan a dependenciákhoz, mindig meg kell adni plugin-ek groupId-át, artifactId-át és verziószámát. A configuration részben a plugin különböző tulajdonságait állíthatjuk be, míg az executions részben a build folyamatot lehet befolyásolni.