Yksinkertainen Maven-projekti

Edellisessä artikkelissani käsittelin Javan ja Mavenin asennusta. Käytännössä jälkimmäisenä mainittu vaatii jonkinlaisen projektipohjan tai ”arkkityypin”, jonka perusteella voidaan laatia monimutkaisempi projekti ja lisätä ohjelma- ja resurssitiedostoja. Käytännössä Maven tarjoaa tällaisen mahdollisuuden jo itsessään, jos komentoriville kirjoittaa

$ mvn archetype:generate

Käytännössä kuitenkin vaihtoehtoja tulee valtavasti ja yksinkertaisemmatkin niistä voivat olla sellaisia, jotka nojautuvat vanhentuneisiin pakettitietoihin. Olen siksi koostanut itse kirjoitushetkellä huhtikuussa 2014 pätevän vaihtoehdon yksinkertaiseksi pohjaksi, jossa on esimerkiksi huomioitu annotaatiopohjaiset JUnit-testit:

jarproject-2014-04-07.zip

Tämän voi purkaa käskyllä unzip jarproject-2014-04-07.zip ja menemällä sen hakemistoon, voidaan kirjoittaa projektin kääntämiseksi:

$ mvn clean install

Havaitaan, että ohjelma kääntyi ja tiettyjä testejä suoritettiin. Vastaavasti ohjelman pääosan ajo tapahtuu käskyllä:

$ mvn exec:java

Jälkimmäinen komento on sallittu ainostaan, koska projektissa on määritelty exec-maven-plugin. Tarkasteltaessa projektin hakemistorakennetta, se näyttää tältä:

 .
├── pom.xml
└── src
    ├── main
    │   └── java
    │       └── fi
    │           └── mikkonummelin
    │               └── jarproject
    │                   └── Main.java
    └── test
        ├── java
        │   └── fi
        │       └── mikkonummelin
        │           └── jarproject
        │               └── JarProjectTest.java
        └── resources
            └── log4j.properties

Mukana on varsinaisen ohjelman osuus src ja testien tarvitsema osuus test. Lisäksi mukana on kaikkein tärkeimpänä Maven-ohjaustiedosto pom.xml. Sen sisältö on seuraavanlainen:

<?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.0-SNAPSHOT</version>
    <name>${project.artifactId}</name>
    <url>http://www.mikkonummelin.fi</url>
    <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</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>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <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>
    </build>
</project>

Käytännössä se määrittää projektille riippuvuudet (dependencies) ja liitännäiset (plugins).