自動化ツールと開発ツールは間違いなくプロジェクトの最も重要な側面の 1 つであり、このブログでは Maven について説明したいと思います。 Maven は、Java プロジェクト用の強力な自動化ツールです。これにより、構築プロセスが簡素化され、プロジェクトの統一された構造が作成されます。そのため、プロジェクトの管理と理解が容易になります。このブログでは、Maven の世界のほぼすべてを取り上げ、開発ワークフローを合理化する幅広いコマンドとオプションを取り上げます。サーバーとコンテナーの管理、ソース管理管理 (SCM)、アーティファクトに署名するための GPG などのさまざまな側面を検討します。さらに、プラグインの管理、アセンブリと配布、プロジェクト サイトとレポートの生成のための特殊なコマンドについても検討します。したがって、このガイドを読み終えるまでに、次のことを完全に理解できるようになります。 Maven コマンドとオプション.
Maven の概要。プロジェクトのライフサイクル
イディッシュ語で、Maven という言葉は「知識の蓄積者」を意味します。この意味は、Java プロジェクトの自動化ツールとしての Maven の力をほぼ説明しています。 Maven を使用すると、ビルド プロセスとプロジェクト管理が非常に簡単になります。そして、さまざまなタスクを自動化し、統一されたビルド システムを提供することでこれを実現します。
ここで、Maven がどのように動作するかを明確に理解するために、 プロジェクト オブジェクト モデル (POM)。 POM は、プロジェクトと構成の詳細に関する情報が含まれる XML ファイルです。 Maven は、その作業の基盤として POM を使用します。したがって、Maven は、プロジェクトの依存関係、ビルド ディレクトリ、ソース ディレクトリ、テスト ソース ディレクトリ、およびこのソースからの目標を取得して動作します。
プロジェクトとその依存関係を定義した後、 pom.xml、Maven コマンドを実行するたびに、pom ファイルが読み取られて、そのコマンドの特定のビルド フェーズが実行されます。プロジェクトを作成した瞬間から実際にデプロイするまで、プロジェクトのライフサイクルは長くなります。このライフサイクルは、プロジェクトが通過する必要がある一連のフェーズを定義します。各フェーズはライフサイクルの段階を表し、ソース コードのコンパイル、テストの実行、コードの配布可能な形式へのパッケージ化などの特定のタスクを実行します。これらすべてにより、Maven のプロジェクトのライフサイクルは理解すべき重要な概念になります。それでは、Maven のライフサイクル フェーズを詳しく見てみましょう。
- 検証: このフェーズでは、プロジェクトが正しく、必要な情報がすべて利用可能であることを検証します。
- コンパイル: このフェーズでは、プロジェクトのソース コードがコンパイルされます。
- テスト: このフェーズでは、適切な単体テスト フレームワークを使用して、コンパイルされたソース コードをテストします。
- パッケージ: このフェーズでは、コンパイルされたコードを配布可能な形式 (JAR、WAR など) にパッケージ化します。
- インストール: インストール フェーズでは、パッケージがローカル リポジトリにインストールされ、同じマシン上の他のプロジェクトで使用できるようになります。
- 展開する: このフェーズでは、他の開発者やプロジェクトと共有するために、最終パッケージをリモート リポジトリにコピーします。
これらの各フェーズには、対応する mvn コマンドがあり、Maven チートシートの次のセクションで説明します。これらは、プロジェクトのビルド プロセスを管理するために使用する最も重要なコマンドになります。
依存関係の管理
Maven の中核機能の 1 つは依存関係管理です。この機能により、プロジェクトの依存関係の処理が容易になるため、Maven のパフォーマンスにおいて非常に重要です。
Maven が依存関係を管理する方法
Maven は、として知られる集中リポジトリを使用します。 Maven セントラル リポジトリには、膨大な数のライブラリとプラグインがホストされています。プロジェクトに依存関係が必要な場合、Maven は必要なライブラリを中央リポジトリから自動的にダウンロードし、ローカル リポジトリに保存します。このローカル リポジトリは、将来のビルドのダウンロード時間を短縮するローカル マシン上のキャッシュです。
Maven の依存関係は、 pom.xml 配下のファイル <依存関係> セクション。各依存関係は、一連の座標によって定義されます。 グループID, アーティファクトID、 そして バージョン.
依存関係のスコープ
Maven を使用する場合、依存関係の範囲を指定できます。この要素は、クラスパスの可視性と依存関係のライフサイクル フェーズを定義します。したがって、どのフェーズでこの依存関係が必要かを知ることができます。一般的なスコープは次のとおりです。
- コンパイル: これはデフォルトのスコープであり、スコープが指定されていない場合に使用されます。このスコープの依存関係はすべてのビルド フェーズで使用でき、最終パッケージに含まれます。
- 提供された: このスコープの依存関係は、ランタイム環境までに準備が整っていることが期待されます。これらはコンパイル中に使用されますが、最終パッケージには含まれません。
- ランタイム: これらの依存関係はコンパイルには必要ありませんが、実行時には必要になります。これらは実行時のクラスパスに含まれます。
- テスト: これらの依存関係は、テストのコンパイルと実行にのみ必要です。これらはランタイムまたは最終パッケージには含まれません。
- システム: システム スコープは提供されたスコープと似ていますが、Maven が使用する JAR を指定する必要があります。 JAR はシステム パスに存在する必要があります。
推移的な依存関係
Maven の強力な機能の 1 つは、推移的な依存関係を処理できることです。プロジェクトが依存関係を宣言すると、Maven はその依存関係だけでなく、その依存関係、その依存関係の依存関係なども自動的に含めます。この依存関係のチェーンは、推移的な依存関係として知られています。明確にするために、プロジェクトが spring-boot-starter-web に依存していると想像してください。Maven には、Spring Core、Spring MVC、Jackson など、spring-boot-starter-web が依存するすべてのライブラリも含まれるようになります。
Maven が依存関係を管理する方法の理論については理解できたので、実際にそれを扱う方法を見てみましょう。
mvn dependency:resolve
このコマンドは、プロジェクトに必要なすべての依存関係を解決して表示できます。これを使用すると、プロジェクトがどのライブラリに依存しているかを確認し、すべてが適切であることを確認できます。
mvn dependency:tree
このコマンドを使用すると、プロジェクトの依存関係をツリー構造で表示できます。これは、各依存関係がどのように関連しているかを示し、潜在的な競合を特定するのに役立ちます。
mvn dependency:analyze
このコマンドはプロジェクトの依存関係を分析し、未使用のアーティファクトを見つけます。これは、プロジェクトをクリーンアップし、不必要な肥大化を避けるのに役立ちます。
Maven の依存関係管理機能により、開発プロセスが容易になります。また、よくある落とし穴を回避し、クリーンで組織化されたプロジェクト構造を維持するのにも役立ちます。
実行
Maven での実行には、プロジェクト内の特定のタスクまたは目標の実行が含まれます。これらのタスクは、Java プログラムの実行から外部スクリプトやコマンドの実行まで多岐にわたります。 Maven は、これらの実行を簡単にする強力なプラグインを提供します。これは Maven のもう 1 つの機能であり、プロジェクト ワークフローのさまざまな部分を自動化するための優れたツールになります。それでは、主要な Maven 実行コマンドを確認してみましょう。
mvn exec:java
このコマンドは、プロジェクト内の Java クラスを実行するために使用されます。これは、メインクラスを実行したり、最初にパッケージ化せずにスタンドアロン Java プログラムをテストしたりする場合に便利です。
mvn exec:exec
このコマンドを使用すると、Maven 環境内から外部プログラムまたはスクリプトを実行できます。これを使用して、シェル スクリプト、外部ツール、またはビルド プロセスの一部であるその他のプログラムを実行できます。
Maven の実行コマンドは、反復的なタスクを自動化するのに役立ちます。これらを使用して、外部ツールやスクリプトを Maven ビルド ライフサイクルに統合することもできます。したがって、全体として、タスクをより効率的に管理するのに役立ちます。
サーバーとコンテナの管理
サーバーとコンテナの管理は、Web アプリケーションの開発と展開における重要な段階です。 Maven は、ビルド プロセスから直接、さまざまなサーバーやコンテナ上で Web アプリケーションを実行、デプロイ、管理できる強力なプラグインを使用してこのプロセスを容易にします。サーバーとコンテナーを管理するための重要な Maven コマンドをいくつか示します。
mvn tomcat7:run
このコマンドは、次を使用して Web アプリケーションを実行します。 Apache Tomcat。これはローカルの開発とテストに役立ち、完全なサーバー環境をセットアップせずに Web アプリケーションを迅速に展開してテストできます。
mvn jetty:run
このコマンドは、と呼ばれる一般的な Web サーバーを使用して Web アプリケーションを実行します。 桟橋。 Tomcat と同様、Jetty は軽量で高速な展開機能があるため、開発とテストに最適です。
サーバーとコンテナの管理の仕組み
Maven は次のようなプラグインを使用します tomcat7-maven-プラグイン そして 桟橋-maven-プラグイン サーバーの運用を管理するため。これらのプラグインを使用すると、ビルド ライフサイクルの一部としてサーバーを起動、停止、構成できます。そのため、一貫した環境での Web アプリケーションの開発とテストがはるかに簡単になります。 Maven プロファイルを使用してさまざまな環境のサーバー構成を定義すると、開発、テスト、運用のさまざまな設定を管理するのに役立ちます。 Maven のこの機能を使用すると、サーバー プラグイン内でログ記録と監視を構成することもできます。そのため、サーバーのアクティビティを追跡し、問題のトラブルシューティングを迅速に行うことができます。
SCM (ソース管理管理)
あらゆる開発プロジェクトの重要な側面は、ソース管理管理 (SCM) です。開発チームは、時間の経過とともにソース コードへの変更を管理するために SCM を必要とします。 Maven には、Git、Subversion などの SCM システムと対話するための一連のコマンドがあります。これらのコマンドは、コードのチェックイン、コードのチェックアウト、プロジェクト バージョンの更新などのさまざまなタスクを自動化できます。以下に、主要な Maven SCM コマンドとそのオプションの一部を示します。
mvn scm:checkin
この mvn コマンドを使用して、プロジェクトの変更を SCM にチェックインできます。このコマンドは、ソース管理リポジトリに変更をコミットするプロセスを自動化するのに役立ちます。したがって、最新の更新は確実に保存され、チームと共有されます。
mvn scm:checkout
この Maven コマンドは、SCM リポジトリからプロジェクトのコードをチェックアウトするために使用され、プロジェクトのローカル コピーを取得するのに役立ちます。したがって、常に最新バージョンのソース コードを使用していることがわかります。
mvn scm:update
この mvn コマンドは、SCM リポジトリからの最新の変更でプロジェクトのローカル作業コピーを更新します。このコマンドの役割は、ローカル コードベースがリポジトリと同期しており、他のチーム メンバーによって加えられた新しい変更がすべて含まれていることを確認することです。
mvn scm:status
この mvn コマンドは、SCM リポジトリに関連したローカル作業コピーのステータスを表示します。言い換えれば、ローカルで行われたがまだリポジトリにコミットされていないすべての変更について通知します。
mvn scm:tag
このコマンドは、SCM リポジトリにタグを作成するために使用されます。タグは、リリースや重要なマイルストーンなど、プロジェクトの歴史の特定の時点をマークします。
Maven SCM コマンドを使用すると、プロジェクトのソース コードを管理するプロセスを大幅に合理化できます。これらのコマンドを理解して活用すると、開発チーム内の効率とコラボレーションが強化されます。
GPG (GNU プライバシー ガード)
GNU Privacy Guard (GPG) は、ユーザーがデータと通信を暗号化して署名できるようにする暗号化ソフトウェアです。 Maven のコンテキストでは、GPG を使用してアーティファクトに署名し、その信頼性と整合性を確認します。これは、アーティファクトが改ざんされていないことをユーザーが確認できるため、アーティファクトをパブリック リポジトリにデプロイするときに重要です。 Maven は、GPG を操作するためのいくつかのコマンドを提供し、プロジェクトのアーティファクトの署名とデプロイのプロセスを容易にします。これらのコマンドのいくつかを例として見てみましょう。
mvn gpg:sign
この Maven コマンドを使用して、プロジェクトのアーティファクトに GPG で署名できます。アーティファクトに署名すると、他の人がアーティファクトを検証できるようになり、セキュリティと信頼の層が提供されます。このコマンドは、ビルド プロセス中に、デプロイメント前に JAR、WAR、およびその他の種類のアーティファクトに署名するためによく使用されます。
mvn gpg:sign-and-deploy-file
この mvn コマンドは、ファイルの署名とデプロイメントを 1 つのステップに結合します。これは、アーティファクトに署名し、すぐにリポジトリにデプロイする場合に使用できます。これによりプロセスが効率化され、アーティファクトに署名してすぐにリポジトリにデプロイできるようになります。
GPG 署名を Maven ビルド プロセスに組み込むと、ソフトウェアのセキュリティと信頼性を強化できます。そのため、ユーザーがアーティファクトを信頼して検証することが容易になります。
リリース管理
ソフトウェア開発においてリリース管理は非常に重要です。効果的なリリース管理により、ソフトウェアのバージョンが適切に管理、パッケージ化、展開されていることを確認できます。 Maven は、リリース プロセスを自動化および合理化するための一連のコマンドを提供します。リリース管理用の Maven オプションとコマンドの例をいくつか見てみましょう。
mvn release:prepare
この mvn コマンドは、リリースに向けてプロジェクトを準備するために使用されます。コミットされていない変更がないことの確認、ファイル内のバージョン番号の更新などのタスクを実行します。 pom.xml ファイル、ソース管理管理 (SCM) システムでのリリースのタグ付け、および pom.xml ファイルを次の開発バージョンに移行します。これにより、プロジェクトが安定した状態にあり、リリースの準備ができていることが確認されます。
mvn release:perform
このコマンドは実際のリリース処理を実行します。によって作成されたタグで SCM からプロジェクトをチェックアウトします。 リリース:準備 コマンドを使用してプロジェクトをビルドし、アーティファクトを指定されたリポジトリにデプロイします。このコマンドは、リリース準備時のコードの正確な状態から成果物が構築されていることを確認します。
mvn release:clean
この mvn コマンドは、実行中に作成されたすべてのリリース記述子のバックアップ ファイルを削除します。 リリース:準備 プロセス。環境をクリーンアップし、以前のリリース試行で残ったファイルがないことを確認します。このコマンドにより、クリーンなワークスペースが得られ、次のリリースでの潜在的な問題が防止されます。
リリース管理コマンドを使用すると、リリース プロセスが合理化され、ソフトウェアの品質が向上し、リリースが効果的に管理されるようになります。
原型
事前定義されたテンプレートに基づいてプロジェクト構造を作成したい開発者は、Maven Archetype プラグインの使用を検討する必要があります。ここでは、アーキタイプに関連する主要な Maven コマンドについて説明します。
mvn archetype:generate
この mvn コマンドを使用して、既存のテンプレート、つまり「アーキタイプ」から新しいプロジェクトを作成できます。このコマンドは、ユーザーにアーキタイプの選択と新しいプロジェクトの構成を案内します。したがって、適切に構造化されたプロジェクトをセットアップするのに役立ちます。
mvn archetype:catalog
このコマンドは、新しいプロジェクトの生成に使用できる利用可能なアーキタイプをリストします。これは、Maven コミュニティが提供するさまざまなテンプレートを調べて、プロジェクトのニーズに最も適したアーキタイプを判断するのに役立ちます。
これら 2 つの Maven コマンドを使用すると、新しいプロジェクトをすぐに開始できます。単純な Java アプリケーションを開始する場合でも、複雑なエンタープライズ プロジェクトを開始する場合でも、Maven アーキタイプは貴重な出発点となります。
プラグイン管理
Maven プラグインを使用すると、開発者は Maven の機能を拡張し、ビルド ライフサイクル内のさまざまなタスクを自動化できます。プラグインを効果的に管理すると、プロジェクトの保守性とビルドの再現性が確保されます。このセクションでは、重要な Maven プラグイン管理コマンドについて説明します。
mvn plugin:download
このコマンドは、リポジトリから特定の Maven プラグインをダウンロードするために使用されます。これは、特定のプラグインに依存する他の Maven コマンドを実行する前に、そのプラグインがローカル リポジトリで利用可能であることを確認したい場合に使用できます。
mvn plugin:help
この Maven コマンドは、特定の Maven プラグインに関する詳細情報とドキュメントを表示します。プラグインで使用できるさまざまな目標、パラメーター、構成を理解する必要がある場合に使用できます。
これらの Maven プラグイン管理コマンドは、ビルド プロセスを強化し、ワークフローを自動化し、高水準のプロジェクトの品質と一貫性を維持します。
組立と配送
Maven のアセンブリおよび配布機能を使用すると、開発者は配布用にプロジェクトをさまざまな形式にパッケージ化できます。これらを使用して、実行可能 JAR、バンドルされたアプリケーション、または依存関係やその他のリソースを含むカスタム ディストリビューションを作成できます。ここでは、アセンブリと配布のための主要な Maven コマンドについて説明します。
mvn assembly:assembly
このコマンドは、プロジェクトのアセンブリを作成します。アセンブリは、バイナリ、ソース コード、依存関係、その他のリソースを含めることができる配布可能なパッケージです。このコマンドは、アセンブリ プラグインを使用して、提供されたアセンブリ記述子に基づいてこれらのパッケージを生成します。
mvn assembly:directory
この mvn コマンドは、実際にアーカイブ ファイルを作成せずに、アセンブリのディレクトリ構造を作成します。このコマンドは、アセンブリをパッケージ化する前に、アセンブリの内容と構造をテストおよび検証するのに役立ちます。
Maven のアセンブリおよび配布コマンドの使い方を学ぶことは、アプリケーションのパッケージ化と配布に大いに役立ちます。
サイト生成コマンド
Maven のサイト コマンドは、プロジェクトを文書化する優れた方法です。これらのコマンドは、プロジェクトの包括的なドキュメント Web サイトを作成します。ここでは、重要なサイト コマンドとその機能について説明します。
mvn site
mvn site コマンドはプロジェクトのサイト ドキュメントを生成し、プロジェクトの概要、依存関係レポート、プラグインの使用法などのプロジェクトに関する情報が含まれます。
mvn site:deploy
このコマンドを使用して、生成されたサイトをリモート サーバーに展開できます。これは、チーム メンバーや一般の人々など、より幅広い対象者がドキュメントを利用できるようにする場合に便利です。
mvn site:stage
このコマンドは、サイトをローカル ディレクトリにステージングします。このコマンドを使用すると、サイトをリモート サーバーに展開する前にローカルでプレビューできます。
きちんと整理されたドキュメントは、プロジェクトの開発において非常に重要です。 Maven site コマンドを使用すると、すべてを適切な場所に配置し、開発チーム内でのコミュニケーションを向上させることができます。
WAR および JAR コマンド
開発者であれば、アプリケーションをさまざまな形式にパッケージ化できることが開発プロセスにおいて非常に重要であることをご存知でしょう。 Maven を使用すると、Java アプリケーションを WAR (Web アプリケーション アーカイブ) や JAR (Java アーカイブ) ファイルなどのさまざまな形式にパッケージ化できます。アプリケーションをサーバーにデプロイし、ライブラリを配布する場合、これらのパッケージ形式の重要性が明らかになります。ここでは、WAR ファイルと JAR ファイルを生成するための主要な mvn コマンドについて説明します。
mvn war:war
このコマンドはプロジェクトをコンパイルし、WAR ファイルにパッケージ化します。このコマンドを実行すると、Maven はプロジェクトのターゲット ディレクトリに WAR ファイルを生成します。
mvn jar:jar
このコマンドは、プロジェクトをコンパイルし、プロジェクトのターゲット ディレクトリ内の JAR ファイルにパッケージ化します。
これら 2 つのコマンドは、展開と配布に役立ちます。したがって、これらを使用して Java アプリケーションを効率的に管理および配布できます。
報告
すべてのソフトウェア プロジェクトには、進捗状況を追跡するための詳細なレポートが必要です。また、Maven には、さまざまな種類のレポートを生成するための強力なプラグインと mvn コマンドがあります。このセクションでは、レポートに使用できる 2 つの Maven プラグイン、Surefire と JaCoCo について説明します。
シュアファイアプラグイン
このプラグインを使用して、Maven プロジェクトで単体テストを実行できます。実行されたテストに関する詳細なレポートが生成されるため、コードが期待どおりに動作することを確認できます。
mvn surefire-report:report
このコマンドは、読みやすく分析しやすい形式で単体テスト レポートを生成します。このコマンドを使用すると、Maven は HTML レポートを ターゲット/サイト プロジェクトのディレクトリ。このレポートには、実行されたテスト、合格したテスト、および失敗したテストの数に関する情報と、失敗した場合の詳細なスタック トレースが含まれます。
JaCoCoプラグイン
このプラグインを使用して、単体テストによるコード カバレッジの測定とレポートを行うことができます。したがって、テストがコードベースをカバーしていることを確認できます。
mvn jacoco:report
コードのどの部分がテストされ、どの部分がテストされていないのかを確認したい場合は、このコマンドを使用するとコード カバレッジ レポートが得られます。このコマンドが作成するレポートは、次の HTML レポートです。 ターゲット/サイト/ジャココ このディレクトリには、クラス、メソッド、コード行の詳細なカバレッジ メトリックが表示されます。
これら 2 つのプラグインは、テスト結果とコード カバレッジを追跡し、コードベースの健全性と品質について有益な洞察を得るのに役立ちます。
ビルドのカスタマイズ
Maven を使用すると、プロジェクトの特定の要件を満たすようにビルドを調整できます。このセクションでは、ビルドのカスタマイズに Maven プロファイルとプロパティ定義を使用する方法について説明します。
Maven プロファイル
Maven プロファイルを使用すると、プロジェクトのさまざまな構成を定義でき、システム プロパティ、環境変数、カスタム条件などのさまざまな要素に基づいてアクティブ化できます。これは、開発、テスト、運用など、さまざまな環境に合わせてビルド プロセスをカスタマイズできることを意味します。プロファイルを定義できます。 pom.xml 配下のファイル <プロフィール> セクション。そして、 -p オプションの後にプロファイル ID を入力すると、プロファイルがアクティブ化されます。
プロパティの定義
Maven プロパティを使用すると、全体で再利用できる値を定義できます。 pom.xml ファイル。これらのプロパティは、 pom.xml、コマンドライン経由、または外部プロパティファイルで。でプロパティを定義できます。 <プロパティ> あなたのセクション pom.xml。定義した後は、これらのプロパティを全体にわたって使用できます。 pom.xml ファイル。
Maven でビルド プロセスをカスタマイズすると、プロジェクトをさまざまな環境や要件に適応させるのに役立ちます。プロファイルを使用すると、異なるビルド設定を切り替えることができ、プロパティを使用すると、値を効率的に再利用および管理できます。
結論
このブログでは、Java アプリケーション開発プロセスの各ステップを順を追って説明しながら、Maven の包括的な紹介を提供しました。 Java プロジェクトの強力な自動化ツールとして、Maven には開発の各フェーズに応じたさまざまなコマンドと機能があり、これらのコマンドの操作方法を理解し、それらを把握することで、開発プロセスの品質が向上します。
よくある質問
Maven は何に使用されますか?
Maven は、Java プロジェクト用のビルド自動化およびプロジェクト管理ツールです。これにより、ビルド プロセスが簡素化され、プロジェクトの依存関係が管理され、標準化されたプロジェクト構造が提供されます。 Maven は、プロジェクトの文書化、レポート作成、配布もサポートしています。
Maven の POM とは何ですか?
Maven は、Java プロジェクトのビルド プロセスと依存関係の管理を自動化するツールです。 POM (プロジェクト オブジェクト モデル) は、Maven がプロジェクトを構築するために使用するプロジェクトと構成の詳細に関する情報を含む Maven の XML ファイルです。 POM ファイルは、プロジェクトの依存関係、プラグイン、目標、およびその他のビルド構成を定義します。