Vastoin edellisen artikkelini suuntaviivoja, päätin täydentää edellistä Maven-projektiani kattamaan esimerkiksi resurssien suodattamisen ja paketoinnin. Uusi paketti on saatavissa tästä linkistä:
Tarkastellaan sen pom.xml
-tiedostoa, joka näyttää tältä:
<?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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>fi.mikkonummelin</groupId> <artifactId>jarproject</artifactId> <packaging>jar</packaging> <version>1.3-SNAPSHOT</version> <name>${project.artifactId}</name> <url>http://www.mikkonummelin.fi</url> <scm> <developerConnection>scm:git:file:///home/mnummeli/Asiakirjat/java/jarproject</developerConnection> <tag>HEAD</tag> </scm> <properties> <commons-logging.version>1.1.3</commons-logging.version> </properties> <dependencies> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>${commons-logging.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <mainClass>fi.mikkonummelin.jarproject.Main</mainClass> </manifest> </archive> </configuration> </plugin> <plugin> <artifactId>maven-assembly-plugin</artifactId> <version>2.4</version> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>1.2.1</version> <configuration> <mainClass>fi.mikkonummelin.jarproject.Main</mainClass> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> </resource> </resources> </build> <distributionManagement> <repository> <id>Local Releases</id> <name>My Local Releases Repository</name> <url>file:///home/mnummeli/maven-releases</url> </repository> </distributionManagement> </project>
Uusina elementteinä siellä ovat ensinnä scm
ja properties
-osiot, joilla otetaan kantaa käytettävään versionhallintamalliin ja sellaisiin ominaisuuksiin, joihin halutaan viitata muuttujan nimellä resursseja suodatettaessa. maven-jar-plugin
issa on nyt määritelty manifesti, jossa on luokkapolku ja pääasiallisesti ajettava Java-luokka, joka sisältää main
-metodin. maven-assembly-plugin
iin on vastaavasti määritelty, että se hakee loput määrityksensä assembly.xml
-tiedostosta ja että se ajetaan samalla kun tehdään muutakin paketointia. resources
-osiossa on määritelty resurssit suodatettaviksi ja distributionManagement
-osiossa on määritelty se versionhallintaohjelman tietovarasto, johon voidaan tehdä paketista uusia julkaisuja ensisijaisesti.
Pakettien rakenteita kuvaava uusi assembly.xml
näyttää tältä:
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> <id>jarproject</id> <formats> <format>dir</format> <format>zip</format> </formats> <fileSets> <fileSet> <directory>${project.build.directory}</directory> <outputDirectory>/</outputDirectory> <includes> <include>*.jar</include> </includes> </fileSet> <fileSet> <directory>${project.build.directory}/classes</directory> <outputDirectory>/</outputDirectory> <includes> <include>*.properties</include> <include>*.sh</include> </includes> </fileSet> </fileSets> <dependencySets> <dependencySet> <outputDirectory>/</outputDirectory> <includes> <include>commons-logging:commons-logging</include> </includes> </dependencySet> </dependencySets> </assembly>
Siinä määritellään, käytännössä, minkätyyppisiä paketteja halutaan tehdä (zip
ja tavallinen hakemisto), kohdassa fileSets
määritellään, mitkä tiedostot kopioidaan mihinkin hakemistoon ja kohdassa depencencySets
määritellään, mitkä projektin riippuvuus-jar
-paketit kopioidaan mihinkin hakemistoon. Uusi tiedosto jarproject.properties
on tarkoitettu pelkkään versionumeron siirtoon ja jarproject.sh
käynnistysskriptiksi. Kannattaa tutkia koodia tältä osin itse.
Projekti on mahdollista kääntää käskyllä mvn clean install
. Jos projektipohjasta haluaa itselleen uuden arkkityypin, sen voi tehdä kirjoittamalla mvn archetype:create-from-project
. Tällöin target-hakemistoon muodostuu asennettava arkkityypin lähdekoodipohja. Kirjoittamalla tämän jälkeen cd target/generated-sources/archetype/
päästään arkkityypin hakemistoon ja käskyllä mvn install
se asennetaan paikalliseen Maven-tietovarastoon. Sitä voi käyttää hyödyksi myöhemmin kirjoittamalla
$ mvn archetype:generate -DarchetypeCatalog=local