web-dev-qa-db-ja.com

Mavenで依存関係のリポジトリを指定する方法

いくつかの依存関係とリポジトリを持つプロジェクトでは、依存関係をダウンロードするためのMavenの試行錯誤のアプローチは少し面倒で遅く、いくつかの宣言された依存関係に特定のリポジトリを設定する方法があるかどうか疑問に思っていました。

たとえば、Bouncycastleでは、公式Mavenではなく http://repo2.maven.org/maven2/org/bouncycastle/ でBouncyCastleのMavenリポジトリを直接チェックする必要があります。

60
Dario Castañé

ありえない。 Mavenは、指定されたアーティファクトが解決される(または解決されない)まで、宣言順にリポジトリをチェックします。

ただし、一部のリポジトリマネージャは、これに近づく方法を実行できます。たとえば、Nexusには、同等の処理を行う routes 機能があります。

45
Pascal Thivent

ライブラリをサードパーティのリポジトリから独自のプロジェクトに移動し、このプロジェクトをベースプロジェクトの最初のモジュールとして含めました。

base/pom.xml

...
<modules>
    <module>thirdparty</module>
    <module>mymodule</module>
    ...
</modules>

base/thirdparty/pom.xml:

...
<artifactId>thirdparty</artifactId>
<packaging>pom</packaging>

<repositories>
    <repository>
        <id>First thirdparty repository</id>
        <url>https://...</url>
    </repository>
    ...
</repositories> 

<dependencies>
    <dependency>
       <!-- Dependency from the third party repository -->
    </dependency>
    ....
</dependencies>

base/mymodule/pom.xml:

<dependencies>
    <dependency>
        <groupId>${project.groupId}</groupId>
        <artifactId>thirdparty</artifactId>
        <version>${project.version}</version>
        <type>pom</type>
    </dependency>
    ...
</dependencies>

これにより、ルートプロジェクトがビルドされるとすぐに、サードパーティのリポジトリからライブラリがローカルリポジトリにダウンロードされるようになります。他のすべての依存関係では、リポジトリは表示されないため、ダウンロード時に含まれません。

6
Tobias Liefke