2

MavenはNexusやArtifactoryなどのさまざまなリポジトリとどのように相互作用しますか?

それは彼らのRESTAPIを使用して行われますか?依存するアーティファクトを実際の場所に解決して、これらのAPIを使用しないようにすることは可能ですが、2つのAPIは([Artifactory] ​​[Nexus]を参照)、Mavenpomファイルのリポジトリ定義要素とは多少異なります。リポジトリのタイプを示すプロパティは含まれていません。

では、MavenはどのようにしてアーティファクトのgroupId、artifactId、およびバージョンを異なるリポジトリー内の実際のファイルに解決するのでしょうか。これらのリポジトリは、Mavenがリポジトリに依存しない方法でそれらからファイルを要求できるようにする他の標準化されたAPIを実装していますか?

4

3 に答える 3

1

Mavenはある種の命名規則を使用します。pom.xmlリポジトリのルートURL(例)を定義するとhttp://download.java.net/maven/2/、MavenはURLを作成することでアーティファクトを解決できます。

<root URL>/${group id where dots are replaced by slashes}/${artifact id}/${version}

したがって、次の依存関係について

<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>2.0.0</version>

Mavenはでpomsとjarを見つけようとしますhttp://download.java.net/maven/2/org/apache/lucene/lucene-core/2.0.0

つまり、この規則に従うすべてのURIがMavenリポジトリとして機能する可能性があります。

于 2012-07-25T13:59:27.650 に答える
1

Yoyは、2つの方法でアーティファクトを検索するためのリポジトリを定義します。

1)プロジェクトセクションのpom.xml

<project>
    ....
    <repositories>
         <repository>
            ...
            <url>...</url>
         </repository>
    </repositories>
</project>

2)および/またはファイル内$USER_HOME$/.m2/settings.xml(WEBには多くの例があります)

Mavenは、リポジトリURLを使用してアーティファクトのURLを構築し、アーティファクトグループ、ID、バージョン、タイプ、および分類子に従ってパスを追加することにより、からアーティファクトをダウンロードします。そして、groupIdのドットを'/'に変換します

RepoUrl/groupId/artifactId/version/artifactId-version-classifier.type

例:

https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4.jar

https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-sources.jar

https://repository.apache.org/content/repositories/releases/commons-io/commons-io/2.4/commons-io-2.4-javadoc.jar

これは慣例であり、ArtifactoryまたはNexusから独立しています。これはMavenです。すべてがHTTPまたはHTTPSを介して転送されます。さらに、Mavenはセキュリティの目的でMD5ファイルとSHA1ファイルを処理します。

ダウンロードされると、アーティファクトはワークステーションのローカルリポジトリ$USER_HOME$/.m2/repositories(リモートリポジトリに似た構造を持つ)に保存され、キャッシュおよびプロキシとして機能します。

通常、ArtifactoryまたはNexusは、企業レベルでの一種のローカルキャッシュおよびプロキシであり、それを管理するためのいくつかの機能を備えています。確かに、彼らは会社の開発者によって公開されたMavenアーティファクトをホストしています。

リポジトリの3つのレベルのように見えます:ローカル-ローカル会社-グローバル

于 2012-07-25T14:43:25.053 に答える
0

Mavenは、通常のhttp呼び出しを使用してリポジトリーと対話します。Mavenリポジトリーを提供するために必要なのはhttpサーバーだけです。mavenは、特定のディレクトリ階層といくつかのメタデータファイルに依存しています。(Mavenがダウンロードしたファイルをキャッシュするディスク上のローカルリポジトリは、まったく同じ形式です)。

于 2012-07-25T13:49:09.357 に答える