[Java]
mavenでHelloWorld
5分間でMaven
公式サイトのチュートリアルを訳してみます。
事前知識
あなたはソフトウェアをPCにどうやってインストールするかについて理解していなければならない。
もしあなたがそれについて理解していなければ、どうかあなたの事務所、学校やお金をかければそれを教えてくれるところに
聞いてください。その際はMavenのメーリングリストに聞くのはあまり得策ではないでしょう。
インストール
まず、Mavenをダウンロードしインストーラの指示に従ってください。その後、端末かコマンドプロンプトから以下のようにタイプしてください:
$ mvn --version
さすればあなたのインストールしたMavenのバージョンが以下のように表示されるだろう、例えば:
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 14:51:28+0100) Maven home: D:\apache-maven-3.0.5\bin\.. Java version: 1.6.0_25, vendor: Sun Microsystems Inc. Java home: C:\Program Files\Java\jdk1.6.0_25\jre Default locale: nl_NL, platform encoding: Cp1252 OS name: "windows 7", version: "6.1", arch: "amd64", family: "windows"
あなたのネットワーク設定によっては、追加の設定が必要かもしれません。必要であればGuide to Configuring Mavenを確認してください。
もしあなたがWindowsを使用する場合、WindowsでMavenを使用するための準備を確認するためにWindows Prerequisitesを見ておくべきです
プロジェクトを作成する
あなたはこれから長期滞在するであろうプロジェクトをどこかに作成する必要が有る、どこかにディレクトリを作成しシェルを実行しましょう。
コマンドラインで、以下のようにMavenのgoalを打ち込んでください:
$ mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
もしあなたがMevenをインストールしただけならば、最初の実行には少し時間がかかるでしょう。
これはMavenがローカルのリポジトリに最新の作成物(プラグインのJarファイルやその他のこと)をダウンロードしているからです。
もしかしてあなたはビルド成功までに何回かコマンドを実行しなければいけないかもしれません。これはリモートのサーバが、
あなたのダウンロードの終了までにタイムアウトするかもしれないからです。しかし気にすることはありません、それを修復する方法があります。
あなたは、generateというゴール(目標)によって「artifactId」として与えた名前と同じ名前のディレクトリが作成されることに気がつくでしょう。では、ディレクトリ内に移動しましょう
$ cd my-app
このディレクトリの配下に、以下のような標準プロジェクト構造を見ることが出来る。
my-app |-- pom.xml `-- src |-- main | `-- java | `-- com | `-- mycompany | `-- app | `-- App.java `-- test `-- java `-- com `-- mycompany `-- app `-- AppTest.java
src/main/javaのディレクトリはプロジェクトのソースコードを含みます、src/test/javaのディレクトリはそのテストコードを含みます。そしてpom.xmlは「Project Object Model(=POM)」となります。
- POM
- MavenはJavaのツールです、だからあなたはまずJavaをインストールしなければならない。pom.xmlはMavenプロジェクトの設定のコアにあたるものです。それは任意の方法でプロジェクトをビルドするために必要な情報の大部分を保持する単一の設定ファイルです。POMは巨大であり、 その複雑さで見るものを怯えさせるでしょう、しかしそれを効果的に使うのにその込み入った機能のすべてを理解する必要はありません。このプロジェクトのPOMは以下の通り、
<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>com.mycompany.app</groupId> <artifactId>my-app</artifactId> <version>1.0-SNAPSHOT</version> <packaging>jar</packaging> <name>Maven Quick Start Archetype</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.2</version> <scope>test</scope> </dependency> </dependencies> </project>
- で、今さっきのは何をやったわけ?
- あなたはgoal(目標)に 「archetype:generate」を設定してMavenを実行しました。そして目標に対していろいろな引数を通しました。archetypeという接頭辞は目標を含みます。もしあなたがAntに詳しければ、「task」と同じようなものであると考えるでしょう。この目標はarchtypeにしたがって、単純なプロジェクトを作成します。archtype自体は、一般的な用途のためのgoal(目標)の集合であるとでも言っておけば十分でしょう。例えばjboss-maven-pluginは「いろいろなjbossの項目を扱う」です。
- プロジェクトのビルド
$ mvn package
コマンドラインにはいろいろなアクションが出力されるでしょう。そして最後には以下の通り:
... [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2 seconds [INFO] Finished at: Thu Jul 07 21:34:52 CEST 2011 [INFO] Final Memory: 3M/6M [INFO] ------------------------------------------------------------------------
最初のコマンド実行(archtype:generate)に反して、あなたは単純な単語 - packageを認めるでしょう。目標というよりもこれは段階です。段階とはビルドのライフサイクルの一段階であり、ライフサイクルは段階をひとつながりにしたものです。ある段階が与えられると、Mavenはそのすべての段階をひとつながりに実行します(この際にはMavenによって定義された段階も含みます)。例えば、「compile」の段階を実行すると、実際に実行される段階は以下の通り:
- validate
- generate-sources
- process-sources
- generate-resources
- process-resources
- compile
新しくコンパイルされ、パッケージ化されたJARファイルは以下のようにすれば試すことができます:
$ java -cp target/my-app-1.0-SNAPSHOT.jar com.mycompany.app.App
そうすれば以下のような定型句が出力されるでしょう:
Hello World!
Mavenのツールを使う
Mavenビルドによる各段階
ほとんど網羅的な一覧ではないが、以下が最も一般的なMavenによるビルドのデフォルトライフサイクルです
- validate:プロジェクトを検証することは正しく、すべての必要な情報が利用可能です
- compile:プロジェクトのソースコードをコンパイルする
- test:適切なユニットテストフレームワークを使用してコンパイルされたソースコードをテスト。これらのテストは、パッケージ化された、または展開されたコードを必要とすべきではない
- package:コンパイルされたコードを取得して、JARファイルのように配布可能な形式でパッケージ化する
- integration-test:必要に応じて結合テストを実行できる環境にパッケージを展開する
- verify:パッケージが有効であり、品質を満たしているかどうか検証するために、任意のチェックを実行する
- install:他のプロジェクトの依存関係として使用するためにローカルリポジトリにパッケージをインストールする
- deploy:結合環境作成やリリース用のファイルを作成するため行われ、他の開発者やプロジェクトと共有するためのリモートリポジトリに環境をコピーする
以下が、上記のデフォルトの一覧を差し置いて特筆すべき2つのMavenによるビルドのライフサイクルです
- clean:以前のビルドが作成した成果物をクリーンアップする
- site:このプロジェクトのために、HTMLのドキュメントを生成する(Javadocその他)
ビルドの段階は、実際には、基礎となる目標にマッピングされます。段階ごとに実行する具体的な目標は、プロジェクトのパッケージタイプに依存している。たとえば、「package」には、「jar:jar」を実行します。プロジェクトタイプが「jar」であり、そしてパッケージタイプが「war:war」であれば、お察しの通りそれはWARファイルです。
ひとつのシーケンスにおいてビルドの目標と段階が行われる可能性が有ることは特筆すべき面白い特徴でしょう。
$ mvn clean dependency:copy-dependencies package
このコマンドはプロジェクトをクリーンし、依存関係にあるファイルをコピーし、プロジェクトをパッケージ化します
Site(※主にHTMLファイル)を生成する
$ mvn site
このビルドの段階はプロジェクトのpomファイル情報に基づいてHTMLファイルを生成します。target/site以下に生成されたドキュメントを見ることが出来るでしょう。