S-JIS[2012-07-14] 変更履歴

Mavenビルド

Mavenによるプロジェクトのビルドのメモ。


概要

Mavenのアーキタイプにより作られたプロジェクトでは、ビルド(パッケージング)することによって成果物(jarファイル等)が作られる。


パッケージング

packageにより、そのプロジェクトの成果物を生成する。

たぶん、pom.xmlのpackagingに指定されている種類のファイルが生成される。
( 「<packaging>jar</packaging>」となっていれば、jarファイルが作られる)

D:\temp\pom\example1> mvn package
〜
[INFO] Building jar: D:\temp\pom\example1\target\example1-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------

D:\temp\pom\example1> dir target
2012/07/14  22:58    <DIR>          .
2012/07/14  22:58    <DIR>          ..
2012/07/14  22:58    <DIR>          classes
2012/07/14  22:58             2,154 example1-1.0-SNAPSHOT.jar
2012/07/14  22:58    <DIR>          maven-archiver
2012/07/14  22:58    <DIR>          surefire
2012/07/14  22:58    <DIR>          surefire-reports
2012/07/14  22:58    <DIR>          test-classes

ファイルを生成する際には、念の為にcleanも一緒に指定して、targetをクリアしてから実行するのが良い。
(targetの下にゴミが残っている可能性があるから、クリアする)

> mvn clean package

普通にpackageを実行すると、テストも実行される。
skipTestsをtrueにするとテストはスキップされる。

> mvn package -DskipTests=true

ローカルリポジトリーへのインストール

installにより、プロジェクトの成果物(jarファイルやソースファイル)をローカルリポジトリーへインストールできる。

mvn install
mvn clean install

インストールする際にもcleanしてゴミを消した方がいいのは、パッケージングと同様。

インストール先(格納場所)はMavenのリポジトリー。(Windows7の場合は「C:\Users\ユーザー\.m2\repository」)
なので、その下を確認してみると、ちゃんと存在している。

> dir /s c:\users\hishidama\.m2\repository\example1*.jar
 c:\users\hishidama\.m2\repository\com\example\example1\1.0-SNAPSHOT のディレクトリ

2012/07/14  23:23             2,154 example1-1.0-SNAPSHOT.jar
               1 個のファイル               2,154 バイト

pom.xmlを使用せずにローカルリポジトリーへインストールする方法


プロジェクトの依存

Mavenでは、依存するプロジェクト(dependency)をpom.xmlで指定することが出来る。
dependencyを 指定すると、ビルドする際に依存プロジェクトのjarファイルがクラスパスに追加される。

依存プロジェクトのjarファイルがローカルリポジトリー上に存在しない場合は、インターネット上のリモートリポジトリーから(ローカルリポジトリーへ)ダウンロードされる。


例えば、自分のプロジェクトをユーティリティーと本体に分けたとする。
ユーティリティープロジェクトをローカルリポジトリーに登録(インストール)しておけば、本体から参照(依存)することが出来る。

  1. ユーティリティープロジェクトを作る。
    1. アーキタイプから空プロジェクトを作成する。
      mvn archetype:generate -DinteractiveMode=false ^
      -DarchetypeGroupId=org.apache.maven.archetypes ^
      -DarchetypeArtifactId=maven-archetype-quickstart ^
      -DarchetypeVersion=1.1 ^
      -DgroupId=com.example ^
      -DartifactId=example3-util ^
      -Dversion=1.0-SNAPSHOT ^
      -Dpackage=com.example ^
      -Dpackaging=jar
    2. 適当にユーティリティークラスを作る。
      package com.example.util;
      
      public class Util {
      	public static String getMessage() {
      		return "util";
      	}
      }
    3. ビルドしてローカルリポジトリーにインストールする。
      mvn clean install
  2. 主プロジェクトを作る。
    1. アーキタイプから空プロジェクトを作成する。
      mvn archetype:generate -DinteractiveMode=false ^
      -DarchetypeGroupId=org.apache.maven.archetypes ^
      -DarchetypeArtifactId=maven-archetype-quickstart ^
      -DarchetypeVersion=1.1 ^
      -DgroupId=com.example ^
      -DartifactId=example3-main ^
      -Dversion=1.0-SNAPSHOT ^
      -Dpackage=com.example ^
      -Dpackaging=jar
    2. pom.xmlに依存プロジェクトとしてユーティリティープロジェクトを追加する。
      (ユーティリティープロジェクトを作る際に指定したグループID・アーティファクトID・バージョンを指定する)
          <dependency>
            <groupId>com.example</groupId>
            <artifactId>example3-util</artifactId>
            <version>1.0-SNAPSHOT</version>
          </dependency>
    3. 適当にクラスを作る。
      package com.example;
      
      import com.example.util.Util;
      
      public class App {
      	public static void main(String[] args) {
      		System.out.println(Util.getMessage());
      	}
      }
    4. ビルドする。
      mvn clean package
    5. あるいはEclipseの設定を作ってみると、.classpathにユーティリティープロジェクトが加わる。
      mvn eclipse:eclipse
      <classpath>
        <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
        <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
        <classpathentry kind="output" path="target/classes"/>
        <classpathentry kind="var" path="M2_REPO/com/example/example3-util/1.0-SNAPSHOT/example3-util-1.0-SNAPSHOT.jar"/>
        <classpathentry kind="var" path="M2_REPO/junit/junit/3.8.1/junit-3.8.1.jar"/>
        <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
      </classpath>

Maven目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま