概要および事前準備
Apache Maven は Java 用のプロジェクト管理ツールです。テスト、ビルド、javadoc ドキュメント生成などを汎用的な手順で実行できるようになります。Apache Ant の後継です。バージョン 3 について簡単に使用方法をまとめます。事前にこちらからバイナリをダウンロードおよび解凍しておいてください。解凍結果の bin ディレクトリに PATH を通すことで mvn コマンドが使用できるようになります。
$ mvn --version
Apache Maven 3.3.1
Maven home: c:\Users\username\bin\apache-maven-3.3.1\bin\..
...
なお JAVA SDK が動作のために必要です。Oracle のページから JDK をダウンロードおよびインストールして PATH を通しておく必要があります。また、社内ネットワークなどでプロキシ設定が必要な場合は Maven home 内の apache-maven-3.3.1/conf/settings.xml という設定ファイルを編集します。
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
...
<proxies>
<proxy>
<id>myproxy</id>
<active>true</active>
<protocol>http</protocol>
<host>proxy.somewhere.com</host>
<port>8080</port>
<username>proxyuser</username>
<password>somepassword</password>
<nonProxyHosts>*.google.com|ibiblio.org</nonProxyHosts>
</proxy>
</proxies>
...
</settings>
- id: プロキシを複数設定する際にそれらを識別するための ID です。通常は一つですので変更不要です
- active: この proxy 設定を有効にするためには true のままにしておきます
- protocol, host, port: ここに必要な社内ネットワーク情報を記載してください
- username, password: プロキシに認証がかかっている場合はここに記載します。認証がない場合は削除して空文字列にしてください
- nonProxyHosts: プロキシを利用したくないホスト名のリストを記載します。通常は変更不要です
プロジェクトテンプレートの生成
以下のコマンドでテンプレートを生成します。
$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app \
-DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
- artifact: 通常 JAR のことを指します
- group: artifact の集合体です
- maven-archetype-quickstart: 通常の JAVA アプリケーション (JAR) 開発用のテンプレートを出力
その際、必要に応じて Central Repository からパッケージが自動でダウンロードされて $HOME/.m2 に保存されます。Central Repository は yum における base レポジトリのようなものです。artifact が管理されています。後述の POM 内の Dependencies に記載する内容が掲載されていたりします。
生成結果ディレクトリ
my-app/
├── pom.xml
└── src
├── main
│ └── java
│ └── com
│ └── mycompany
│ └── app
│ └── App.java
└── test
└── java
└── com
└── mycompany
└── app
└── AppTest.java
POM ファイルの編集
Project Object Model を意味する POM はプロジェクトの設定ファイルです。編集する必要がある場合はこちらのリファレンスをご参照ください。
例えば、プロジェクトに含めるリソースファイルの既定の場所 ${basedir}/src/main/resources
などを変更するための設定については以下のセクションに記載があります。
JAR ファイルの生成
$ mvn package
$ java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
Hello World!
その他便利なサブコマンド
ビルド結果を削除
$ mvn clean
プロジェクトに欠陥がないことを検証
$ mvn validate
javac 相当の処理だけを実行 (コンパイル)
$ mvn compile
テストのみ実行
$ mvn test
プロジェクトの javadoc ドキュメントを生成
$ mvn site
JDK バージョンを指定する
こちらのページに記載されているとおり、プロジェクトで使用する Java のバージョンを maven-compiler-plugin
によって pom.xml で指定すれば、ビルド時に必要なバージョンを Maven に伝えることができます。Maven が指定された適切な Java でビルドするためには JAVA_HOME
が適切に指定されている必要があります。maven-compiler-plugin
に依らず、JAVA_HOME
で指定された JDK を用いてビルドされます。一時的に変更することで、複数のバージョンの JDK を同じ PC でプロジェクト毎に使い分けることができます。
Windows の例
set JAVA_HOME="C:\Program Files\Java\jdk1.8.0_131"
echo %JAVA_HOME%
Linux の例
export JAVA_HOME=/path/to/java_home
echo $JAVA_HOME
JAR コマンドで展開して MANIFEST.MF
の内容を調べることで、指定した JDK でビルドされたことが確認できます。
jar xvf sample.jar
cat META-INF/MANIFEST.MF
関連記事
- Spring Security フォームログインのサンプルコードSpring フレームワークによる Web アプリケーション開発で、ログイン処理を実装する際は Spring Security が便利です。ここでは特に Spring Boot で Web アプリケーションを開発する場合を対象とし、フォームによる ID/Password ログインを行うためのサンプルコードをまとめます。 公式ドキュメント [Spring Security チュートリアル](http...
- Java配列の宣言方法 (C/C++との違い)Javaの配列 Javaの配列宣言方法はC/C++と似ているようで若干異なる。 初期化しない場合 C/C++の int array[10]; はJavaでは int array[] = new int[10]; となる。同様にC/C++の int array[3][3]; はJavaでは int array[][] = new int[3][3]; となる。 初期化
- PlantUML による UML 図の描き方PlantUML はテキスト形式で表現されたシーケンス図やクラス図といった UML (Unified Modeling Language) 図の情報から画像を生成するためのツールです。簡単な使い方をまとめます。 インストール方法の選択 Atom や Eclipse のプラグインをインストールしてエディタから利用する方法、JAR をダウンロードして Java コマンドで実行する方法、Redmine ...
- Akka HTTP サンプルコード (Scala)Akka アクターを用いて実装された汎用 HTTP フレームワークです。Spray の後継です。コアモジュールである akka-http-core は 2016/2/17 に experimental が外れました。akka-http などのいくつかのサブモジュールは 2016/3/1 現在 experimental のままですが、基本的な
- Kestrel の使用例Kestrel は Message Queue (MQ) の実装のひとつです。一般に MQ はアプリケーション間やプロセス間、スレッド間で非同期に通信するために用いられます。メッセージの送信側は MQ に書き込めば受信側の応答を待たずに次の処理に非同期に進むことができます。Kestrel はわずか 2500 行程の Scala で実装されており JVM で動作します。MQ 自体はメモリ上に存在する...