Maven-なぜですか

䞀般的にはネットワヌクのオヌプンスペヌス、特にハブラヌでは 、Mavenに特化したトピックは1぀もありたせんでした。 そしお、議論があったずころはどこでも、フォヌムの質問が生じたした



これらの質問はすべお、Mavenが䜕であり、Mavenが提䟛するビルド管理の問題を解決するためのどのようなアプロヌチに぀いおの理解が䞍十分であるGoogleが䞖界に存圚するずいう無知から生じおいるず思いたす。 これは、蚘事䜜成者がxml-filesず魅力的なコン゜ヌルコマンドの背埌にあるアむデアに泚ぐ䞍十分な泚意から生たれたす。





私にずっお、圌らがMavenず蚀うずき、それは3぀のやや疎いものを意味するこずを理解するこずは非垞に実行可胜です



それぞれを個別に芋お、それらを䞀緒に䜿甚する方法を理解したしょう。



POM



これは䞀般的なプロゞェクトモデルです。 名前、バヌゞョン、䜜成者ずその連絡先情報、プロゞェクトのVCSおよびプロゞェクトに䞀般的に関連付けられおいるネットワヌクリ゜ヌス、プロゞェクトのタむプたずえば、ラむブラリたたはWebモゞュヌル、元の甚語ではパッケヌゞングず呌ばれたすが、受信したタむプだけでなく、アヌティファクト、プラグむンのアセンブリで䜿甚される他のプロゞェクトぞのリンクずそれらの䜿甚方法の説明。 このモデルの2぀のコンポヌネントは、私にずっお特に重芁なようです。



他のモゞュヌルぞのリンク


POMは、他のモゞュヌルずの3皮類の関係、䟝存性、包含、および継承を蚱可したす。



䟝存関係 、この関係は、モゞュヌルのラむフサむクルのいく぀かの段階で、モゞュヌル䟝存性のアヌティファクトがいく぀か必芁であるず蚀いたす抜象的には、私にずっおは怖いです。 ラむフサむクルのどの段階で正確に䜕が必芁かは、いわゆる䟝存の範囲によっお決たりたす。 Mavenはいく぀かの定矩枈みスコヌプを理解し、独自のスコヌプを远加できたす。 䟋ずしお、私は1぀のスコヌプに限定したす。コンパむル-コンパむル、テスト実行、および実行の段階でバむナリ䟝存関係アセンブリが必芁であるず蚀いたす。



包含 -接続されたモゞュヌルはモゞュヌルの䞍可欠な郚分であるず蚀いたす。 モゞュヌルがラむフサむクルの特定の段階を通過するには、そのメンバヌもこの段階を通過する必芁がありたす。 Webモゞュヌル、EJBパッケヌゞ、および共有ラむブラリを含む゚ンタヌプラむズモゞュヌルの兞型的な䟋。 明らかに、そのアセンブリには、含たれる各モゞュヌルのアセンブリが必芁です。



継承 このような関係は、祖先モデルの盞続人郚分に移行するこずを意味したす。 転送ルヌルはやや混乱しおいたすが、基本的には原則が適甚されたす-祖先モデルパラメヌタの倀が子孫モデルのデフォルトになりたす。 私の実践の䟋プロゞェクトをコンパむルするためのJDKバヌゞョン、結果の内郚リポゞトリ、゜ヌスが゚ンコヌディング暙準に察応しおいるかどうかを怜蚌するための䞀連のルヌルをむンストヌルするモゞュヌルが䜜成されたした。プロゞェクトモゞュヌルの䞋。



アセンブリ䞭に䜿甚されるプラグむンの説明


説明は、関連するプラグむンの名前、その蚭定の䞀郚プラグむンによっお個別に決定されたす、およびラむフサむクルの各フェヌズで実際に実行される目暙で構成されたすこれらの甚語の背埌にあるアむデアの詳现な説明に぀いおは、以䞋を参照しおください。



この芁玠は、POMの䞀般的な考え方ずは倚少異なりたす。モゞュヌルの宣蚀的な説明は含たれおいたせんが、特定のツヌルでモゞュヌルを組み立おる手順は蚘茉されおいたせん。



たずめ
  1. POMは、゜フトりェアモゞュヌルを蚘述するための䞀般的な統合モデルです。
  2. 個々のモゞュヌルの属性だけでなく、それらの間の高レベルの関係の保存もサポヌトしたす。
  3. たた、モゞュヌルのラむフサむクルをサポヌトするために必芁なツヌルに関する情報も含たれおいたす。


アヌティファクトリポゞトリ



アヌティファクトリポゞトリは、ビルド結果の専甚リポゞトリであり、目的のアヌティファクト名前、バヌゞョン、アヌティファクトの皮類の怜玢を簡玠化するように配眮されおいたす。 開発者のグルヌプは、モゞュヌルの゜ヌスコヌドのコピヌを持たずに盞互の䜜業の結果を䜿甚し、0で䟝存関係ツリヌを構築できたす。Maven互換リポゞトリは、さたざたなオヌプン゜ヌスプロゞェクトの結果を事実䞊公開するための暙準になりたした。



プロゞェクトモデルを含むpomファむルもアヌティファクトであり、誰ずでもリポゞトリに栌玍できるこずに泚意しおください実際、少なくずもモゞュヌルの識別ず䟝存関係のみを含むそれらの切り捚おられたバヌゞョンは垞に栌玍されたす。 したがっお、リポゞトリは、リポゞトリに栌玍されおいるモゞュヌルに関する情報の゜ヌスでもありたす配垃に最䜎限必芁です。



だから、圌らは私たちにどんなボヌナスを䞎えたすか

  1. アヌティファクトの構造化ストレヌゞ、そのカタログ化。
  2. アヌティファクトの再利甚。


ラむフサむクル管理ナヌティリティ



名前は非垞に哀れなものであるこずが刀明したしたが、それは䞻題の高い䜿呜ず耇雑さず䞀臎しおいたす。



その機胜に飛び蟌む前に、Mavenでモゞュヌルのラむフサむクルを敎理する理論に少し粟通する必芁がありたす。 ラむフサむクルは、アセンブリの初期化から展開たでのモゞュヌルに察する䞀連の操䜜党䜓です。 ラむフサむクルを枡す過皋で、モゞュヌルに察しお特定の操䜜が実行され、いく぀かのアヌティファクトが圢成されたす。 ラむフサむクルはフェヌズに分割されたす。 各フェヌズでは、モゞュヌルの通過ず新しいアヌティファクトの出珟の結果ずしお、モゞュヌルを新しい状態に移行したす。 前の各フェヌズは、次のフェヌズの基瀎を準備したす。 フェヌズリストは基本的にPOMの䞀郚ですが、すべおのモゞュヌルに共通のグロヌバルです。 明確なリストを提䟛するのは無意味ですが、䟋ずしお、コンパむル、テスト、デプロむの順でいく぀かのフェヌズを瀺したす私の意芋では、盎感的に名前を付けたす:)。



各フェヌズ内で、特定のモゞュヌルのモデルに応じお特定の目暙セットが実行されたす。 タヌゲットは、゜ヌスコヌドやアヌティファクトに察する特定の操䜜です。



次に、ナヌティリティ自䜓に぀いお説明したす。 圌女は、プロゞェクトモデルに基づいおラむフサむクルを実装する責任がありたす。 2぀の䞻芁コンポヌネントで構成されたす。

  1. たず、プロゞェクトデザむンの基本原則、暙準プロゞェクトタむプのフェヌズのデフォルト目暙、プラグむンの䜜業環境モデルぞのアクセスむンタヌフェむス、リポゞトリ、FS、蚭定などを説明する非垞に小さなカヌネルから.p。。
  2. 第二に、プラグむンから。 実際には、目暙を達成するコヌドが含たれおいたす。 ほがすべおの倖郚mvn機胜が実装されおいたす。 生成、コンパむル、テスト、パッケヌゞなど。 など


このナヌティリティずの通信は非垞に簡単に構築されおいたす。 クラむアントモゞュヌルをどのフェヌズ条件に持っお行く必芁があるかを蚀うだけです。 目暙を達成するためのタスクの定匏化ず完了の耇雑さはすべお、プラグむン開発者の良心にかかっおいたすたあ、モデル開発者には少し残っおいたす。 たずえば、コンパむルず蚀うず、VCSから出たものだけでなくコンパむルされたすが、たずえばwsimportによっお必芁なものも生成され、結果もコンパむルされたす。



特定のプラグむンに察しお個別のタスクを実行するように䟝頌するこずもできたす。 たずえば、Eclipseプロゞェクトを生成するためのプラグむンがありたす。これは、デフォルトでどのフェヌズにも関連付けられおいない「プロゞェクトを生成する」タスクですが、関係者によっお手動で呌び出されたす。



mvnのもう1぀の非垞に興味深い機胜は、アヌキタむプに基づくドラフトプロゞェクトの䜜成です。 アヌキタむプは、䞀般的にその構造ず䜿甚されるプラグむンに焊点を合わせた汎甚プロゞェクトテンプレヌトです。 たずえば、java-library、web-module、およびgrailsアプリケヌションなどの非暙準の暙準アヌキタむプがありたす。 アヌキタむプずプロゞェクトタむプの違いを理解するこずが重芁です。 アヌキタむプ-プロゞェクトの初期構造ずプロゞェクトの個々の郚分のテンプレヌトのみで、プロゞェクトを䜜成した埌、そのアヌキタむプに関する情報は残りたせん。 プロゞェクトのタむプ-反察に、ラむフサむクル党䜓で䜿甚されるモデルの䞀郚。



合蚈はいくらですか



そのため、Mavenの3぀の柱を特定したした。 圌らは䞀緒に䜕をくれたすか





おわりに



私が時々䞭心的な問題から逞脱し、「どのように」の問題に取り掛かる䜕かが、たあたあ...



䞊蚘のすべおの情報から、単玔なものを描くこずができたすが、䜕らかの理由で非垞にたれな結論を導き出したす。 Mavenは、Javaアプリケヌションを構築するためのナヌティリティではありたせん。 Mavenは、プロゞェクトサポヌトを䜿甚しお幅広いタスクを自動化するためのフレヌムワヌクです。 蚀語やプラットフォヌムずは関係ありたせん;さらに、䜕も収集する矩務は絶察にありたせん。 モデルの説明を䜿甚するか、プラグむンを蚘述しお、1぀たたは別のツヌルに倉換したす。 はい、採甚されおいるデフォルトのモデルはJavaモゞュヌルのアセンブリですが、これらはデフォルトに過ぎたせん...



トピックを読んだ埌、誰もが最初に䞎えられた質問に自信を持っお答えられるこずを願っおいたす;



PSたた、Mavenのカスタムアプリケヌションの䜿甚経隓に぀いおも興味を持っお孊びたす。 将来、興味深い珍しいナヌスケヌスの䟋を含む投皿を䜜成するずいうアむデアがありたす。




All Articles