Maven Warehouseとは何ですか
たとえば、Mavenを使用していない場合、過去にはAntでプロジェクトを構築していましたが、log4j.jar、junit.jarなどのさまざまなサードパーティの依存関係ジャーファイルを保存するサブディレクトリと呼ばれるサブディレクトリが表示されます。
プロジェクトを構築するたびに、そのような /libディレクトリを作成してから、JARファイルのペアをコピーする必要があります。これは明らかな複製です。繰り返しは常に悪夢の出発点です。複数のプロジェクトでは、同じJARファイルを共有していません。これは、ディスクリソースの無駄を引き起こすだけでなく、バージョンの一貫性管理を困難にします。
さらに、SVNなどのバージョン管理ツールを使用している場合(バージョン管理ツールを使用しない場合はSVNを試してみてください。多くの頭痛を解決するのに役立ちます)、コードライブラリに多数のJARファイルを送信する必要がありますが、バージョン管理ツールはバイナリファイルの処理に優れていません。
Mavenリポジトリは、すべてのJARファイル(WAR、ZIP、POMなど)が配置される場所です。すべてのMavenプロジェクトは、ディスクリソースを節約する同じMavenリポジトリから必要な依存関係ジャーを取得できます。さらに、Mavenリポジトリ内のすべての瓶には独自の座標があるため、MavenにグループID、コンポーネントID、バージョン、パッケージングメソッドなどに伝えるため、Mavenプロジェクトは依存関係バージョン管理を簡単に実行できます。 JARファイルをSCMリポジトリに送信する必要はありません。すべてのメンバーが使用できる組織レベルのMavenリポジトリを作成できます。
要するに、Mavenリポジトリは、アーティファクト(主に瓶)の管理を支援します。
Mavenでは、依存関係、プラグイン、またはプロジェクトの構築の出力をコンポーネントと呼ぶことができます。
Mavenは、すべてのプロジェクトのすべての共有コンポーネントを統一された場所に保存します。この統一された場所は倉庫と呼ばれます。 (倉庫は、依存関係とプラグインが保存される場所です)
どのコンポーネントにも一意の座標があります。 Mavenは、この座標に基づいて、倉庫内のコンポーネントの一意のストレージパスを定義します。
リポジトリ内のMavenのストレージパスを解釈します。
1. GroupIDに基づいてパスを準備し、周期分離器をパスセパレーターに変換します。つまり、変換します。に "/" ;例:org.testng ---> org/testng
2。artifactidに基づいてパスを準備し、artifactidを背面に接続します:org/testng/testng
3.バージョンを使用してパスを準備し、バージョンを背面に接続します:org/testng/testng/5.8
4. Artifactidを分離器ハイフンを持つバージョンにバージョンに接続します:org/testng/testng/5.8/tesng-5.8
5.コンポーネントに分類器がある場合、項目4の後にセパレーターハイフンを追加し、分類器、org/testng/5.8/tesng-5.8-jdk5を追加します
6.コンポーネントの拡張を確認します。拡張機能が存在する場合は、周期分離器と拡張機能を追加します。拡張機能は、梱包、org/testng/testng/5.8/tesng-5.8-jdk5.jarによって決定されます
この時点で、Mavenのコンポーネントストレージの詳細を理解しています。
Maven Warehouse分類:
Maven's Warehouseには2つのカテゴリしかありません。1。ローカルウェアハウス2。リモートウェアハウスに分かれているリモートウェアハウス:2.1 Central Warehouse 2.2 Private Server 2.3その他の公共倉庫
1.名前が示すように、地元の倉庫は、Mavenがコンポーネントをローカルに保存する場所です。
注:Mavenがインストールされた後、Mavenのローカルリポジトリは作成されません。 Mavenコマンドが初めて実行された場合にのみ作成されます。
Maven Local Repositoryのデフォルトの場所:WindowsであろうとLinuxであろうと、ユーザーのディレクトリに.M2/リポジトリ/リポジトリディレクトリがあります。これは、Mavenリポジトリのデフォルトの場所です。
Mavenのデフォルトのローカルリポジトリの場所を変更する方法:ここでは、Mavenのsettings.xmlファイルに存在する新しい要素:localrepositoryを紹介します。
1。
<settings> <localRepository> d:/maven_new_repository </localrepository> </settings>
この時点で、Mavenのローカルリポジトリアドレスはd:/maven_new_repositoryになります。注:現時点で構成されたMavenのローカルリポジトリは、ユーザースコープに属します。
1.2グローバルに構成の変更ローカルリポジトリ:M2_home/conf/settings.xmlの構成を変更すると、構成を変更する方法は上記と同じです
注:この変更後、すべてのユーザーが影響を受け、Mavenがアップグレードされた場合、すべての構成がクリアされるため、M2_home/conf/settings.xmlファイルを事前にコピーしてバックアップする必要があります。
したがって、通常の状況では、グローバルsettings.xmlの構成は推奨されません。
2。リモートリポジトリ
2.1リモートウェアハウスに関しては、最もコアセントラルウェアハウスから始めます。中央の倉庫は、デフォルトのリモートウェアハウスです。 Mavenがインストールされると、セントラルウェアハウスの構成が付属しています。
Mavenの集約と継承では、すべてのMavenプロジェクトがSuper POMを継承すると述べています。具体的には、次の構成を含むPOMの場合、それをSuper POMと呼びます
<positories> <pository> <id> central </id> <name> central Repository </name> <url> http://repo.maven.apache.org/maven2 </url> <layout>デフォルト</layout> <snapshots> <enabled> false </edabled> </repository> </repository> </repository>
セントラルウェアハウスには、最も人気のあるオープンソースのJavaコンポーネント、およびソースコード、著者情報、SCM、情報、ライセンス情報などが含まれています。一般的に、簡単なJavaプロジェクトの依存関係はこちらからダウンロードできます。
2.2プライベートサーバー
プライベートサーバーは特別なリモートウェアハウスです。 LANに設置された倉庫サービスです。プライベートサーバーは、LANのMavenユーザー向けのWAN上のリモートウェアハウスを表します。 Mavenがコンポーネントをダウンロードする必要がある場合、プライベートサーバーからリクエストします。コンポーネントがプライベートサーバーに存在しない場合、外部リモートリポジトリからダウンロードし、プライベートサーバーにキャッシュし、Mavenのダウンロードリクエストのサービスを提供します。また、外部の倉庫からプライベートサーバーにダウンロードできないコンポーネントをアップロードすることもできます。
Mavenプライベートサーバーの機能:
1.独自の外部ネットワーク帯域幅を保存:リクエストの繰り返しによって引き起こされる外部ネットワーク帯域幅の消費を削減する
2。Mavenコンポーネントの加速:プロジェクトが多くの外部リモートウェアハウスで構成されている場合、建設速度は大幅に削減されます。
3。サードパーティコンポーネントの展開:一部のコンポーネントを外部倉庫から取得できない場合、内部のMavenプロジェクトで使用するためにこれらのコンポーネントを内部倉庫(プライベートサーバー)に展開できます。
4.安定性を改善し、制御を強化する:インターネットが不安定な場合、Maven構造も不安定になります。一部のプライベートサーバーソフトウェアも他の機能を提供します。
5.中央倉庫の負荷を減らす:Maven Central Warehousesの要求の数は巨大であり、プライベートサーバーの構成は、中央倉庫の圧力を大幅に減らすこともできます。
現在の主流のMavenプライベートサーバー:
1.ApacheのArchiva
2.Jfrogの人工物
3。Sonatypeのネクサス
3。リモートウェアハウスの構成
リモートリポジトリを構成すると、新しい構成要素が導入されます。
<positries>要素の下では、<pository> child要素を使用して、1つ以上のリモートリポジトリを宣言できます。
例:
<Repository> <id> jboss </id> <name> jboss Repository </name> <url> http://repository.jboss.com/maven2/ </url> <lileases> <updatePolicy> Daily </updatePolicy> <! - Never、interval> <CheckSpulicy> WARN </CHECKSUMPOLICY> <! - 失敗、無視 - > </リリース> <SnapShots> <Enabled> false </enabled> </snapshots> <layout> defayout> </repository> </repository> </repository>
<updatePolicy>要素:更新頻度を表す、値は次のとおりです。
<CheckSpulicy>要素:ファイルを確認および検証するためのMavenのポリシーを表します。警告は、セキュリティ上の理由でデフォルト値です。リモートウェアハウスのアクセスを認証する必要がある場合があります。一般に、認証情報はsettings.xmlで構成されています。
<サーバー> <server> <id> pomのリポジトリIDと同じ</id> <username> username </username> <password> pwd </password> </server> </servers>
注:ここのIDは、POMで認証する必要があるリポジトリ要素のIDと一致する必要があります。
生成されたプロジェクトをリモートリポジトリに展開する方法
この作業を完了するには、POMで構成する必要もあります。これが新しい要素です:<DistributionManagement>
配布管理には、リポジトリとスナップショットリポジットの2つの子要素が含まれています。前者はバージョンコンポーネントを公開するためのリポジトリを表し、後者はスナップショットバージョンのリポジトリを表します。
両方の要素がID(リモートリポジトリの一意の識別子)、名前、URL(リポジトリのアドレスを表す)を構成する必要があります
コンポーネントをリモート倉庫に展開するには、認証が必要です。構成は上記と同じです
構成が正しい後に実行します:MVN Clean Deploy
スナップショットを正しく見てください
以前は、POMを構成するときは、スナップショットの構成について非常に慎重でした。または、スナップショットバージョンをめったに使用しませんでした。その理由は、それがまだ非常に不安定であり、システムに不明なエラーを引き起こすのが非常に簡単であり、私たちが見つけるのが難しくなっているからです。実際、スナップショットバージョンは役に立たない。スナップショットの最大の目的は、特にモジュールの依存関係がある場合、開発プロセスで使用することです。たとえば、AとBは同時に開発されます。 AはBに依存します。開発プロセス中、AとBは常に統合された開発であり、POMファイルとプロジェクトの構築を常に変更します。この時点で、バージョンの同期は大きな問題になります。これは、スナップショットを使用して実現できます。
実際、スナップショットバージョンのリリース中、Mavenはコンポーネントを現在のタイムスタンプで自動的にマークします。このタイムスタンプを使用すると、いつでも最新のスナップショットバージョンを見つけることができます。これにより、先ほど述べた共同開発の問題が解決されます。
AがBの更新をチェックする方法については、更新の頻度を制御できる要素がスナップショット構成に要素があると話したときに言ったばかりです-------- UpdatePolicy
また、コマンドラインを使用してパラメーターを追加してMavenを強制して更新を確認することもできます。MVNClean mvn clean install-U
倉庫からのMaven Parseコンポーネントはどの程度正確ですか? ----リポジトリからの依存関係を解析するためのMavenのメカニズム
1.依存関係の範囲がシステムである場合、Mavenはローカルファイルシステムからコンポーネントを直接解決します。
2。依存関係座標に基づいて倉庫パスを計算した後、地元の倉庫から直接コンポーネントを見つけてみてください。対応するコンポーネントが見つかった場合、解像度は成功します。
3。ローカルリポジトリに対応するコンポーネントがない場合、依存バージョンが表示されているリリースバージョンコンポーネントである場合、すべてのリモートリポジトリを反復し、発見した後にダウンロードします。
4.依存バージョンがリリースまたは最新の場合、すべてのリモートリポジトリのメタデータが更新ポリシーに基づいて読み取られ、ローカルリポジトリの対応するメタデータをマージし、リリースまたは最新の真の値を計算し、この真の値に基づいてローカルリポジトリを確認します。
5.依存バージョンがスナップショットである場合、すべてのリモートリポジトリのメタデータは更新ポリシーに基づいて読み取り、ローカルリポジトリの対応するメタデータとマージし、最新のスナップショットバージョンの値を取得し、値に基づいてローカルリポジトリを確認するか、リモートリポジトリからダウンロードします。
6.最後の解析されたアーティファクトバージョンがタイムスタンプ形式のスナップショットである場合、そのタイムスタンプ形式のファイルを非チメタンプ形式にコピーし、この非チメタンプ形式でアーティファクトを使用します。
注:必ず<Release> <Enabled>&<SnapShot> <Enabled>を覚えておいてください、スナップショットにも同じことが言えます
POMを宣言する場合は、最新のリリースをお勧めしません。プラグイン構成の最新およびリリースは、Maven3ではサポートされなくなりました。プラグインバージョンが設定されていない場合、最終バージョンはリリースと同じです。
Mavenは、最新リリースビルドのみを解析します。
上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。