Почему maven 3.2 загружает один и тот же артефакт несколько раз из всех репозиториев, определенных в pom

Я определил 2 репозитория в pom.xml, как показано ниже. Один публичный, а другой сторонний.

<repositories>
   <repository>
        <id>public</id>
        <name>Nexus - Public Repositories</name>
        <layout>default</layout>
        <url>http://mavenrepo.aaa.net/nexus/content/groups/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>       
    <repository>
        <id>thirdparty</id>
        <name>Nexus - Third Party</name>
        <layout>default</layout>
        <url>http://mavenrepo.aaa.net/nexus/content/repositories/thirdparty</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </repository>       
</repositories>

Скажем, есть зависимость с именем grpId:artId:1.1.0, которую я определил в своем файле pom. Эта зависимость присутствует как в репозиториях, определенных выше, так и в сторонних репозиториях.

Когда я запускаю mvn install, я вижу различное поведение в том, как maven загружает артефакт grpId:artId:1.1.0 в зависимости от версии maven, которую я использую.

Поведение: -

<сильный>1. Использование Maven 3.1 и предыдущих версий

  • а. Maven ищет зависимость grpId:artId:1.1.0 в общедоступном репозитории.
  • b. Maven находит зависимость и загружает ее.
  • c. Maven не ищет зависимость grpId:artId:1.1.0 в
    "стороннем" репозитории, поскольку она уже загружена из предыдущего репозитория.

<сильный>2. Использование Maven 3.2

  • а. Maven ищет зависимость grpId:artId:1.1.0 в общедоступном репозитории.
  • b. Maven находит зависимость в общедоступном репозитории и загружает ее.
  • c. Maven снова ищет зависимость grpId:artId:1.1.0 в «стороннем» репозитории, хотя она уже загружена из «общедоступного» репозитория.
  • d. Maven находит зависимость в «стороннем» репозитории, загружает ее и перезаписывает зависимость, загруженную ранее из «общедоступного» репозитория.

Интересно, почему maven ведет себя абсурдно для maven-3.2. Он должен перестать искать зависимость, которая уже разрешена и загружена из одного репозитория.

Есть ли способ добиться этого с помощью maven 3.2?


person Ruchir Sachdeva    schedule 12.11.2014    source источник
comment
Почему у вас есть <updatePolicy>always</updatePolicy>?   -  person khmarbaise    schedule 14.11.2014
comment
updatePolicy просто ищет обновленные метаданные и соответствующим образом обновляет артефакт, но мы можем удалить его. Это не проблема   -  person Ruchir Sachdeva    schedule 15.11.2014


Ответы (1)


Это была ошибка, обнаруженная и исправленная maven в версии 3.2.5.

https://issues.apache.org/jira/browse/MNG-5723

person Ruchir Sachdeva    schedule 14.11.2017