_remote.repositories не позволяет maven разрешать удаленный родитель

У меня есть родительский pom моей компании в репозитории releases на экземпляре Nexus компании.

У меня настройки зеркала <mirrorOf>external:*,!central</mirrorOf>, я не хочу использовать центральный прокси, так как наш Nexus немного медленный.

Когда у меня есть проект maven с родительским набором, например:

<parent>
    <groupId>com.acme.maven</groupId>
    <artifactId>parent-pom</artifactId>
    <version>2</version>
    <relativePath />
</parent>

и проект parent-pom недоступен в локальном репозитории, сборка завершится ошибкой — пока это ожидаемо.

Однако, если я загружаю parent-pom с помощью цели dependency:get, файл pom загружается в локальный репозиторий. Однако, когда я пытаюсь построить проект, он терпит неудачу:

 [exec] [ERROR]   The project com.acme:test:0.0.1-SNAPSHOT (/home/acme/pom.xml) has 1 error
 [exec] [ERROR]     Non-resolvable parent POM: Failure to find com.acme.maven:parent-pom:pom:2 in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of central has elapsed or updates are forced and 'parent.relativePath' points at no local POM @ line 5, column 13 -> [Help 2]

Теперь, если я удалю файл _remote.repositories (и только этот файл) из .m2/repository/com/acme/maven/parent-pom/2/, сборка завершится успешно.

У меня есть обходной путь, но удаление внутренних файлов из репозитория maven вручную не кажется хорошей идеей. Как этого избежать? Также я понятия не имею, почему это происходит, некоторые объяснения будут высоко оценены.

Другие подходы:

  • maven-ant tasks dependencies задача работает (файл _remote.repositories вообще не отображается)
  • пытаюсь построить с -U
  • использование dependency:copy не удается
  • использование dependency:list для pom.xml, имеющего зависимость parent-pom, также не работает

_remote.repositories содержание:

#NOTE: This is an Aether internal implementation file, its format can be changed without prior notice.
#Mon Sep 14 19:59:41 CEST 2015
parent-pom-2.pom>internal-repo=

person Jakub Bochenski    schedule 14.09.2015    source источник


Ответы (1)


Я думаю, что ответ здесь:

Maven 3.0+ обеспечивает разрешение загруженных артефактов из URL-адреса/идентификатора репозитория, который соответствует URL-адресу, доступному для текущего сеанса.

..

IIRC есть опция CLI, которую вы можете включить в Maven 3.1.1, которая сообщает Maven: «Я знаю, что делаю, и не делаю эту проверку на этот раз», т.е. --legacy-local-repository

Действительно, добавление --legacy-local-repository к вызову dependency:get приводит к тому, что он не создает _remote.repositories, а parent-pom можно разрешить.

Я думаю, что поведение задачи Ant dependencies можно объяснить с помощью кода Maven 2.

person Jakub Bochenski    schedule 14.09.2015