Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How maven handle multiple <repository> configurations?

Tags:

maven

maven-3

I am getting more and more comfortable with maven. But still some questions.

I have multiple <repository> in my pom.xml.

  • How will maven handle these repos when downloading artifacts? Will it search by the declaration order?

  • Besides the explicitly declared ones, will maven still check the default central repo at http://repo.maven.apache.org/maven2/?

  • If something cannot be found within the explicitly configured repo, will maven fallback to the default central repo?

  • Is it good to use multiple repos? I am kind of worried about inconsistency.

Below is the <repositories> section of my pom.xml:

<repositories>
    <repository>
        <id>ibiblio-central-repo</id>
        <layout>default</layout>
        <name>ibiblio-central-repo</name>
        <releases>
            <checksumPolicy>warn</checksumPolicy>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>http://maven.ibiblio.org/maven2/</url>
    </repository>

    <repository>
        <id>oschina-central-repo</id>
        <layout>default</layout>
        <name>oschina-central-repo</name>
        <releases>
            <checksumPolicy>warn</checksumPolicy>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>http://maven.oschina.net/content/groups/public/</url>
    </repository>

    <repository>
        <id>oschina-central-repo-3rd-party</id>
        <layout>default</layout>
        <name>oschina-central-repo-3rd-party</name>
        <releases>
            <checksumPolicy>warn</checksumPolicy>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>http://maven.oschina.net/content/repositories/thirdparty/</url>
    </repository>
</repositories>
like image 290
smwikipedia Avatar asked Dec 12 '15 09:12

smwikipedia


Video Answer


1 Answers

How will maven handle these repos when downloading artifacts? Will it search by the declaration order?

Order of declaration as part of the merged settings (see next answer). I have found this JIRA ticket providing further details.

Besides the explicitly declared ones, will maven still check the default central repo at http://repo.maven.apache.org/maven2/?

Yes, as it will be provided by the Maven super POM, implicit parent of all Maven Pom (here an official example), unless specified in your settings.xml (if you override the repository id specified in the super POM). You can use the Maven Help Plugin to get the effective settings Maven will apply to your build and the effective pom maven will actually (effectively) run.
As documented here, the repositories element is inherited.

If something cannot be found within the explicitly configured repo, will maven fallback to the default central repo?

As above. Moreover, you could also influence this mechanism via any configured Maven mirror. You could, for instance, redirect Maven to your company repository (see below) instead of looking up on the default one.

Is it good to use multiple repos? I am kind of worried about inconsistency.

You probably don't need many configured repositories, but you might need more than one if the dependencies you are looking for are not provided by the default repository. A good approach would be to have an enterprise Maven repository (i.e. Artifactory, Nexus) and make your local settings only point to it. Then, configure the internal Maven repository to point to other repositories, in a centralized (and governed) manner.

like image 116
A_Di-Matteo Avatar answered Oct 22 '22 14:10

A_Di-Matteo