Maven-quick-guide
Maven-概要
Mavenとは何ですか?
Mavenは、開発者に完全なビルドライフサイクルフレームワークを提供するプロジェクト管理および理解ツールです。 Mavenは標準のディレクトリレイアウトとデフォルトのビルドライフサイクルを使用しているため、開発チームはプロジェクトのビルドインフラストラクチャをほとんどすぐに自動化できます。
複数の開発チーム環境の場合、Mavenは非常に短時間で標準に従って作業する方法を設定できます。 プロジェクトのセットアップのほとんどはシンプルで再利用可能なため、Mavenを使用すると、レポート、チェック、ビルド、および自動化セットアップのテストを作成しながら開発者の生活が楽になります。
Mavenは開発者に以下を管理する方法を提供します-
- ビルド
- ドキュメンテーション
- 報告
- 依存関係
- SCMs
- リリース
- 分布
- メーリングリスト
要約すると、Mavenはプロジェクトのビルドプロセスを簡素化し、標準化します。 コンパイル、配布、文書化、チームコラボレーション、その他のタスクをシームレスに処理します。 Mavenは再利用性を高め、ほとんどのビルド関連タスクを処理します。
Maven Evolution
Mavenはもともと、ジャカルタタービンプロジェクトの構築プロセスを簡素化するために設計されました。 複数のプロジェクトがあり、各プロジェクトにはわずかに異なるANTビルドファイルが含まれていました。 JARはCVSにチェックインされました。
その後、Apacheグループは、複数のプロジェクトを一緒に構築し、プロジェクト情報を公開し、プロジェクトを展開し、複数のプロジェクト間でJARを共有し、チームのコラボレーションを支援する Maven を開発しました。
目的
Mavenの主な目標は、開発者に以下を提供することです-
- 再利用可能、保守可能、理解しやすいプロジェクトの包括的なモデル。
- この宣言モデルと相互作用するプラグインまたはツール。
Mavenプロジェクトの構造とコンテンツは、MOMシステム全体の基本単位であるProject Object Model(POM)と呼ばれるxmlファイルpom.xmlで宣言されます。 後の章で、POMについて詳しく説明します。
設定より規約
Mavenは Configuration よりも Convention を使用します。つまり、開発者は自分でビルドプロセスを作成する必要はありません。
開発者は、すべての構成の詳細に言及する必要はありません。 Mavenは、プロジェクトに適切なデフォルト動作を提供します。 Mavenプロジェクトが作成されると、Mavenはデフォルトのプロジェクト構造を作成します。 開発者はそれに応じてファイルを配置するだけでよく、pom.xmlで設定を定義する必要はありません。
例として、次の表に、プロジェクトのソースコードファイル、リソースファイル、およびその他の構成のデフォルト値を示します。 仮定すると、 $ \ {basedir} はプロジェクトの場所を示します-
Item | Default |
---|---|
source code | ${basedir}/src/main/java |
Resources | ${basedir}/src/main/resources |
Tests | ${basedir}/src/test |
Complied byte code | ${basedir}/target |
distributable JAR | ${basedir}/target/classes |
プロジェクトをビルドするために、Mavenは、ライフサイクルの目標とプロジェクトの依存関係(Mavenプラグインの機能とデフォルトの規則に依存する)に言及するオプションを開発者に提供します。 プロジェクト管理とビルド関連のタスクの多くは、Mavenプラグインによって維持されます。
開発者は、個々のプラグインがどのように機能するかを理解する必要なく、特定のMavenプロジェクトを構築できます。 Mavenプラグインについては、後の章で詳しく説明します。
Mavenの機能
- ベストプラクティスに従うシンプルなプロジェクトセットアップ。
- すべてのプロジェクトで一貫した使用。
- 自動更新を含む依存関係管理。
- 大きく成長しているライブラリのリポジトリ。
- 拡張性があり、Javaまたはスクリプト言語でプラグインを簡単に作成できます。
- 追加の設定をほとんど、またはまったく必要とせずに、新機能にすぐにアクセスできます。
- モデルベースのビルド-Mavenは、jar、war、メタデータなどの事前定義された出力タイプに任意の数のプロジェクトをビルドできます。
- プロジェクト情報の一貫したサイト-ビルドプロセスと同じメタデータを使用して、mavenは完全なドキュメントを含むWebサイトとPDFを生成できます。
- リリース管理と配布の公開-追加の構成なしで、mavenはCVSなどのソース管理システムと統合し、プロジェクトのリリースを管理します。
- 下位互換性-プロジェクトの複数のモジュールを古いバージョンのMavenからMaven 3に簡単に移植できます。 古いバージョンもサポートできます。
- 自動親バージョン管理-メンテナンスのためにサブモジュールで親を指定する必要はありません。
- 並列ビルド-プロジェクトの依存関係グラフを分析し、スケジュールモジュールを並行してビルドできます。 これを使用すると、パフォーマンスを20〜50%向上させることができます。
- エラーおよび整合性レポートの改善-Mavenはエラーレポートを改善し、エラーの完全な説明を取得するMaven wikiページへのリンクを提供します。
Maven-環境設定
MavenはJavaベースのツールであるため、最初の要件はマシンにJDKをインストールすることです。
システム要件
JDK | 1.7 or above. |
Memory | No minimum requirement. |
Disk Space | No minimum requirement. |
Operating System | No minimum requirement. |
ステップ1-マシンでのJavaインストールの検証
コンソールを開き、次の java コマンドを実行します。
OS | Task | Command |
---|---|---|
Windows | Open Command Console | c:\> java -version |
Linux | Open Command Terminal | $ java -version |
Mac | Open Terminal | machine:~ joseph$ java -version |
すべてのオペレーティングシステムの出力を確認しましょう-
OS | Output |
---|---|
Windows |
java version "1.7.0_60" Java(TM)SEランタイム環境(ビルド1.7.0_60-b19) Java HotSpot(TM)64ビットサーバーVM(ビルド24.60-b09、混合モード) |
Linux |
java version "1.7.0_60" Java(TM)SEランタイム環境(ビルド1.7.0_60-b19) Java HotSpot(TM)64ビットサーバーVM(ビルド24.60-b09、混合モード) |
Mac |
java version "1.7.0_60" Java(TM)SEランタイム環境(ビルド1.7.0_60-b19) Java HotSpot(TM)64ビットサーバーVM(ビルド24.60-b09、混合モード) |
Javaがインストールされていない場合は、https://www.oracle.com/technetwork/java/javase/downloads/indexlからJava Software Development Kit(SDK)をインストールしてください。 このチュートリアルのインストールバージョンとしてJava 1.7.0.60を想定しています。
ステップ2-JAVA環境の設定
*JAVA_HOME* 環境変数を設定して、Javaがマシンにインストールされているベースディレクトリの場所を指すようにします。 たとえば-
OS | Output |
---|---|
Windows | Set the environment variable JAVA_HOME to C:\Program Files\Java\jdk1.7.0_60 |
Linux | export JAVA_HOME=/usr/local/java-current |
Mac | export JAVA_HOME=/Library/Java/Home |
Javaコンパイラの場所をシステムパスに追加します。
OS | Output |
---|---|
Windows | Append the string “;C:\Program Files\Java\jdk1.7.0.60\bin” to the end of the system variable, Path. |
Linux | export PATH=$PATH:$JAVA_HOME/bin/ |
Mac | not required |
上記のように java -version コマンドを使用してJavaインストールを確認します。
ステップ3-Mavenアーカイブのダウンロード
[[1]] 2.2.1をダウンロードします。
OS | Archive name |
---|---|
Windows | apache-maven-3.3.1-bin.zip |
Linux | apache-maven-3.3.1-bin.tar.gz |
Mac | apache-maven-3.3.1-bin.tar.gz |
ステップ4-Mavenアーカイブの抽出
Maven 3.3.1をインストールするディレクトリにアーカイブを抽出します。 サブディレクトリapache-maven-3.3.1がアーカイブから作成されます。
OS | Location (can be different based on your installation) |
---|---|
Windows | C:\Program Files\Apache Software Foundation\apache-maven-3.3.1 |
Linux | /usr/local/apache-maven |
Mac | /usr/local/apache-maven |
ステップ5-Maven環境変数を設定する
M2_HOME、M2、MAVEN_OPTSを環境変数に追加します。
OS | Output |
---|---|
Windows |
Set the environment variables using system properties. M2_HOME = C:\ Program Files \ Apache Software Foundation \ apache-maven-3.3.1 M2 =%M2_HOME%\ bin MAVEN_OPTS = -Xms256m -Xmx512m |
Linux |
Open command terminal and set environment variables. export M2_HOME =/usr/local/apache-maven/apache-maven-3.3.1 export M2 = $ M2_HOME/bin エクスポートMAVEN_OPTS = -Xms256m -Xmx512m |
Mac |
Open command terminal and set environment variables. export M2_HOME =/usr/local/apache-maven/apache-maven-3.3.1 export M2 = $ M2_HOME/bin エクスポートMAVEN_OPTS = -Xms256m -Xmx512m |
手順6-Maven binディレクトリの場所をシステムパスに追加する
次に、システムパスにM2変数を追加します。
OS | Output |
---|---|
Windows | Append the string ;%M2% to the end of the system variable, Path. |
Linux | export PATH=$M2:$PATH |
Mac | export PATH=$M2:$PATH |
手順7-Mavenインストールの確認
コンソールを開き、次の mvn コマンドを実行します。
OS | Task | Command |
---|---|---|
Windows | Open Command Console | c:\> mvn --version |
Linux | Open Command Terminal | $ mvn --version |
Mac | Open Terminal | machine:~ joseph$ mvn --version |
最後に、上記のコマンドの出力を確認します。次のようになります-
OS | Output |
---|---|
Windows |
Apache Maven 3.3.1 (r801777; 2009-08-07 00:46:01+0530) Javaバージョン:1.7.0_60 Javaホーム:C:\ Program Files \ Java \ jdk1.7.0_60 \ jre |
Linux |
Apache Maven 3.3.1 (r801777; 2009-08-07 00:46:01+0530) Javaバージョン:1.7.0_60 Javaホーム:C:\ Program Files \ Java \ jdk1.7.0_60 \ jre |
Mac |
Apache Maven 3.3.1 (r801777; 2009-08-07 00:46:01+0530) Javaバージョン:1.7.0_60 Javaホーム:C:\ Program Files \ Java \ jdk1.7.0_60 \ jre |
Maven-POM
POMはProject Object Modelの略です。 これは、Mavenの基本的な作業単位です。 これは、pom.xmlとしてプロジェクトのベースディレクトリにあるXMLファイルです。
POMには、プロジェクトに関する情報と、Mavenがプロジェクトをビルドするために使用するさまざまな構成の詳細が含まれています。
POMには目標とプラグインも含まれています。 タスクまたは目標の実行中、Mavenは現在のディレクトリでPOMを探します。 POMを読み取り、必要な構成情報を取得して、目標を実行します。 POMで指定できる構成の一部は次のとおりです-
- プロジェクトの依存関係
- プラグイン
- 目標
- ビルドプロファイル
- プロジェクトバージョン
- 開発者
- メーリングリスト
POMを作成する前に、プロジェクトの group (groupId)、 name (artifactId)、およびバージョンを決定する必要があります。これらの属性は、リポジトリ内のプロジェクトを一意に識別するのに役立ちます。
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.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
</project>
プロジェクトごとに1つのPOMファイルが必要であることに注意してください。
- すべてのPOMファイルには、 project 要素と3つの必須フィールド: groupId、artifactId、version が必要です。
- リポジトリ内のプロジェクト表記は groupId:artifactId:version です。
- POMの最小要件-
シニア
ノードと説明
1
プロジェクトルート
これはプロジェクトのルートタグです。 apacheスキーマやw3.org仕様などの基本的なスキーマ設定を指定する必要があります。
2
モデルバージョン
モデルバージョンは4.0.0である必要があります。
3
*groupId*
これはプロジェクトのグループのIDです。 これは通常、組織またはプロジェクト間で一意です。 たとえば、銀行グループcom.company.bankには、すべての銀行関連プロジェクトがあります。
4
*artifactId*
これはプロジェクトのIDです。 通常、これはプロジェクトの名前です。 たとえば、消費者銀行。 groupIdとともに、artifactIdはリポジトリ内のアーティファクトの場所を定義します。
5
バージョン
これはプロジェクトのバージョンです。 groupIdとともに、アーティファクトのリポジトリ内でバージョンを相互に分離するために使用されます。 たとえば-
*com.company.bank:consumer-banking:1.0*
- com.company.bank:consumer-banking:1.1。*
スーパーPOM
スーパーPOMはMavenのデフォルトPOMです。 すべてのPOMは、(明示的に定義されているかどうかにかかわらず)親またはデフォルトから継承します。 このベースPOMは Super POM と呼ばれ、デフォルトで継承される値が含まれています。
Mavenは、効果的なPOM(スーパーポンからの構成とプロジェクト構成)を使用して、関連する目標を実行します。 開発者がpom.xmlで最小限の構成詳細を指定するのに役立ちます。 構成は簡単にオーバーライドできますが。
スーパーPOMのデフォルト設定を確認する簡単な方法は、次のコマンドを実行することです: mvn help:effective-pom
コンピューター上の任意のディレクトリにpom.xmlを作成します。上記のサンプルpomのコンテンツを使用します。
以下の例では、C:\ MVN \ projectフォルダーにpom.xmlを作成しました。
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。
C:\MVN\project>mvn help:effective-pom
Mavenは処理を開始し、有効なポンを表示します。
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'help'.
[INFO] ------------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.project-group:project-name:jar:1.0
[INFO] task-segment: [help:effective-pom] (aggregator-style)
[INFO] ------------------------------------------------------------------------
[INFO] [help:effective-pom {execution: default-cli}]
[INFO]
.....
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Thu Jul 05 11:41:51 IST 2012
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
継承、補間、およびプロファイルが適用された後、結果としてコンソールに表示される有効なPOM。
<?xml version="1.0" encoding="UTF-8"?>
<!-- ============================================== -->
<!-- -->
<!-- Generated by Maven Help Plugin on 2015-04-09T11:41:51 -->
<!-- See: http://maven.apache.org/plugins/maven-help-plugin/-->
<!-- -->
<!-- ==============================================-->
<!-- ==============================================-->
<!-- -->
<!-- Effective POM for project -->
<!-- 'com.companyname.project-group:project-name:jar:1.0' -->
<!-- -->
<!-- ============================================== -->
<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.companyname.project-group</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<sourceDirectory>C:\MVN\project\src\main\java</sourceDirectory>
<scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
<testSourceDirectory>C:\MVN\project\src\test\java</testSourceDirectory>
<outputDirectory>C:\MVN\project\target\classes</outputDirectory>
<testOutputDirectory>C:\MVN\project\target\test-classes</testOutputDirectory>
<resources>
<resource>
<mergeId>resource-0</mergeId>
<directory>C:\MVN\project\src\main\resources</directory>
</resource>
</resources>
<testResources>
<testResource>
<mergeId>resource-1</mergeId>
<directory>C:\MVN\project\src\test\resources</directory>
</testResource>
</testResources>
<directory>C:\MVN\project\target</directory>
<finalName>project-1.0</finalName>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.3</version>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin< /artifactId>
<version>2.2-beta-2</version>
</plugin>
<plugin>
<artifactId>maven-clean-plugin< /artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
</plugin>
<plugin>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.0</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.4</version>
</plugin>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.1</version>
</plugin>
<plugin>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.1</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.5</version>
</plugin>
<plugin>
<artifactId>maven-plugin-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-rar-plugin</artifactId>
<version>2.2</version>
</plugin>
<plugin>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-8</version>
</plugin>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.3</version>
</plugin>
<plugin>
<artifactId>maven-site-plugin</artifactId>
<version>2.0-beta-7</version>
</plugin>
<plugin>
<artifactId>maven-source-plugin</artifactId>
<version>2.0.4</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.1-alpha-2</version>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<artifactId>maven-help-plugin</artifactId>
<version>2.1.1</version>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Repository Switchboard</name>
<url>http://repo1.maven.org/maven2</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<releases>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<id>central</id>
<name>Maven Plugin Repository</name>
<url>http://repo1.maven.org/maven2</url>
</pluginRepository>
</pluginRepositories>
<reporting>
<outputDirectory>C:\MVN\project\target/site</outputDirectory>
</reporting>
</project>
上記のpom.xmlでは、デフォルトのプロジェクトソースフォルダー構造、出力ディレクトリ、必要なプラグイン、リポジトリ、レポートディレクトリを確認できます。Mavenは目的の目標を実行する際に使用します。
Maven pom.xmlは、手動で記述する必要もありません。 Mavenは、プロジェクトを作成するための多数のアーキタイププラグインを提供します。これらのプラグインは、プロジェクト構造とpom.xmlを順番に作成します
Maven-ライフサイクルの構築
ビルドライフサイクルとは何ですか?
ビルドライフサイクルは、明確に定義された一連のフェーズであり、目標が実行される順序を定義します。 ここで、フェーズはライフサイクルの段階を表します。 例として、典型的な* Mavenビルドライフサイクル*は、次の一連のフェーズで構成されています。
Phase | Handles | Description |
---|---|---|
prepare-resources | resource copying | Resource copying can be customized in this phase. |
validate | Validating the information | Validates if the project is correct and if all necessary information is available. |
compile | compilation | Source code compilation is done in this phase. |
Test | Testing | Tests the compiled source code suitable for testing framework. |
package | packaging | This phase creates the JAR/WAR package as mentioned in the packaging in POM.xml. |
install | installation | This phase installs the package in local/remote maven repository. |
Deploy | Deploying | Copies the final package to the remote repository. |
ゴール*を登録する *pre および post フェーズが常にあり、特定のフェーズの前または後に実行する必要があります。
Mavenはプロジェクトの構築を開始すると、定義されたフェーズのシーケンスをステップ実行し、各フェーズに登録されている目標を実行します。
Mavenには次の3つの標準ライフサイクルがあります-
- クリーン
- デフォルト(またはビルド)
- site
- 目標*は、プロジェクトの構築と管理に貢献する特定のタスクを表します。 ゼロ以上のビルドフェーズにバインドできます。 ビルドフェーズにバインドされていない目標は、直接呼び出しによってビルドライフサイクル外で実行できます。
実行の順序は、目標とビルドフェーズが呼び出される順序によって異なります。 たとえば、次のコマンドを検討してください。 clean および package 引数はビルドフェーズであり、 dependency:copy-dependencies は目標です。
mvn clean dependency:copy-dependencies package
ここでは、最初に_clean_フェーズが実行され、次に* dependency:copy-dependenciesゴール*が実行され、最後に_package_フェーズが実行されます。
クリーンライフサイクル
_mvn post-clean_コマンドを実行すると、Mavenは次のフェーズで構成されるクリーンライフサイクルを呼び出します。
- プレクリーン
- クリーン *ポストクリーン
Mavenクリーンゴール(clean:clean)は、クリーンライフサイクルの_clean_フェーズにバインドされています。* clean:cleangoal *は、ビルドディレクトリを削除することにより、ビルドの出力を削除します。 したがって、_mvn clean_コマンドを実行すると、Mavenはビルドディレクトリを削除します。
クリーンライフサイクルの上記のフェーズのいずれかの目標に言及することにより、この動作をカスタマイズできます。
次の例では、maven-antrun-plugin:runゴールをクリーニング前、クリーニング、およびクリーニング後のフェーズに追加します。 これにより、クリーンライフサイクルのフェーズを表示するテキストメッセージをエコーできます。
C:\ MVN \ projectフォルダーにpom.xmlを作成しました。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-clean</id>
<phase>pre-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-clean</id>
<phase>post-clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。
C:\MVN\project>mvn post-clean
Mavenは、クリーンライフサイクルのすべてのフェーズの処理と表示を開始します。
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-clean}]
[INFO] Executing tasks
[echo] pre-clean phase
[INFO] Executed tasks
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] [antrun:run {execution: id.post-clean}]
[INFO] Executing tasks
[echo] post-clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: > 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
*pre-clean* およびcleanを表示する *mvn clean* コマンドのチューニングを試すことができます。 *post-clean* フェーズでは何も実行されません。
デフォルト(またはビルド)ライフサイクル
これはMavenの主要なライフサイクルであり、アプリケーションの構築に使用されます。 次の21のフェーズがあります。
Sr.No. | Lifecycle Phase & Description |
---|---|
1 |
validate プロジェクトが正しく、ビルドプロセスを完了するために必要なすべての情報が利用可能かどうかを検証します。 |
2 |
initialize プロパティの設定など、ビルド状態を初期化します。 |
3 |
generate-sources コンパイルフェーズに含めるソースコードを生成します。 |
4 |
process-sources ソースコードを処理します。たとえば、値をフィルタリングします。 |
5 |
generate-resources パッケージに含めるリソースを生成します。 |
6 |
process-resources リソースを宛先ディレクトリにコピーして処理し、パッケージ化フェーズの準備をします。 |
7 |
compile プロジェクトのソースコードをコンパイルします。 |
8 |
process-classes 生成されたファイルをコンパイルから後処理します。たとえば、Javaクラスでバイトコードの強化/最適化を行います。 |
9 |
generate-test-sources コンパイルフェーズに含めるテストソースコードを生成します。 |
10 |
process-test-sources テストソースコードを処理します。たとえば、値をフィルタリングします。 |
11 |
test-compile テストソースコードをテスト宛先ディレクトリにコンパイルします。 |
12 |
process-test-classes テストコードファイルのコンパイルから生成されたファイルを処理します。 |
13 |
test 適切な単体テストフレームワークを使用してテストを実行します(Junitは1つです)。 |
14 |
prepare-package 実際のパッケージングの前に、パッケージの準備に必要な操作を実行します。 |
15 |
package コンパイルされたコードを取得し、JAR、WAR、EARファイルなどの配布可能な形式でパッケージ化します。 |
16 |
pre-integration-test 統合テストを実行する前に必要なアクションを実行します。 たとえば、必要な環境を設定します。 |
17 |
integration-test 必要に応じて、パッケージを処理し、統合テストを実行できる環境に展開します。 |
18 |
post-integration-test 統合テストの実行後に必要なアクションを実行します。 たとえば、環境のクリーンアップ。 |
19 |
verify 検査を実行して、パッケージが有効で品質基準を満たしていることを確認します。 |
20 |
install パッケージをローカルリポジトリにインストールします。これは、他のプロジェクトの依存関係としてローカルで使用できます。 |
21 |
deploy 最終パッケージをリモートリポジトリにコピーして、他の開発者やプロジェクトと共有します。 |
言及する価値があるMavenライフサイクルに関連するいくつかの重要な概念があります-
- mvn compile など、Mavenコマンドを介してフェーズが呼び出されると、そのフェーズまでのフェーズのみが実行されます。
- パッケージのタイプ(JAR/WAR/EAR)に応じて、Mavenライフサイクルのさまざまなフェーズに異なるMavenゴールがバインドされます。
次の例では、Buildライフサイクルのいくつかのフェーズにmaven-antrun-plugin:runゴールを添付します。 これにより、ライフサイクルのフェーズを表示するテキストメッセージをエコーできます。
C:\ MVN \ projectフォルダーのpom.xmlを更新しました。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.validate</id>
<phase>validate</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>validate phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.compile</id>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>compile phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.test</id>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>test phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.package</id>
<phase>package</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>package phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.deploy</id>
<phase>deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。
C:\MVN\project>mvn compile
Mavenは処理を開始し、ビルドライフサイクルのコンパイルフェーズまでのフェーズを表示します。
[INFO] Scanning for projects...
[INFO] -----------------------------------------------------------------
-
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [compile]
[INFO] -----------------------------------------------------------------
-
[INFO] [antrun:run {execution: id.validate}]
[INFO] Executing tasks
[echo] validate phase
[INFO] Executed tasks
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered
resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\project\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [antrun:run {execution: id.compile}]
[INFO] Executing tasks
[echo] compile phase
[INFO] Executed tasks
[INFO] -----------------------------------------------------------------
-
[INFO] BUILD SUCCESSFUL
[INFO] -----------------------------------------------------------------
-
[INFO] Total time: 2 seconds
[INFO] Finished at: Sat Jul 07 20:18:25 IST 2012
[INFO] Final Memory: 7M/64M
[INFO] -----------------------------------------------------------------
-
サイトのライフサイクル
Maven Siteプラグインは通常、レポートを作成したり、サイトを展開したりするための新しいドキュメントを作成するために使用されます。 次のフェーズがあります-
- プレサイト
- site
- ポストサイト
- サイト展開
次の例では、サイトライフサイクルのすべての段階に maven-antrun-plugin:run ゴールを添付します。 これにより、ライフサイクルのフェーズを表示するテキストメッセージをエコーできます。
C:\ MVN \ projectフォルダーのpom.xmlを更新しました。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.pre-site</id>
<phase>pre-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>pre-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site</id>
<phase>site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.post-site</id>
<phase>post-site</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>post-site phase</echo>
</tasks>
</configuration>
</execution>
<execution>
<id>id.site-deploy</id>
<phase>site-deploy</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>site-deploy phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。
C:\MVN\project>mvn site
Mavenは、サイトライフサイクルからサイトフェーズまでのフェーズの処理と表示を開始します。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [site]
[INFO] ------------------------------------------------------------------
[INFO] [antrun:run {execution: id.pre-site}]
[INFO] Executing tasks
[echo] pre-site phase
[INFO] Executed tasks
[INFO] [site:site {execution: default-site}]
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Project Plugins" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO] [antrun:run {execution: id.site}]
[INFO] Executing tasks
[echo] site phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Sat Jul 07 15:25:10 IST 2012
[INFO] Final Memory: 24M/149M
[INFO] ------------------------------------------------------------------
Maven-ビルドプロファイル
ビルドプロファイルとは何ですか?
ビルドプロファイルは設定値のセットであり、Mavenビルドのデフォルト値を設定または上書きするために使用できます。 ビルドプロファイルを使用すると、プロダクションv/s開発環境などのさまざまな環境に合わせてビルドをカスタマイズできます。
プロファイルは、activeProfiles/profiles要素を使用してpom.xmlファイルで指定され、さまざまな方法でトリガーされます。 プロファイルはビルド時にPOMを変更し、さまざまなターゲット環境(たとえば、開発、テスト、および運用環境でのデータベースサーバーのパス)にパラメーターを与えるために使用されます。
ビルドプロファイルの種類
ビルドプロファイルには、主に3つのタイプがあります。
Type | Where it is defined |
---|---|
Per Project | Defined in the project POM file, pom.xml |
Per User | Defined in Maven settings xml file (%USER_HOME%/.m2/settings.xml) |
Global | Defined in Maven global settings xml file (%M2_HOME%/conf/settings.xml) |
プロファイルのアクティブ化
Mavenビルドプロファイルは、さまざまな方法でアクティブ化できます。
- コマンドコンソール入力を明示的に使用します。
- Maven設定を通じて。
- 環境変数(ユーザー/システム変数)に基づきます。
- OS設定(たとえば、Windowsファミリー)。
- ファイルの存在/欠落。
プロファイルのアクティブ化の例
あなたのプロジェクトの次のディレクトリ構造を想定してみましょう-
今、 src/main/resources の下に、3つの環境固有のファイルがあります-
Sr.No. | File Name & Description |
---|---|
1 |
env.properties プロファイルが記載されていない場合に使用されるデフォルト構成。 |
2 |
env.test.properties テストプロファイルを使用する場合のテスト構成。 |
3 |
env.prod.properties prodプロファイルが使用される場合の実動構成。 |
明示的なプロファイルのアクティブ化
次の例では、maven-antrun-plugin:runゴールを添付してフェーズをテストします。 これにより、さまざまなプロファイルのテキストメッセージをエコーできます。 pom.xmlを使用してさまざまなプロファイルを定義し、mavenコマンドを使用してコマンドコンソールでプロファイルをアクティブにします。
C:\ MVN \ projectフォルダーに次のpom.xmlを作成したとします。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<profiles>
<profile>
<id>test</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<phase>test</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>Using env.test.properties</echo>
<copy file="src/main/resources/env.test.properties"
tofile="${project.build.outputDirectory}
/env.properties"/>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。 -Pオプションを使用して、引数としてプロファイル名を渡します。
C:\MVN\project>mvn test -Ptest
Mavenは、テストビルドプロファイルの結果の処理と表示を開始します。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [test]
[INFO] ------------------------------------------------------------------
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] Copying 3 resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\project\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\project\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
There are no tests to run.
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
[INFO] [antrun:run {execution: default}]
[INFO] Executing tasks
[echo] Using env.test.properties
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Sun Jul 08 14:55:41 IST 2012
[INFO] Final Memory: 8M/64M
[INFO] ------------------------------------------------------------------
演習として、次の手順を実行できます-
- pom.xmlのprofiles要素に別のprofile要素を追加します(既存のprofile要素をコピーして、profile要素が終了する場所に貼り付けます)。
- このプロファイル要素のIDをtestからnormalに更新します。
- タスクセクションを更新してenv.propertiesをエコーし、env.propertiesをターゲットディレクトリにコピーします。
- 上記の3つの手順を繰り返し、idをprodに更新し、env.prod.propertiesのタスクセクションを更新します。
- それで全部です。 これで、3つのビルドプロファイル(normal/test/prod)の準備ができました。
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。 -Pオプションを使用して、プロファイル名を引数として渡します。
C:\MVN\project>mvn test -Pnormal
C:\MVN\project>mvn test -Pprod
ビルドの出力を確認して、違いを確認します。
Maven設定によるプロファイルのアクティブ化
%USER_HOME%/。m2ディレクトリで利用可能なMaven settings.xml ファイルを開きます。*%USER_HOME%*はユーザーのホームディレクトリを表します。 settings.xmlファイルがない場合は、新しいファイルを作成してください。
以下の例に示すように、アクティブプロファイルノードを使用して、テストプロファイルをアクティブプロファイルとして追加します。
<settings 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/settings-1.0.0.xsd">
<mirrors>
<mirror>
<id>maven.dev.snaponglobal.com</id>
<name>Internal Artifactory Maven repository</name>
<url>http://repo1.maven.org/maven2/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<activeProfiles>
<activeProfile>test</activeProfile>
</activeProfiles>
</settings>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。 -Pオプションを使用してプロファイル名を渡さないでください。 Mavenは、アクティブなプロファイルであるテストプロファイルの結果を表示します。
C:\MVN\project>mvn test
環境変数を介したプロファイルのアクティブ化
次に、maven settings.xmlからアクティブなプロファイルを削除し、pom.xmlに記載されているテストプロファイルを更新します。 以下に示すように、アクティベーション要素をプロファイル要素に追加します。
テストプロファイルは、システムプロパティ「env」が値「test」で指定されたときにトリガーされます。 環境変数「env」を作成し、その値を「test」に設定します。
<profile>
<id>test</id>
<activation>
<property>
<name>env</name>
<value>test</value>
</property>
</activation>
</profile>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。
C:\MVN\project>mvn test
オペレーティングシステムを介したプロファイルのアクティブ化
以下に示すように、OSの詳細を含めるアクティベーション要素。 このテストプロファイルは、システムがWindows XPの場合にトリガーされます。
<profile>
<id>test</id>
<activation>
<os>
<name>Windows XP</name>
<family>Windows</family>
<arch>x86</arch>
<version>5.1.2600</version>
</os>
</activation>
</profile>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。 -Pオプションを使用してプロファイル名を渡さないでください。 Mavenは、アクティブなプロファイルであるテストプロファイルの結果を表示します。
C:\MVN\project>mvn test
存在/欠落ファイルによるプロファイルのアクティブ化
以下に示すように、OSの詳細を含めるためのアクティベーション要素になりました。 target/generated-sources/axistools/wsdl2java/com/companyname/group がない場合、テストプロファイルがトリガーされます。
<profile>
<id>test</id>
<activation>
<file>
<missing>target/generated-sources/axistools/wsdl2java/
com/companyname/group</missing>
</file>
</activation>
</profile>
コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。 -Pオプションを使用してプロファイル名を渡さないでください。 Mavenは、アクティブなプロファイルであるテストプロファイルの結果を表示します。
C:\MVN\project>mvn test
Maven-リポジトリ
Mavenリポジトリとは何ですか?
Mavenの用語では、リポジトリは、すべてのプロジェクトjar、ライブラリjar、プラグイン、またはその他のプロジェクト固有のアーティファクトが保存され、Mavenで簡単に使用できるディレクトリです。
Mavenリポジトリには3つのタイプがあります。 次の図は、これら3つのタイプに関するアイデアを示しています。
- 地元
- 中央
- 遠い
ローカルリポジトリ
Mavenローカルリポジトリは、マシン上のフォルダーの場所です。 初めてmavenコマンドを実行すると作成されます。
Mavenローカルリポジトリは、プロジェクトのすべての依存関係(ライブラリjar、プラグインjarなど)を保持します。 Mavenビルドを実行すると、Mavenはすべての依存関係jarをローカルリポジトリに自動的にダウンロードします。 プロジェクトがビルドされるたびに、リモートマシンに保存されている依存関係への参照を避けるのに役立ちます。
Mavenローカルリポジトリは、デフォルトではMUSERによって%USER_HOME%ディレクトリに作成されます。 デフォルトの場所を上書きするには、%M2_HOME%\ confディレクトリにあるMaven 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">
<localRepository>C:/MyLocalRepository</localRepository>
</settings>
Mavenコマンドを実行すると、Mavenはカスタムパスに依存関係をダウンロードします。
中央リポジトリ
Maven中央リポジトリは、Mavenコミュニティによって提供されるリポジトリです。 よく使用されるライブラリが多数含まれています。
Mavenがローカルリポジトリで依存関係を見つけられない場合、次のURLを使用して中央リポジトリで検索を開始します-https://repo1.maven.org/maven2/
中央リポジトリの重要な概念は次のとおりです-
- このリポジトリは、Mavenコミュニティによって管理されています。
- 設定する必要はありません。
- 検索するにはインターネットアクセスが必要です。
中央のMavenリポジトリのコンテンツを参照するために、Mavenコミュニティはhttps://search.maven.org/#browseというURLを提供しています。 このライブラリを使用すると、開発者は中央リポジトリで利用可能なすべてのライブラリを検索できます。
リモートリポジトリ
Mavenは、中央リポジトリでも言及された依存関係を見つけられない場合があります。 次に、ビルドプロセスを停止し、コンソールにエラーメッセージを出力します。 このような状況を防ぐために、Mavenは Remote Repository の概念を提供します。これは、必要なライブラリまたは他のプロジェクトjarを含む開発者独自のカスタムリポジトリです。
たとえば、下記のPOM.xmlを使用すると、Mavenは同じpom.xmlに記載されているリモートリポジトリから依存関係(中央リポジトリでは使用不可)をダウンロードします。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>com.companyname.common-lib</groupId>
<artifactId>common-lib</artifactId>
<version>1.0.0</version>
</dependency>
<dependencies>
<repositories>
<repository>
<id>companyname.lib1</id>
<url>http://download.companyname.org/maven2/lib1</url>
</repository>
<repository>
<id>companyname.lib2</id>
<url>http://download.companyname.org/maven2/lib2</url>
</repository>
</repositories>
</project>
Maven依存検索シーケンス
Mavenビルドコマンドを実行すると、Mavenは次の順序で依存関係ライブラリの検索を開始します-
- *ステップ1 *-ローカルリポジトリ内の検索依存関係が見つからない場合は、ステップ2に進み、それ以外の場合はさらに処理を実行します。
- *ステップ2 *-中央リポジトリで依存関係を検索します。見つからない場合、リモートリポジトリ/リポジトリが記載されている場合は、ステップ4に進みます。 そうでない場合は、将来の参照のためにローカルリポジトリにダウンロードされます。
- *ステップ3 *-リモートリポジトリが言及されていない場合、Mavenは処理を停止し、エラー(依存関係が見つかりません)をスローします。
- *ステップ4 *-リモートリポジトリまたはリポジトリで依存関係を検索します。見つかった場合は、将来の参照のためにローカルリポジトリにダウンロードされます。 そうでない場合、Mavenは処理を停止し、エラー(依存関係が見つかりません)をスローします。
Maven-プラグイン
Mavenプラグインとは何ですか?
Mavenは実際にはすべてのタスクがプラグインによって実際に行われるプラグイン実行フレームワークです。 Mavenプラグインは一般的に使用されます-
- jarファイルを作成する
- 戦争ファイルを作成する
- コードファイルをコンパイルする
- コードの単体テスト
- プロジェクトドキュメントを作成する *プロジェクトレポートを作成する
プラグインは通常、次の構文を使用して実行できる目標のセットを提供します-
mvn [plugin-name]:[goal-name]
たとえば、次のコマンドを実行することにより、maven-compiler-pluginのcompile-goalを使用してJavaプロジェクトをコンパイルできます。
mvn compiler:compile
プラグインの種類
Mavenは次の2種類のプラグインを提供しました-
Sr.No. | Type & Description |
---|---|
1 |
これらはビルドプロセス中に実行され、pom.xmlの<build/>要素で構成する必要があります。 |
2 |
Reporting plugins これらはサイト生成プロセス中に実行され、pom.xmlの<reporting/>要素で構成する必要があります。 |
以下は、いくつかの一般的なプラグインのリストです-
Sr.No. | Plugin & Description |
---|---|
1 |
clean ビルド後にターゲットをクリーンアップします。 ターゲットディレクトリを削除します。 |
2 |
compiler Javaソースファイルをコンパイルします。 |
3 |
surefire JUnit単体テストを実行します。 テストレポートを作成します。 |
4 |
jar 現在のプロジェクトからJARファイルをビルドします。 |
5 |
war 現在のプロジェクトからWARファイルをビルドします。 |
6 |
javadoc プロジェクトのJavadocを生成します。 |
7 |
antrun ビルドの任意のフェーズからantタスクのセットを実行します。 |
例
例で maven-antrun-plugin を広く使用して、コンソールにデータを印刷しました。 ビルドプロファイルの章を参照してください。 よりよく理解して、C:\ MVN \ projectフォルダーにpom.xmlを作成してみましょう。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.1</version>
<executions>
<execution>
<id>id.clean</id>
<phase>clean</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<tasks>
<echo>clean phase</echo>
</tasks>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
次に、コマンドコンソールを開き、pom.xmlを含むフォルダーに移動して、次の mvn コマンドを実行します。
C:\MVN\project>mvn clean
Mavenは、クリーンライフサイクルのクリーンフェーズの処理と表示を開始します。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building Unnamed - com.companyname.projectgroup:project:jar:1.0
[INFO] task-segment: [post-clean]
[INFO] ------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [antrun:run {execution: id.clean}]
[INFO] Executing tasks
[echo] clean phase
[INFO] Executed tasks
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: < 1 second
[INFO] Finished at: Sat Jul 07 13:38:59 IST 2012
[INFO] Final Memory: 4M/44M
[INFO] ------------------------------------------------------------------
上記の例は、次の重要な概念を示しています-
- プラグインは、plugins要素を使用してpom.xmlで指定されます。
- 各プラグインには複数の目標があります。 phase要素を使用して、プラグインが処理を開始する場所からフェーズを定義できます。 clean フェーズを使用しました。 *プラグインの目標にバインドすることにより、実行するタスクを構成できます。 echo タスクを_maven-antrun-plugin_の *run ゴールにバインドしました。
- ローカルリポジトリで利用できない場合、Mavenはプラグインをダウンロードし、処理を開始します。
Maven-プロジェクトの作成
Mavenは archetype プラグインを使用してプロジェクトを作成します。 単純なJavaアプリケーションを作成するには、maven-archetype-quickstartプラグインを使用します。 以下の例では、C:\ MVNフォルダーにMavenベースのJavaアプリケーションプロジェクトを作成します。
コマンドコンソールを開き、C:\ MVNディレクトリに移動して、次の mvn コマンドを実行します。
C:\MVN>mvn archetype:generate
-DgroupId = com.companyname.bank
-DartifactId = consumerBanking
-DarchetypeArtifactId = maven-archetype-quickstart
-DinteractiveMode = false
Mavenは処理を開始し、完全なJavaアプリケーションプロジェクト構造を作成します。
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] -------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.0
[INFO] -------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.bank
[INFO] Parameter: packageName, Value: com.companyname.bank
[INFO] Parameter: package, Value: com.companyname.bank
[INFO] Parameter: artifactId, Value: consumerBanking
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\consumerBanking
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
[INFO] Total time: 14 seconds
[INFO] Finished at: Tue Jul 10 15:38:58 IST 2012
[INFO] Final Memory: 21M/124M
[INFO] ------------------------------------------------------------------
C:/MVNディレクトリに移動します。 コンシューマーバンキング(artifactIdで指定)という名前のJavaアプリケーションプロジェクトが作成されます。 Mavenは、次に示すように標準のディレクトリレイアウトを使用します-
上記の例を使用すると、次の重要な概念を理解できます-
Sr.No. | Folder Structure & Description |
---|---|
1 |
consumerBanking srcフォルダーとpom.xmlが含まれています |
2 |
src/main/java パッケージ構造(com/companyName/bank)の下にJavaコードファイルが含まれています。 |
3 |
src/main/test パッケージ構造(com/companyName/bank)の下にテストJavaコードファイルが含まれています。 |
4 |
src/main/resources イメージ/プロパティファイルが含まれています(上記の例では、この構造を手動で作成する必要があります)。 |
観察すると、MavenがサンプルのJavaソースファイルとJavaテストファイルも作成していることがわかります。 C:\ MVN \ consumerBanking \ src \ main \ java \ com \ companyname \ bankフォルダーを開くと、App.javaが表示されます。
package com.companyname.bank;
/**
*Hello world!
*
*/
public class App {
public static void main( String[] args ){
System.out.println( "Hello World!" );
}
}
C:\ MVN \ consumerBanking \ src \ test \ java \ com \ companyname \ bankフォルダーを開いて、AppTest.javaを表示します。
package com.companyname.bank;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
*Unit test for simple App.
*/
public class AppTest extends TestCase {
/**
*Create the test case
*
*@param testName name of the test case
*/
public AppTest( String testName ) {
super( testName );
}
/**
*@return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite( AppTest.class );
}
/**
*Rigourous Test :-)
*/
public void testApp() {
assertTrue( true );
}
}
開発者は上記の表に記載されているようにファイルを配置する必要があり、Mavenはビルド関連の複雑さをすべて処理します。
次の章では、maven Build and Test Projectを使用してプロジェクトをビルドおよびテストする方法について説明します。
Maven-プロジェクトのビルドとテスト
プロジェクト作成の章で学んだことは、Mavenを使用してJavaアプリケーションを作成する方法です。 次に、アプリケーションをビルドしてテストする方法を見ていきます。
Javaアプリケーションを作成したC:/MVNディレクトリに移動します。 consumerBanking フォルダーを開きます。 次の内容の POM.xml ファイルが表示されます。
<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.companyname.projectgroup</groupId>
<artifactId>project</artifactId>
<version>1.0</version>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
</dependency>
</dependencies>
</project>
ご覧のとおり、Mavenは既にテストフレームワークとしてJunitを追加しています。 デフォルトでは、前の章で説明したように、Mavenはデフォルトのディレクトリ構造にソースファイル App.java とテストファイル AppTest.java を追加します。
コマンドコンソールを開き、C:\ MVN \ consumerBankingディレクトリに移動して、次の mvn コマンドを実行します。
C:\MVN\consumerBanking>mvn clean package
Mavenはプロジェクトの構築を開始します。
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\consumerBanking\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[INFO] [compiler:compile {execution: default-compile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports
-----------------------------------------------------
T E S T S
-----------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\consumerBanking\target\
consumerBanking-1.0-SNAPSHOT.jar
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Tue Jul 10 16:52:18 IST 2012
[INFO] Final Memory: 16M/89M
[INFO]-----------------------------------------------
プロジェクトを構築し、最終的なjarファイルを作成しました。以下は主要な学習概念です-
- Mavenには2つの目標があります。最初にターゲットディレクトリをクリーンアップ(クリーン)し、次にプロジェクトビルド出力をjar(パッケージ)としてパッケージ化します。
- パッケージ化されたjarは、consumerBanking \ targetフォルダーでconsumerBanking-1.0-SNAPSHOT.jarとして入手できます。
- テストレポートは、consumerBanking \ target \ surefire-reportsフォルダーにあります。
- Mavenはソースコードファイルをコンパイルしてから、ソースコードファイルをテストします。
- 次に、Mavenはテストケースを実行します。
- 最後に、Mavenがパッケージを作成します。
コマンドコンソールを開き、C:\ MVN \ consumerBanking \ target \ classesディレクトリに移動して、次のjavaコマンドを実行します。
>java com.companyname.bank.App
次のように結果が表示されます-
Hello World!
Javaソースファイルの追加
プロジェクトにJavaファイルを追加する方法を見てみましょう。 C:\ MVN \ consumerBanking \ src \ main \ java \ com \ companyname \ bankフォルダーを開き、その中にUtil.javaとしてUtilクラスを作成します。
package com.companyname.bank;
public class Util {
public static void printMessage(String message){
System.out.println(message);
}
}
Utilクラスを使用するようにAppクラスを更新します。
package com.companyname.bank;
/**
*Hello world!
*
*/
public class App {
public static void main( String[] args ){
Util.printMessage("Hello World!");
}
}
コマンドコンソールを開き、 C:\ MVN \ consumerBanking ディレクトリに移動して、次の mvn コマンドを実行します。
>mvn clean compile
Mavenのビルドが成功したら、C:\ MVN \ consumerBanking \ target \ classesディレクトリに移動して、次のjavaコマンドを実行します。
>java -cp com.companyname.bank.App
次のように結果が表示されます-
Hello World!
Maven-外部依存関係
ご存じのとおり、Mavenはリポジトリーの概念を使用して依存関係管理を行います。 しかし、リモートリポジトリと中央リポジトリのいずれでも依存関係が利用できない場合はどうなりますか? Mavenは、 External Dependency の概念を使用して、このようなシナリオに対する答えを提供します。
たとえば、「Javaプロジェクトの作成」の章で作成したプロジェクトに次の変更を加えてみましょう。
- lib フォルダーをsrcフォルダーに追加します。
- jarをlibフォルダーにコピーします。 LDAP操作のヘルパーライブラリーである ldapjdk.jar を使用しました。
これで、プロジェクト構造は次のようになります-
ここには、プロジェクト固有の独自のライブラリがありますが、これは通常のケースであり、jarが含まれています。 コードがこのライブラリをMavenで使用している場合、コンパイル段階でこのライブラリをダウンロードまたは参照できないため、Mavenビルドは失敗します。
この状況を処理するために、次の方法を使用してこの外部依存関係をmaven pom.xml に追加しましょう。
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.bank</groupId>
<artifactId>consumerBanking</artifactId>
<packaging>jar</packaging>
<version>1.0-SNAPSHOT</version>
<name>consumerBanking</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ldapjdk</groupId>
<artifactId>ldapjdk</artifactId>
<scope>system</scope>
<version>1.0</version>
<systemPath>${basedir}\src\lib\ldapjdk.jar</systemPath>
</dependency>
</dependencies>
</project>
上記の例の依存関係の下にある2番目の依存関係要素を見てください。これにより、 External Dependency に関する以下の重要な概念がクリアされます。
- 外部依存関係(ライブラリjarの場所)は、他の依存関係と同じ方法でpom.xmlで構成できます。
- ライブラリの名前と同じgroupIdを指定します。
- ライブラリの名前と同じartifactIdを指定します。
- スコープをシステムとして指定します。
- プロジェクトの場所に相対的なシステムパスを指定します。
これで、外部依存関係について明確になり、Mavenプロジェクトで外部依存関係を指定できるようになります。
Maven-プロジェクトドキュメント
このチュートリアルでは、アプリケーションのドキュメントを一度に作成する方法を説明します。 それでは始めましょう。前の章で示した例を使用して、java consumerBanking アプリケーションを作成したC:/MVNディレクトリに移動します。 consumerBanking フォルダーを開き、次の mvn コマンドを実行します。
C:\MVN>mvn site
Mavenはプロジェクトの構築を開始します。
[INFO] Scanning for projects...
[INFO]-----------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [site]
[INFO]-----------------------------------------------
[INFO] [site:site {execution: default-site}]
[INFO] artifact org.apache.maven.skins:maven-default-skin:
checking for updates from central
[INFO] Generating "About" report.
[INFO] Generating "Issue Tracking" report.
[INFO] Generating "Project Team" report.
[INFO] Generating "Dependencies" report.
[INFO] Generating "Continuous Integration" report.
[INFO] Generating "Source Repository" report.
[INFO] Generating "Project License" report.
[INFO] Generating "Mailing Lists" report.
[INFO] Generating "Plugin Management" report.
[INFO] Generating "Project Summary" report.
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Wed Jul 11 18:11:18 IST 2012
[INFO] Final Memory: 23M/148M
[INFO]-----------------------------------------------
これでプロジェクトのドキュメントの準備ができました。 Mavenはターゲットディレクトリ内にサイトを作成しました。
C:\ MVN \ consumerBanking \ target \ siteフォルダーを開きます。 ドキュメントを表示するには、indexlをクリックしてください。
Mavenは、複数のソース形式を共通のドキュメントモデルに読み込むhttps://maven.apache.org/doxia/indexl[Doxia]と呼ばれるドキュメント処理エンジンを使用してドキュメントを作成します。 プロジェクトのドキュメントを作成するには、Doxiaによって解析される一般的に使用される以下のいくつかの形式でコンテンツを作成できます。
フォーマット名
説明
参照
XDoc
Maven 1.xドキュメント形式
https://jakarta.apache.org/site
FML
FAQドキュメントに使用
Maven-プロジェクトテンプレート
Mavenは、 Archetype の概念を使用して、さまざまな種類のプロジェクトテンプレート(数字で614)の非常に大きなリストをユーザーに提供します。 Mavenは、ユーザーが次のコマンドを使用して新しいJavaプロジェクトをすばやく開始できるようにします。
mvn archetype:generate
アーキタイプとは何ですか?
ArchetypeはMavenプラグインで、そのタスクはテンプレートに従ってプロジェクト構造を作成することです。 ここでは、クイックスタートアーキタイププラグインを使用して、簡単なJavaアプリケーションを作成します。
プロジェクトテンプレートの使用
コマンドコンソールを開き、 C:\> MVN ディレクトリに移動して、次の mvn コマンドを実行します。
C:\MVN>mvn archetype:generate
Mavenは処理を開始し、必要なアーキタイプの選択を求めます。
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
...
600: remote −> org.trailsframework:trails-archetype (-)
601: remote −> org.trailsframework:trails-secure-archetype (-)
602: remote −> org.tynamo:tynamo-archetype (-)
603: remote −> org.wicketstuff.scala:wicket-scala-archetype (-)
604: remote −> org.wicketstuff.scala:wicketstuff-scala-archetype
Basic setup for a project that combines Scala and Wicket,
depending on the Wicket-Scala project.
Includes an example Specs test.)
605: remote −> org.wikbook:wikbook.archetype (-)
606: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-glassfish (-)
607: remote −> org.xaloon.archetype:xaloon-archetype-wicket-jpa-spring (-)
608: remote −> org.xwiki.commons:xwiki-commons-component-archetype
(Make it easy to create a maven project for creating XWiki Components.)
609: remote −> org.xwiki.rendering:xwiki-rendering-archetype-macro
(Make it easy to create a maven project for creating XWiki Rendering Macros.)
610: remote −> org.zkoss:zk-archetype-component (The ZK Component archetype)
611: remote −> org.zkoss:zk-archetype-webapp (The ZK wepapp archetype)
612: remote −> ru.circumflex:circumflex-archetype (-)
613: remote −> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)
614: remote −> sk.seges.sesam:sesam-annotation-archetype (-)
Choose a number or apply filter
(format: [groupId:]artifactId, case sensitive contains): 203:
Enterキーを押してデフォルトオプション(203:maven-archetype-quickstart)を選択します
Mavenはアーキタイプの特定のバージョンを要求します。
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
Choose a number: 6:
Enterキーを押してデフォルトのオプションを選択します(6:maven-archetype-quickstart:1.1)
Mavenはプロジェクトの詳細を尋ねます。 質問に従ってプロジェクトの詳細を入力します。 デフォルト値が提供されている場合は、Enterを押します。 独自の値を入力して、それらをオーバーライドできます。
Define value for property 'groupId': : com.companyname.insurance
Define value for property 'artifactId': : health
Define value for property 'version': 1.0-SNAPSHOT:
Define value for property 'package': com.companyname.insurance:
Mavenはプロジェクトの詳細の確認を求めます。 EnterキーまたはYキーを押します。
Confirm properties configuration:
groupId: com.companyname.insurance
artifactId: health
version: 1.0-SNAPSHOT
package: com.companyname.insurance
Y:
今Mavenはプロジェクト構造の作成を開始し、次を表示します-
[INFO]-----------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-quickstart:1.1
[INFO]-----------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.insurance
[INFO] Parameter: packageName, Value: com.companyname.insurance
[INFO] Parameter: package, Value: com.companyname.insurance
[INFO] Parameter: artifactId, Value: health
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\health
[INFO]-----------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]-----------------------------------------------
[INFO] Total time: 4 minutes 12 seconds
[INFO] Finished at: Fri Jul 13 11:10:12 IST 2012
[INFO] Final Memory: 20M/90M
[INFO]-----------------------------------------------
作成したプロジェクト
次に、 C:\> MVN ディレクトリに移動します。 プロジェクトの作成時に artifactId として指定された health という名前のJavaアプリケーションプロジェクトが作成されます。 Mavenは、以下に示すようにプロジェクトの標準ディレクトリレイアウトを作成します-
作成されたPOM.xml
Mavenは、以下にリストされているプロジェクトのPOM.xmlファイルを生成します-
<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.companyname.insurance</groupId>
<artifactId>health</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
App.javaを作成しました
Mavenは、以下にリストされているプロジェクトのサンプルjavaソースファイルApp.javaを生成します-
場所: C:\> MVN> health> src> main> java> com> companyname> Insurance> App.java 。
package com.companyname.insurance;
/**
*Hello world!
*
*/
public class App {
public static void main( String[] args ) {
System.out.println( "Hello World!" );
}
}
AppTest.javaを作成しました
Mavenは、以下にリストされているプロジェクトのサンプルJavaソーステストファイルAppTest.javaを生成します-
場所: C:\> MVN> health> src> test> java> com> companyname> Insurance> AppTest.java 。
package com.companyname.insurance;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
* Unit test for simple App.
*/
public class AppTest extends TestCase {
/**
*Create the test case
*
*@param testName name of the test case
*/
public AppTest( String testName ) {
super( testName );
}
/**
*@return the suite of tests being tested
*/
public static Test suite() {
return new TestSuite( AppTest.class );
}
/**
*Rigourous Test :-)
*/
public void testApp() {
assertTrue( true );
}
}
これで、Mavenのパワーを確認できます。 Mavenで単一のコマンドを使用してあらゆる種類のプロジェクトを作成し、開発を開始できます。
異なるアーキタイプ
Sr.No. | Archetype ArtifactIds & Description |
---|---|
1 |
maven-archetype-archetype サンプルアーキタイプを含むアーキタイプ。 |
2 |
maven-archetype-j2ee-simple 簡略化されたサンプルJ2EEアプリケーションを含むアーキタイプ。 |
3 |
maven-archetype-mojo サンプルMavenプラグインのサンプルを含むアーキタイプ。 |
4 |
maven-archetype-plugin サンプルMavenプラグインを含むアーキタイプ。 |
5 |
maven-archetype-plugin-site サンプルMavenプラグインサイトを含むアーキタイプ。 |
6 |
maven-archetype-portlet サンプルJSR-268ポートレットを含むアーキタイプ。 |
7 |
maven-archetype-quickstart サンプルMavenプロジェクトを含むアーキタイプ。 |
8 |
maven-archetype-simple 単純なMavenプロジェクトを含むアーキタイプ。 |
9 |
maven-archetype-site APT、XDoc、FMLなどのサポートされているドキュメントタイプの一部を示し、サイトを国際化する方法を示すサンプルMavenサイトを含むアーキタイプ。 |
10 |
maven-archetype-site-simple サンプルMavenサイトを含むアーキタイプ。 |
11 |
maven-archetype-webapp サンプルMaven Webappプロジェクトを含むアーキタイプ。 |
Maven-スナップショット
通常、大規模なソフトウェアアプリケーションは複数のモジュールで構成されており、複数のチームが同じアプリケーションの異なるモジュールで作業している一般的なシナリオです。 たとえば、チームがapp-uiプロジェクト(app-ui.jar:1.0)としてアプリケーションのフロントエンドで作業しており、データサービスプロジェクト(data-service.jar:1.0)を使用しているとします。
現在、データサービスに取り組んでいるチームがバグの修正や機能拡張を急速に行っており、ほぼ1日おきにライブラリをリモートリポジトリにリリースしていることがあります。
これで、データサービスチームが1日おきに新しいバージョンをアップロードすると、次の問題が発生します-
- データサービスチームは、更新されたコードをリリースするたびにapp-uiチームに通知する必要があります。
- app-uiチームは、pom.xmlを定期的に更新して、更新されたバージョンを取得する必要がありました。
このような状況に対処するために、 SNAPSHOT コンセプトが登場します。
スナップショットとは何ですか?
SNAPSHOTは、現在の開発コピーを示す特別なバージョンです。 通常のバージョンとは異なり、Mavenはビルドごとにリモートリポジトリで新しいSNAPSHOTバージョンをチェックします。
現在、データサービスチームは、更新されたコードのスナップショットをリポジトリに毎回リリースします。たとえば、data-service:1.0-SNAPSHOTは、古いスナップショットjarを置き換えます。
スナップショットとバージョン
バージョンの場合、Mavenが前述のバージョン、たとえばdata-service:1.0を一度ダウンロードすると、リポジトリで利用可能な新しい1.0をダウンロードしようとしません。 更新されたコードをダウンロードするには、データサービスバージョンを1.1にアップグレードします。
SNAPSHOTの場合、Mavenはapp-uiチームがプロジェクトをビルドするたびに、最新のSNAPSHOT(data-service:1.0-SNAPSHOT)を自動的に取得します。
app-ui pom.xml
*app-ui* プロジェクトは1.0-SNAPSHOTのデータサービスを使用しています。
<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>app-ui</groupId>
<artifactId>app-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
データサービスpom.xml
*data-service* プロジェクトは、マイナーチェンジごとに1.0-SNAPSHOTをリリースしています。
<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>data-service</groupId>
<artifactId>data-service</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>health</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
SNAPSHOTの場合、Mavenは毎日最新のSNAPSHOTを自動的に取得しますが、mavenコマンドに-Uスイッチを使用して、mavenに最新のスナップショットビルドをダウンロードさせることができます。
mvn clean package -U
コマンドコンソールを開き、 C:\> MVN> app-ui ディレクトリに移動して、次の mvn コマンドを実行します。
C:\MVN\app-ui>mvn clean package -U
Mavenは、データサービスの最新のスナップショットをダウンロードした後、プロジェクトの構築を開始します。
[INFO] Scanning for projects...
[INFO]--------------------------------------------
[INFO] Building consumerBanking
[INFO] task-segment: [clean, package]
[INFO]--------------------------------------------
[INFO] Downloading data-service:1.0-SNAPSHOT
[INFO] 290K downloaded.
[INFO] [clean:clean {execution: default-clean}]
[INFO] Deleting directory C:\MVN\app-ui\target
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\main\resources
[INFO] [compiler:compile {execution:default-compile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\classes
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources,
i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory C:\MVN\app-ui\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] Compiling 1 source file to C:\MVN\app-ui\target\test-classes
[INFO] [surefire:test {execution: default-test}]
[INFO] Surefire report directory: C:\MVN\app-ui\target\
surefire-reports
--------------------------------------------------
T E S T S
--------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.027 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-ui\target\
app-ui-1.0-SNAPSHOT.jar
[INFO]--------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO]--------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: 2015-09-27T12:30:02+05:30
[INFO] Final Memory: 16M/89M
[INFO]------------------------------------------------------------------------
Maven-ビルドオートメーション
ビルドオートメーションは、プロジェクトのビルドが正常に完了した後に依存プロジェクトのビルドプロセスが開始されるシナリオを定義し、依存プロジェクトの安定性を確保します。
例
チームがプロジェクト bus-core-api を開発しており、そのプロジェクトで app-web-ui と app-desktop-ui が依存している2つのプロジェクトがあるとします。
*app-web-ui* プロジェクトは、 *bus-core-api* プロジェクトの1.0-SNAPSHOTを使用しています。
<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>app-web-ui</groupId>
<artifactId>app-web-ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
*app-desktop-ui* プロジェクトは、 *bus-core-api* プロジェクトの1.0-SNAPSHOTを使用しています。
<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>app_desktop_ui</groupId>
<artifactId>app_desktop_ui</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<name>app_desktop_ui</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<scope>system</scope>
<systemPath>C:\MVN\bus_core_api\target\bus_core_api-1.0-SNAPSHOT.jar</systemPath>
</dependency>
</dependencies>
</project>
*bus-core-api* プロジェクト-
<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>bus_core_api</groupId>
<artifactId>bus_core_api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
</project>
現在、 app-web-ui および app-desktop-ui プロジェクトのチームは、 bus-core-api プロジェクトが変更されるたびに、ビルドプロセスを開始する必要があります。
スナップショットを使用すると、最新の bus-core-api プロジェクトを使用する必要がありますが、上記の要件を満たすためには、さらに何かをする必要があります。
私たちは次の2つの方法で進めることができます-
- bus-core-api pomでビルド後の目標をキックオフ app-web-ui および app-desktop-ui ビルドに追加します。
- Hudsonなどの継続的統合(CI)サーバーを使用して、ビルドの自動化を自動的に管理します。
Mavenを使用する
*bus-core-api* プロジェクトpom.xmlを更新します。
<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>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-invoker-plugin</artifactId>
<version>1.6</version>
<configuration>
<debug>true</debug>
<pomIncludes>
<pomInclude>app-web-ui/pom.xml</pomInclude>
<pomInclude>app-desktop-ui/pom.xml</pomInclude>
</pomIncludes>
</configuration>
<executions>
<execution>
<id>build</id>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<build>
</project>
コマンドコンソールを開き、 C:\> MVN> bus-core-api ディレクトリに移動して、次の mvn コマンドを実行します。
>mvn clean package -U
Mavenはプロジェクト bus-core-api の構築を開始します。
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------
[INFO] Building bus-core-api
[INFO] task-segment: [clean, package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\bus-core-ui\target\
bus-core-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
*bus-core-api* ビルドが成功すると、Mavenは *app-web-ui* プロジェクトのビルドを開始します。
[INFO] ------------------------------------------------------------------
[INFO] Building app-web-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-web-ui\target\
app-web-ui-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------
*app-web-ui* のビルドが成功すると、Mavenは *app-desktop-ui* プロジェクトのビルドを開始します。
[INFO] ------------------------------------------------------------------
[INFO] Building app-desktop-ui
[INFO] task-segment: [package]
[INFO] ------------------------------------------------------------------
...
[INFO] [jar:jar {execution: default-jar}]
[INFO] Building jar: C:\MVN\app-desktop-ui\target\
app-desktop-ui-1.0-SNAPSHOT.jar
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
Mavenで継続的インテグレーションサービスを使用する
CIサーバーを使用することは、開発者にとってより望ましいです。 bus-core-api プロジェクトの依存プロジェクトとして、新しいプロジェクト(app-mobile-uiなど)が追加されるたびに、 bus-core-api プロジェクトを更新する必要はありません。 Hudsionは、Apache tomcatやglassfishアプリケーションサーバーなどのサーブレットコンテナ内のJavaで記述された継続的統合ツールです。 Hudsonは、Maven依存関係管理を使用してビルドの自動化を自動的に管理します。 次のスナップショットは、Hudsonツールの役割を定義します。
ハドソンは、各プロジェクトのビルドを仕事と見なします。 プロジェクトコードがSVN(またはHudsonにマップされたソース管理ツール)にチェックインされると、Hudsonはビルドジョブを開始し、このジョブが完了すると、他の依存ジョブ(他の依存プロジェクト)を自動的に開始します。
上記の例では、 bus-core-ui ソースコードがSVNで更新されると、Hudsonがビルドを開始します。 ビルドが成功すると、Hudsonは依存プロジェクトを自動的に検索し、 app-web-ui および app-desktop-ui プロジェクトのビルドを開始します。
Maven-依存関係の管理
Mavenのコア機能の1つは、依存関係管理です。 マルチモジュールプロジェクト(数百のモジュール/サブプロジェクトで構成される)を処理する必要がある場合、依存関係の管理は難しいタスクです。 Mavenは、このようなシナリオを管理するための高度な制御を提供します。
推移的な依存関係の発見
ライブラリ(Aなど)が他のライブラリ(Bなど)に依存している場合がよくあります。 別のプロジェクトCがAを使用する場合、そのプロジェクトはライブラリBも使用する必要があります。
Mavenは、このような要件を回避して、必要なすべてのライブラリーを検出するのに役立ちます。 Mavenは、依存関係のプロジェクトファイル(pom.xml)を読み取り、依存関係などを把握することでこれを行います。
各プロジェクトpomで直接依存関係を定義するだけです。 Mavenは残りを自動的に処理します。
推移的な依存関係により、含まれるライブラリのグラフは急速に大きく成長します。 ライブラリが重複している場合に発生する可能性があります。 Mavenは、推移的な依存関係の範囲を制御する機能をほとんど提供しません。
Sr.No. | Feature & Description |
---|---|
1 |
Dependency mediation 成果物の複数のバージョンが検出された場合に使用される依存関係のバージョンを決定します。 2つの依存関係バージョンが依存関係ツリーの同じ深さにある場合、最初に宣言された依存関係が使用されます。 |
2 |
Dependency management 推移的な依存関係で発生したときに使用する成果物のバージョンを直接指定します。 たとえば、プロジェクトCは、依存関係管理セクションにBを依存関係として含め、参照されるときに使用するBのバージョンを直接制御できます。 |
3 |
Dependency scope ビルドの現在のステージごとの依存関係が含まれます。 |
4 |
Excluded dependencies 「exclusion」要素を使用して、推移的な依存関係を除外できます。 例として、AはBに依存し、BはCに依存し、AはCを除外としてマークできます。 |
5 |
Optional dependencies 任意の推移的な依存関係は、「optional」要素を使用してオプションとしてマークできます。 例として、AはBに依存し、BはCに依存します。 これで、BはCをオプションとしてマークしました。 この場合、AはCを使用しません。 |
依存関係の範囲
以下に説明するように、さまざまな依存関係スコープを使用して、推移的な依存関係の検出を制限できます。
Sr.No. | Scope & Description |
---|---|
1 |
compile このスコープは、プロジェクトのクラスパスで依存関係が利用可能であることを示します。 これはデフォルトのスコープです。 |
2 |
provided このスコープは、実行時にJDKまたはweb-server/containerによって依存関係が提供されることを示します。 |
3 |
runtime このスコープは、コンパイルに依存関係は必要ないが、実行中に必要であることを示します。 |
4 |
test このスコープは、依存関係がテストのコンパイルおよび実行フェーズでのみ利用可能であることを示しています。 |
5 |
system このスコープは、システムパスを提供する必要があることを示します。 |
6 |
import このスコープは、依存関係のタイプがpomの場合にのみ使用されます。 このスコープは、指定されたPOMをそのPOMの<dependencyManagement>セクションの依存関係に置き換える必要があることを示します。 |
依存関係管理
通常、共通のプロジェクトの下に一連のプロジェクトがあります。 このような場合、すべての共通の依存関係を持つ共通のPOMを作成し、このPOMをサブプロジェクトのPOMの親にすることができます。 次の例は、この概念を理解するのに役立ちます。
以下は、上記の依存関係グラフの詳細です-
App-UI-WARはApp-Core-libおよびApp-Data-libに依存しています。
ルートはApp-Core-libおよびApp-Data-libの親です。
ルートは、Lib1、lib2、Lib3を依存関係セクションの依存関係として定義します。
*App-UI-WAR*
<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.companyname.groupname</groupId>
<artifactId>App-UI-WAR</artifactId>
<version>1.0</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</project>
*App-Core-lib*
<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">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Core-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
*App-Data-lib*
<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">
<parent>
<artifactId>Root</artifactId>
<groupId>com.companyname.groupname</groupId>
<version>1.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.groupname</groupId>
<artifactId>App-Data-lib</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
</project>
ルート
<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.companyname.groupname</groupId>
<artifactId>Root</artifactId>
<version>1.0</version>
<packaging>pom</packaging>
<dependencies>
<dependency>
<groupId>com.companyname.groupname1</groupId>
<artifactId>Lib1</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname2</groupId>
<artifactId>Lib2</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<dependencies>
<dependency>
<groupId>com.companyname.groupname3</groupId>
<artifactId>Lib3</artifactId>
<version>1.1</version>
</dependency>
</dependencies>
</project>
App-UI-WARプロジェクトをビルドすると、Mavenは依存関係グラフを走査してアプリケーションをビルドすることにより、すべての依存関係を検出します。
上記の例から、次の重要な概念を学ぶことができます-
*親pomの概念を使用して、共通の依存関係を1か所に配置できます。* App-Data-lib *および *App-Core-lib* プロジェクトの依存関係は、_Root_プロジェクトにリストされています(ルートのパッケージ化タイプを参照してください。 POMです)。
* App-UI-WARの依存関係としてLib1、lib2、Lib3を指定する必要はありません。 Mavenは *Transitive Dependency Mechanism* を使用してこのような詳細を管理します。
Maven-展開の自動化
プロジェクト開発では、通常、展開プロセスは次の手順で構成されます-
- 進行中のすべてのプロジェクトのコードをSVN(バージョン管理システム)またはソースコードリポジトリにチェックインし、タグ付けします。
- SVNから完全なソースコードをダウンロードします。
- アプリケーションをビルドします。
- ビルド出力をWARまたはEARファイルのいずれかを共通のネットワークロケーションに保存します。
- ネットワークからファイルを取得し、そのファイルを運用サイトに展開します。
- ドキュメントの日付を更新し、アプリケーションのバージョン番号を更新しました。
問題文
通常、上記の展開プロセスには複数の人が関与しています。 1つのチームがコードのチェックインを処理し、別のチームがビルドなどを処理する場合があります。 手動による作業やマルチチーム環境により、どのステップも見逃される可能性が非常に高くなります。 たとえば、古いビルドはネットワークマシンで置き換えられず、展開チームは古いビルドを再度展開しました。
溶液
以下を組み合わせて、展開プロセスを自動化します-
- Maven、プロジェクトをビルドおよびリリースします。
- ソースコードを管理するためのソースコードリポジトリであるSubVersion。 *プロジェクトバイナリを管理するためのリモートリポジトリマネージャー(Jfrog/Nexus)。
プロジェクトPOM.xmlを更新する
Mavenリリースプラグインを使用して、自動化されたリリースプロセスを作成します。
例:bus-core-apiプロジェクトPOM.xml。
<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>bus-core-api</groupId>
<artifactId>bus-core-api</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<scm>
<url>http://www.svn.com</url>
<connection>scm:svn:http://localhost:8080/svn/jrepo/trunk/
Framework</connection>
<developerConnection>scm:svn:${username}/${password}@localhost:8080:
common_core_api:1101:code</developerConnection>
</scm>
<distributionManagement>
<repository>
<id>Core-API-Java-Release</id>
<name>Release repository</name>
<url>http://localhost:8081/nexus/content/repositories/
Core-Api-Release</url>
</repository>
</distributionManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-release-plugin</artifactId>
<version>2.0-beta-9</version>
<configuration>
<useReleaseProfile>false</useReleaseProfile>
<goals>deploy</goals>
<scmCommentPrefix>[bus-core-api-release-checkin]-<
/scmCommentPrefix>
</configuration>
</plugin>
</plugins>
</build>
</project>
Pom.xmlでは、以下が使用した重要な要素です-
Sr.No. | Element & Description |
---|---|
1 |
MavenがソースコードをチェックアウトするSVNの場所を構成します。 |
2 |
Repositories コードのビルドが成功した後、ビルドされたWAR/EAR/JARまたはその他のアーティファクトが保存される場所。 |
3 |
Plugin maven-release-pluginは、展開プロセスを自動化するように構成されています。 |
Mavenリリースプラグイン
Mavenは、 maven-release-plugin を使用して次の便利なタスクを実行します。
mvn release:clean
最後のリリースプロセスが成功しなかった場合に、ワークスペースをクリーンアップします。
mvn release:rollback
最後のリリースプロセスが成功しなかった場合に備えて、ワークスペースのコードと構成に加えられた変更をロールバックします。
mvn release:prepare
などの複数の操作を実行します-
- コミットされていないローカル変更があるかどうかを確認します。
- SNAPSHOT依存関係がないことを確認します。
- アプリケーションのバージョンを変更し、そのバージョンからSNAPSHOTを削除してリリースします。
- pomファイルをSVNに更新します。
- テストケースを実行します。
- 変更したPOMファイルをコミットします。
- Subversionのコードにタグを付けます
- バージョン番号を増やし、将来のリリースのためにSNAPSHOTを追加します。
- 変更したPOMファイルをSVNにコミットします。
mvn release:perform
以前に定義されたタグを使用してコードをチェックアウトし、Mavenデプロイゴールを実行して、warまたはビルドされたアーティファクトをリポジトリにデプロイします。
コマンドコンソールを開き、 C:\> MVN> bus-core-api ディレクトリに移動して、次の mvn コマンドを実行します。
>mvn release:prepare
Mavenはプロジェクトの構築を開始します。 ビルドが成功したら、次の mvn コマンドを実行します。
>mvn release:perform
ビルドが成功したら、リポジトリ内のアップロードされたJARファイルを確認できます。
Maven-Webアプリケーション
この章では、 Maven を使用してWebベースのプロジェクトを管理する方法を説明します。 ここでは、Webアプリケーションを作成/ビルド/デプロイおよび実行する方法を学びます。
Webアプリケーションを作成する
単純なJava Webアプリケーションを作成するには、 maven-archetype-webapp プラグインを使用します。 コマンドコンソールを開き、 C:\ MVN ディレクトリに移動して、次の mvn コマンドを実行します。
C:\MVN>mvn archetype:generate
-DgroupId = com.companyname.automobile
-DartifactId = trucks
-DarchetypeArtifactId = maven-archetype-webapp
-DinteractiveMode = false
Mavenは処理を開始し、次のように完全なWebベースのJavaアプリケーションプロジェクト構造を作成します-
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] -------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [archetype:generate] (aggregator-style)
[INFO] -------------------------------------------------------------------
[INFO] Preparing archetype:generate
[INFO] No goals needed for project - skipping
[INFO] [archetype:generate {execution: default-cli}]
[INFO] Generating project in Batch mode
[INFO] --------------------------------------------------------------------
[INFO] Using following parameters for creating project
from Old (1.x) Archetype: maven-archetype-webapp:1.0
[INFO] --------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.companyname.automobile
[INFO] Parameter: packageName, Value: com.companyname.automobile
[INFO] Parameter: package, Value: com.companyname.automobile
[INFO] Parameter: artifactId, Value: trucks
[INFO] Parameter: basedir, Value: C:\MVN
[INFO] Parameter: version, Value: 1.0-SNAPSHOT
[INFO] project created from Old (1.x) Archetype in dir: C:\MVN\trucks
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 16 seconds
[INFO] Finished at: Tue Jul 17 11:00:00 IST 2012
[INFO] Final Memory: 20M/89M
[INFO] -------------------------------------------------------------------
C:/MVNディレクトリに移動します。 次のスナップショットで指定されているように、トラック(artifactIdで指定)という名前のJavaアプリケーションプロジェクトが作成されます。 次のディレクトリ構造は、一般的にWebアプリケーションに使用されます-
Mavenは標準のディレクトリレイアウトを使用します。 上記の例を使用すると、次の重要な概念を理解できます-
Sr.No. | Folder Structure & Description |
---|---|
1 |
trucks srcフォルダーとpom.xmlが含まれています。 |
2 |
src/main/webapp index.jspおよびWEB-INFフォルダーが含まれます。 |
3 |
src/main/webapp/WEB-INF web.xmlを含む |
4 |
src/main/resources イメージ/プロパティファイルが含まれています。 |
POM.xml
<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.companyname.automobile</groupId>
<artifactId>trucks</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>trucks Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>trucks</finalName>
</build>
</project>
観察すると、MavenがサンプルJSPソースファイルも作成していることがわかります。
*C:\> MVN> trucks> src> main> webapp>* フォルダーを開き、次のコードでindex.jspを確認します-
<html>
<body>
<h2>Hello World!</h2>
</body>
</html>
Webアプリケーションの構築
コマンドコンソールを開き、C:\ MVN \ trucksディレクトリに移動して、次の mvn コマンドを実行します。
C:\MVN\trucks>mvn clean package
Mavenはプロジェクトの構築を開始します。
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building trucks Maven Webapp
[INFO] task-segment: [clean, package]
[INFO] -------------------------------------------------------------------
[INFO] [clean:clean {execution: default-clean}]
[INFO] [resources:resources {execution: default-resources}]
[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!
[INFO] Copying 0 resource
[INFO] [compiler:compile {execution: default-compile}]
[INFO] No sources to compile
[INFO] [resources:testResources {execution: default-testResources}]
[WARNING] Using platform encoding (Cp1252 actually) to
copy filtered resources,i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory
C:\MVN\trucks\src\test\resources
[INFO] [compiler:testCompile {execution: default-testCompile}]
[INFO] No sources to compile
[INFO] [surefire:test {execution: default-test}]
[INFO] No tests to run.
[INFO] [war:war {execution: default-war}]
[INFO] Packaging webapp
[INFO] Assembling webapp[trucks] in [C:\MVN\trucks\target\trucks]
[INFO] Processing war project
[INFO] Copying webapp resources[C:\MVN\trucks\src\main\webapp]
[INFO] Webapp assembled in[77 msecs]
[INFO] Building war: C:\MVN\trucks\target\trucks.war
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 3 seconds
[INFO] Finished at: Tue Jul 17 11:22:45 IST 2012
[INFO] Final Memory: 11M/85M
[INFO] -------------------------------------------------------------------
Webアプリケーションを展開する
*C:\> MVN> trucks> target>* フォルダーで作成した *trucks.war* をWebサーバーのwebappディレクトリにコピーし、Webサーバーを再起動します。
Webアプリケーションのテスト
URL:* http://<サーバー名>:<ポート番号>/trucks/index.jsp*を使用してWebアプリケーションを実行します。
出力を確認します。
Maven-Eclipse IDE
Eclipseは、MavenとEclipseをシームレスに統合する優れたプラグインhttps://www.eclipse.org/m2e/[m2eclipse]を提供します。
m2eclipseの機能の一部を以下にリストします-
- EclipseからMavenゴールを実行できます。
- 独自のコンソールを使用して、Eclipse内でMavenコマンドの出力を表示できます。
- IDEでMavenの依存関係を更新できます。
- Eclipse内からMavenビルドを起動できます。
- Mavenのpom.xmlに基づいてEclipseビルドパスの依存関係管理を行います。
- ローカルのMavenリポジトリにインストールせずに、EclipseワークスペースからのMaven依存関係を解決します(同じワークスペースに依存プロジェクトが必要です)。
- リモートMavenリポジトリから必要な依存関係とソースを自動的にダウンロードします。
- 新しいMavenプロジェクトpom.xmlを作成し、既存のプロジェクトでMavenサポートを有効にするためのウィザードを提供します
- リモートMavenリポジトリ内の依存関係をすばやく検索できます。
m2eclipseプラグインのインストール
次のリンクのいずれかを使用してm2eclipseをインストールします-
Eclipse | URL |
---|---|
Eclipse 3.5 (Gallileo) | Installing m2eclipse in Eclipse 3.5 (Gallileo) |
Eclipse 3.6 (Helios) | Installing m2eclipse in Eclipse 3.6 (Helios) |
次の例は、EclipseとMavenを統合する利点を活用するのに役立ちます。
EclipseでMavenプロジェクトをインポートする
- Eclipseを開きます。
- *ファイル>インポート> *オプションを選択します。
- Mavenプロジェクトオプションを選択します。 [次へ]ボタンをクリックします。
- Mavenを使用してプロジェクトが作成されたプロジェクトの場所を選択します。 前の章で、Java Projectコンシューマーバンキングを作成しました。 「Javaプロジェクトの作成」の章に進み、Mavenを使用してプロジェクトを作成する方法を確認してください。
- [完了]ボタンをクリックします。
これで、Mavenプロジェクトを日食で見ることができます。
次に、*消費者銀行*プロジェクトのプロパティを見てみましょう。 EclipseがMaven依存関係をjavaビルドパスに追加したことがわかります。
これで、EclipseのMaven機能を使用してこのプロジェクトをビルドするときが来ました。
- consumerBankingプロジェクトを右クリックして、コンテキストメニューを開きます。
- オプションとして実行を選択します。
- 次に、Mavenパッケージオプション。
Mavenはプロジェクトの構築を開始します。 次のようにEclipseコンソールで出力を見ることができます-
[INFO] Scanning for projects...
[INFO] -------------------------------------------------------------------
[INFO] Building consumerBanking
[INFO]
[INFO] Id: com.companyname.bank:consumerBanking:jar:1.0-SNAPSHOT
[INFO] task-segment: [package]
[INFO] -------------------------------------------------------------------
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [resources:testResources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:testCompile]
[INFO] Nothing to compile - all classes are up to date
[INFO] [surefire:test]
[INFO] Surefire report directory:
C:\MVN\consumerBanking\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.047 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO] [jar:jar]
[INFO] -------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] -------------------------------------------------------------------
[INFO] Total time: 1 second
[INFO] Finished at: Thu Jul 12 18:18:24 IST 2012
[INFO] Final Memory: 2M/15M
[INFO] -------------------------------------------------------------------
ここで、App.javaを右クリックします。 [実行]オプションを選択します。 次に* Javaアプリケーション*を選択します。
オプションとして実行を使用してmavenコマンドを実行します。
次のように結果が表示されます-
Hello World!
Maven-NetBeans
NetBeans 6.7以降には、Mavenのサポートが組み込まれています。 以前のバージョンの場合、Mavenプラグインはプラグインマネージャーで使用できます。 この例ではNetBeans 6.9を使用しています。
NetBeansの機能の一部を以下にリストします-
- NetBeansからMavenゴールを実行できます。
- 独自のコンソールを使用して、NetBeans内でMavenコマンドの出力を表示できます。
- IDEでMavenの依存関係を更新できます。
- NetBeans内からMavenビルドを起動できます。
- NetBeansは、Mavenのpom.xmlに基づいて依存関係管理を自動的に行います。
- NetBeansは、ローカルMavenリポジトリにインストールせずに、ワークスペースからMaven依存関係を解決します(依存関係プロジェクトは同じワークスペースにある必要があります)。
- NetBeansの自動ダウンロードには、リモートMavenリポジトリからの依存関係とソースが必要です。
- NetBeansは、新しいMavenプロジェクトpom.xmlを作成するためのウィザードを提供します。
- NetBeansには、ローカルリポジトリと登録済みの外部Mavenリポジトリを表示できるMavenリポジトリブラウザが用意されています。
次の例は、NetBeansとMavenを統合する利点を活用するのに役立ちます。
NetBeansでMavenプロジェクトを開く
- NetBeansを開きます。
- [ファイルメニュー]> [プロジェクトを開く]オプションを選択します。
- Mavenを使用してプロジェクトが作成されたプロジェクトの場所を選択します。 Java Project consumerBankingを作成しました。 「Javaプロジェクトの作成」の章に進み、Mavenを使用してプロジェクトを作成する方法を確認してください。
これで、NetBeansでMavenプロジェクトを確認できます。 consumerBankingプロジェクトライブラリとテストライブラリをご覧ください。 NetBeansがビルドパスにMaven依存関係を追加したことがわかります。
NetBeansでMavenプロジェクトを構築する
次に、NetBeansのmaven機能を使用してこのプロジェクトをビルドします。
- consumerBankingプロジェクトを右クリックして、コンテキストメニューを開きます。
- [クリーンおよびビルド]オプションとして選択します。
Mavenはプロジェクトの構築を開始します。 次のようにNetBeans Consoleで出力を見ることができます-
NetBeans: Executing 'mvn.bat -Dnetbeans.execution = true clean install'
NetBeans: JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
task-segment: [clean, install]
------------------------------------------------------------------------
[clean:clean]
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Compiling 2 source files to C:\MVN\consumerBanking\target\classes
[resources:testResources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\test\resources
[compiler:testCompile]
Compiling 1 source file to C:\MVN\consumerBanking\target\test-classes
[surefire:test]
Surefire report directory: C:\MVN\consumerBanking\target\surefire-reports
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running com.companyname.bank.AppTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec
Results :
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[jar:jar]
Building jar: C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
[install:install]
Installing C:\MVN\consumerBanking\target\consumerBanking-1.0-SNAPSHOT.jar
to C:\Users\GB3824\.m2\repository\com\companyname\bank\consumerBanking\
1.0-SNAPSHOT\consumerBanking-1.0-SNAPSHOT.jar
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 9 seconds
Finished at: Thu Jul 19 12:57:28 IST 2012
Final Memory: 16M/85M
------------------------------------------------------------------------
NetBeansでアプリケーションを実行する
ここで、App.javaを右クリックします。 オプションとして[ファイルを実行]を選択します。 NetBeans Consoleに結果が表示されます。
NetBeans: Executing 'mvn.bat -Dexec.classpathScope = runtime
-Dexec.args = -classpath %classpath com.companyname.bank.App
-Dexec.executable = C:\Program Files\Java\jdk1.6.0_21\bin\java.exe
-Dnetbeans.execution = true process-classes
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec'
NetBeans: JAVA_HOME = C:\Program Files\Java\jdk1.6.0_21
Scanning for projects...
------------------------------------------------------------------------
Building consumerBanking
task-segment: [process-classes,
org.codehaus.mojo:exec-maven-plugin:1.1.1:exec]
------------------------------------------------------------------------
[resources:resources]
[WARNING] Using platform encoding (Cp1252 actually)
to copy filtered resources, i.e. build is platform dependent!
skip non existing resourceDirectory C:\MVN\consumerBanking\src\main\resources
[compiler:compile]
Nothing to compile - all classes are up to date
[exec:exec]
Hello World!
------------------------------------------------------------------------
BUILD SUCCESSFUL
------------------------------------------------------------------------
Total time: 1 second
Finished at: Thu Jul 19 14:18:13 IST 2012
Final Memory: 7M/64M
------------------------------------------------------------------------
Maven-IntelliJ IDEA IDE統合
IntelliJ IDEAには、Mavenが組み込まれています。 この例では、IntelliJ IDEA Community Edition 11.1を使用しています。
IntelliJ IDEAの機能の一部を以下に示します-
- IntelliJ IDEAからMavenゴールを実行できます。
- 独自のコンソールを使用して、IntelliJ IDEA内でMavenコマンドの出力を表示できます。
- IDE内でMavenの依存関係を更新できます。
- IntelliJ IDEA内からMavenビルドを起動できます。
- IntelliJ IDEAは、Mavenのpom.xmlに基づいて自動的に依存関係管理を行います。
- IntelliJ IDEAは、ローカルMavenリポジトリにインストールせずに、ワークスペースからMavenの依存関係を解決します(依存関係プロジェクトは同じワークスペースにある必要があります)。
- IntelliJ IDEAは、必要な依存関係とソースをリモートのMavenリポジトリから自動的にダウンロードします。
- IntelliJ IDEAは、新しいMavenプロジェクトpom.xmlを作成するためのウィザードを提供します。
次の例は、IntelliJ IDEAとMavenを統合する利点を活用するのに役立ちます。
IntelliJ IDEAで新しいプロジェクトを作成する
New Project Wizardを使用してMavenプロジェクトをインポートします。
- IntelliJ IDEAを開きます。
- [ファイル]メニュー> [新しいプロジェクト]オプションを選択します。
- 既存のモデルからインポートプロジェクトを選択します。
- Mavenオプションを選択
- Mavenを使用してプロジェクトが作成されたプロジェクトの場所を選択します。 Java Project consumerBankingを作成しました。 「Javaプロジェクトの作成」の章に進み、Mavenを使用してプロジェクトを作成する方法を確認してください。
- インポートするMavenプロジェクトを選択します。
- プロジェクトの名前を入力し、「終了」をクリックします。
- これで、IntelliJ IDEAでMavenプロジェクトを見ることができます。 consumerBankingプロジェクトの外部ライブラリをご覧ください。 IntelliJ IDEAがMavenセクションの下のビルドパスにMaven依存関係を追加したことがわかります。
IntelliJ IDEAでMavenプロジェクトを構築する
次は、IntelliJ IDEAの機能を使用してこのプロジェクトをビルドします。
- consumerBankingプロジェクトを選択します。
- Buidメニュー> Rebuild Project オプションを選択します
IntelliJ IDEA Consoleで出力を確認できます
4:01:56 PM Compilation completed successfully
IntelliJ IDEAでアプリケーションを実行する
- consumerBankingプロジェクトを選択します。
- App.javaを右クリックして、コンテキストメニューを開きます。
- * Run App.main()*を選択します
IntelliJ IDEA Consoleに結果が表示されます。
"C:\Program Files\Java\jdk1.6.0_21\bin\java"
-Didea.launcher.port=7533
"-Didea.launcher.bin.path=
C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 11.1.2\bin"
-Dfile.encoding=UTF-8
-classpath "C:\Program Files\Java\jdk1.6.0_21\jre\lib\charsets.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\deploy.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\javaws.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jce.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\jsse.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\management-agent.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\plugin.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\resources.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\rt.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\dnsns.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\localedata.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunjce_provider.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunmscapi.jar;
C:\Program Files\Java\jdk1.6.0_21\jre\lib\ext\sunpkcs11.jar
C:\MVN\consumerBanking\target\classes;
C:\Program Files\JetBrains\
IntelliJ IDEA Community Edition 11.1.2\lib\idea_rt.jar"
com.intellij.rt.execution.application.AppMain com.companyname.bank.App
Hello World!
Process finished with exit code 0