Maven3のはじめかた
  • 概要
  • はじめに
    • 電子書籍の配布形式について
  • Maven入門
    • Mavenのインストール
    • Mavenの使い方
    • ビルド・ライフサイクル
    • pom.xml
    • Mavenリポジトリ
    • 依存関係
    • Mavenプラグイン
  • プロジェクトをリポジトリに公開する
    • バージョンの種類と使い分け
    • 公開先のリポジトリを指定する
    • リポジトリへの公開
  • Mavenプラグインを実装する
    • Mavenプロジェクトを作成する
    • Mojoを作成する
    • 単体テストを作成する
    • Mavenリポジトリを通じて配布する
  • モジュール
    • モジュールでプロジェクトに構造を持ち込む
    • マルチモジュール構成プロジェクト用実行時オプション
  • 困ったときの逆引き
  • 付録
    • 用語集
    • サンプルプロジェクト
Powered by GitBook
On this page
  • Antに慣れている方のための補足
  • makeやnpmに慣れている方のための補足
  1. Maven入門

Mavenの使い方

PreviousMavenのインストールNextビルド・ライフサイクル

Last updated 3 years ago

基本的にはmvn packageのように行いたいことを引数に渡して実行するだけです。 この「行いたいこと」をMavenではフェーズ(phase)と呼んでいます。主なphaseをいくつか紹介します。

  • clean (一時ファイルの削除)

  • validate (プロジェクトの状態確認)

  • compile (プロジェクトのコンパイル)

  • test-compile (テストコードのコンパイル)

  • test (ユニットテストの実行)

  • package (アーティファクトの作成)

  • integration-test (インテグレーションテストの実行)

  • verify (アーティファクトの検証)

  • install (アーティファクトをローカルリポジトリに配置)

  • deploy (アーティファクトをリモートリポジトリに配置)

アーティファクト(artifact)とはjarやwarのような。 またリポジトリとは他の開発者とアーティファクトを共有するための保管庫を指します。詳しくは。

ここでは例として、筆者が開発しているプロジェクトをビルドしてみましょう。 次のコマンドを実行してください。targetディレクトリが作成され、中にjarファイルが入っていることが確認できます。

$ git clone https://github.com/KengoTODA/findbugs-plugin.git
$ cd findbugs-plugin
$ mvn package
$ ls ./target

targetディレクトリにはアーティファクトだけでなくプロジェクトのclassファイルやテストケースのclassファイル、ユニットテストの実行結果も配置されていることが分かります。 コマンドの引数にはpackage(アーティファクトの作成)しか指定していないのに、Mavenがpackageに必要なcompileやtest-compile、testフェーズも実行してくれていたということです。 この理由はの節で解説します。

さて、もうひとつ便利なフェーズを試してみましょう。 mvn cleanを実行すると、targetディレクトリに作成された一時ファイルをディレクトリごと削除します。 実行後にディレクトリが削除されていることを確認してください。

$ ls -l
$ mvn clean
$ ls -l

Mavenはビルドを高速化するため、すでに作成されたclassファイルなどを再利用することがあります。 ビルドを完全にまっさらな状態から実行する場合は、事前にcleanを実行しておきましょう。

なおtargetディレクトリの削除によってcleanの実行を代替できるように見えますが、一時ファイルがtargetディレクトリ以外の場所に作られることもありえますので、ディレクトリの削除ではなくcleanを利用するように心がけましょう。

Antに慣れている方のための補足

Antでは各targetの間に依存関係を明示できました。 たとえば次のXMLは、packageを実行する前にcompileを実行しなければならないことを意味しています。

<target name="compile">
...
</target>

<target name="package" depends="compile">
...
</target>

Mavenではこうしたtargetと依存関係、各targetで実行すべきtaskがデフォルトで用意されていると考えてください。 開発者の行うべきことがJavaプロジェクトのビルドである以上、行うべき作業には他のJavaプロジェクトとの共通点が多いはずです。 Mavenはそれをデフォルトで提供することにより、開発者がファイルに書くべき設定を削減しています。

MavenではAntのtargetがフェーズ、Antのtaskがプラグインに相当します。 各フェーズで実行されるプラグインはデフォルトで割り当てられたものに加え、好みのものを追加できます。

makeやnpmに慣れている方のための補足

Mavenのインストールはmake installやnpm install -gとは違い、プロジェクトから実行可能ファイルを作ってPATHに追加することを意味しません。 Mavenのインストールはアーティファクトを作ってローカルリポジトリに配置することです。

またデフォルトではビルドされたアーティファクトはjava -jarで実行できません。 マニフェストファイルを適切に作成しアーティファクトに同梱する必要があります。

成果物のことを指します
のちほど説明します
findbugs plugin
ビルド・ライフサイクル