So geben Sie ein Repository für eine Abhängigkeit in Maven an

74

In Projekten mit mehreren Abhängigkeiten und Repositorys ist der Try-and-Error-Ansatz von Maven zum Herunterladen von Abhängigkeiten etwas umständlich und langsam. Daher habe ich mich gefragt, ob es eine Möglichkeit gibt, ein bestimmtes Repo für einige deklarierte Abhängigkeiten festzulegen.

Zum Beispiel möchte ich, dass Bouncycastle direkt BouncyCastles Maven-Repo unter http://repo2.maven.org/maven2/org/bouncycastle/ anstelle des offiziellen Maven überprüft .

Dario Castañé
quelle

Antworten:

49

Nicht möglich. Maven überprüft die Repositorys in ihrer Deklarationsreihenfolge, bis ein bestimmtes Artefakt aufgelöst wird (oder nicht).

Einige Repository-Manager können dies jedoch tun. Zum Beispiel hat Nexus eine Routenfunktion , die etwas Äquivalentes bewirkt.

Pascal Thivent
quelle
1
Vielen Dank! Ich war mir sicher, dass es nicht möglich war, aber ich wollte es von anderen Maven-Benutzern wissen. Ich habe gerade die definierten Repos reduziert und ein lokales erstellt.
Dario Castañé
11
Dies wäre eine gute Ergänzung zu Maven, und ich habe darum gebeten. Es würde Maven ermöglichen, in der Github-Welt zu arbeiten.
TimP
Ab Januar 2019 ist dies in Gradle möglich (obwohl ich es noch nicht ausprobiert habe). Siehe stackoverflow.com/a/54465569
Net Wolf
14

Ich habe Bibliotheken aus Repositorys von Drittanbietern in ein eigenes Projekt verschoben und dieses Projekt als erstes Modul in mein Basisprojekt aufgenommen:

base / pom.xml

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

base / Drittanbieter / 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>

Dadurch wird sichergestellt, dass die Bibliotheken aus dem Repository des Drittanbieters in das lokale Repository heruntergeladen werden, sobald das Root-Projekt erstellt wird. Bei allen anderen Abhängigkeiten sind die Repositorys nicht sichtbar und werden daher beim Herunterladen nicht berücksichtigt.

Tobias Liefke
quelle