アレについて記す

Maven入門

Posted on May 04, 2019 at 12:10 (JST)

Mavenについて試したことのメモ。

今回作成したコードはこちら

動作環境

OS: macOS Mojave ver. 10.14.2
Java: 1.8.0_181

この記事に書いてあること

  • Maven Wrapperの作り方
  • Javaのバージョン指定方法
  • Central repositoryから3rd partyライブラリをダウンロードして使えるようにする方法
  • テストの実行方法
  • Jarの作成方法

Maven Wrapperの作り方

Maven Wrapperとは、ローカル開発環境に素早くMavenを用意するためのツールである。
mvnwormvnw.cmdを実行すると、プロジェクトに必要なバージョンのMavenをインストールすることができる。
すでに該当バージョンが存在する場合はインストールは行われない。

1. IntelliJが使用しているmvnのパスを取得する

メニューのIntelliJ IDEA => Preferences を開き、Mavenで検索する。

mvnパス

Maven home directoryのプルダウンをクリックするとパスがわかる。
私の環境では/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3となっていた。

2. Maven wrapper作成

上記パス内に存在するmvnを使用してMaven wrapperを作成する

$ sh "/Applications/IntelliJ IDEA.app/Contents/plugins/maven/lib/maven3/bin/mvn" -N io.takari:maven:0.7.6:wrapper

以下のファイルが生成される。
mvnw

3. mvnw実行

$ ./mvnw clean test

初回実行時はダウンロード等のため3分くらいかかったが、2度目以降は通常のmvnと変わらない速度でタスクが実行できた。

4. .gitignore修正

Javaプロジェクトでは通常jarファイルはGit管理対象外の設定となっていることが多い。
生成したファイルが管理対象となるよう下記設定をくわえる。

!.mvn/wrapper/maven-wrapper.jar

Javaのバージョン指定方法

maven-compiler-pluginを使用するための設定をpom.xmlにくわえる。

[pom.xml(抜粋)]

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <java.version>1.8</java.version>
</properties>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>
    </plugins>
</build>

※ IntelliJでプロジェクトを作成する時にpl.org.miki:java8-quickstart-archetype(Java8テンプレート)を指定する方が楽かも
sourceEncoding はバージョン指定とは関係ないがトラブル回避のため、未指定の場合は忘れず指定しておく。

Central repositoryから3rd partyライブラリをダウンロードして使えるようにする方法

使用したいライブラリの情報をpom.xmlにくわえる。

[pom.xml(抜粋)]

<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
</dependencies>

dependency部分の記載は Maven repository search で調べられる。

テストの実行方法

全てのテストを実行する

$ ./mvnw test

テスト対象を指定する場合はオプションを加える

$ ./mvnw test -Dtest=CalculatorTest#可変長引数を渡して足し算ができる

Jarの作成方法

maven-assembly-pluginを使用するための設定をpom.xmlにくわえる。

[pom.xml(抜粋)]

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>3.1.1</version>
    <configuration>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
        <archive>
            <manifest>
                <mainClass>com.example.exercise.Main</mainClass>
            </manifest>
        </archive>
    </configuration>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

下記コマンドを実行するとtargetディレクトリ下にjarファイルが生成される。

$ ./mvnw package

今回はmanifestにmainメソッドを定義しているため、下記コマンドでjarを実行できる。

$ java -jar target/maven-project-sample-1.0-SNAPSHOT-jar-with-dependencies.jar 

※ 生成されるjarファイルは2つある。 -with-dependenciesサフィックスのものは3rd party libraryのクラスを含んでいるが、もう一方は含んでいない。


以上。


参考URL