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>
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With