Search code examples
mavenrepositorymaven-plugin

Who configures all these Maven repositories in my build?


I am running mvn dependency:list-repositories in order to find out what repositories is maven actually considering and their order (I need this to troubleshoot my settings.xml configuration).

For a bigger project that does not use any <repository> tags in its pom.xml files (parent and child modules) I am getting much more repositories than I expected. I was expecting to get only Maven central repository but I get:

[INFO] Repositories used by this build:
[INFO]        id: sonatype-nexus-snapshots
      url: https://oss.sonatype.org/content/repositories/snapshots
   layout: default
snapshots: [enabled => true, update => daily]
 releases: [enabled => false, update => daily]

[INFO]        id: apache.snapshots
      url: http://repository.apache.org/snapshots
   layout: default
snapshots: [enabled => true, update => daily]
 releases: [enabled => false, update => daily]

[INFO]        id: netbeans
      url: http://bits.netbeans.org/nexus/content/groups/netbeans
   layout: default
snapshots: [enabled => false, update => daily]
 releases: [enabled => true, update => daily]

[INFO]        id: spring-libs-snapshot
      url: https://repo.spring.io/libs-snapshot
   layout: default
snapshots: [enabled => true, update => daily]
 releases: [enabled => true, update => daily]

[INFO]        id: apache.snapshots
      url: https://repository.apache.org/snapshots
   layout: default
snapshots: [enabled => true, update => daily]
 releases: [enabled => false, update => daily]

[INFO]        id: spring-libs-release
      url: https://repo.spring.io/libs-release
   layout: default
snapshots: [enabled => true, update => daily]
 releases: [enabled => true, update => daily]

[INFO]        id: central
      url: https://repo.maven.apache.org/maven2
   layout: default
snapshots: [enabled => false, update => daily]
 releases: [enabled => true, update => daily]

I searched where the super pom could be but did not find an absolute answer for it. I still looked in the location pointed by:

But I never see anything else but:

<repositories>
    <repository>
        <id>central</id>
        <name>Maven Repository Switchboard</name>
        <layout>default</layout>
        <url>http://repo1.maven.org/maven2</url>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>
</repositories>

So, where are all these repositories configured or who configures/implies them automatically?


Solution

  • The solution for me was actually the command mvn help:evaluate and then, when prompted, asking for the value of ${project.repositories}. I found this in this SO answer (in this question the user wanted to get a list of default repositories, while I wanted to get the list of actual configured repositories).

    ...
    [INFO] Enter the Maven expression i.e. ${project.groupId} or 0 to exit?:
    ${project.repositories}
    

    The result is the actual list of repositories that are visible for the POM file:

    <repositories>
      <repository>
        <id>confluent</id>
        <url>http://packages.confluent.io/maven/</url>
        <layout>default</layout>
      </repository>
      <repository>
        <id>central</id>
        <name>Central Repository</name>
        <url>https://repo.maven.apache.org/maven2</url>
        <layout>default</layout>
        <location>
          <lineNumber>27</lineNumber>
          <columnNumber>17</columnNumber>
          <source>
            <modelId>org.apache.maven:maven-model-builder:3.6.3:super-pom</modelId>
            <location>jar:file:/usr/local/Cellar/maven/3.6.3/libexec/lib/maven-model-builder-3.6.3.jar!/org/apache/maven/model/pom-4.0.0.xml</location>
          </source>
        </location>
        <idLocation>
          <lineNumber>28</lineNumber>
          <columnNumber>11</columnNumber>
          <source reference="../../location/source"/>
        </idLocation>
        <nameLocation>
          <lineNumber>29</lineNumber>
          <columnNumber>13</columnNumber>
          <source reference="../../location/source"/>
        </nameLocation>
        <urlLocation>
          <lineNumber>30</lineNumber>
          <columnNumber>12</columnNumber>
          <source reference="../../location/source"/>
        </urlLocation>
        <layoutLocation>
          <lineNumber>31</lineNumber>
          <columnNumber>15</columnNumber>
          <source reference="../../location/source"/>
        </layoutLocation>
        <snapshots>
          <enabled>false</enabled>
          <location>
            <lineNumber>32</lineNumber>
            <columnNumber>18</columnNumber>
            <source reference="../../../location/source"/>
          </location>
          <enabledLocation>
            <lineNumber>33</lineNumber>
            <columnNumber>18</columnNumber>
            <source reference="../../../location/source"/>
          </enabledLocation>
        </snapshots>
      </repository>
    </repositories>