Maven SNAPSHOT версия не загружается с Nexus
В нашей среде работает Sonatype Nexus, в котором настроен еще один Nexus в качестве прокси-репозитория. Когда мы потребляем наши зависимости, мы просим наш Nexus для них. Это работало нормально до вчерашнего дня, когда я добавил новую зависимость в наш проект.
Кажется, что Maven неправильно разрешает развернутые версии снимков. В журнале maven я вижу, что он загружает файл maven-metadata.xml, но когда он пытается загрузить zip-файл, содержащий наши двоичные файлы, он не заменяет -SNAPSHOT текущей версией снимка
> mvn -f My.Product.dependencies.xml process-resources -DConfiguration=AnyConfig -U -X
[DEBUG] Could not find metadata com.company.team:My.New.Dependency:2.2-SNAPSHOT/maven-metadata.xml in local (d:\Maven\repositories)
[DEBUG] Using connector WagonRepositoryConnector with priority 0 for http://buildserver:8082/nexus/content/groups/company
Downloading: http://buildserver:8082/nexus/content/groups/company/com/company/team/My.New.Dependency/2.2-SNAPSHOT/maven-metadata.xml
Downloaded: http://buildserver:8082/nexus/content/groups/company/com/company/team/My.New.Dependency/2.2-SNAPSHOT/maven-metadata.xml (850 B at 13.2 KB/sec)
[DEBUG] Reading resolution tracking file d:\Maven\repositories\com\company\team\My.New.Dependency\2.2-SNAPSHOT\resolver-status.properties
[DEBUG] Writing resolution tracking file d:\Maven\repositories\com\company\team\My.New.Dependency\2.2-SNAPSHOT\resolver-status.properties
[DEBUG] Could not find metadata com.company.team:My.New.Dependency:2.2-SNAPSHOT/maven-metadata.xml in local (d:\Maven\repositories)
[DEBUG] Using connector WagonRepositoryConnector with priority 0 for http://buildserver:8082/nexus/content/groups/company
Downloading: http://buildserver:8082/nexus/content/groups/company/com/company/team/My.New.Dependency/2.2-SNAPSHOT/maven-metadata.xml
Downloaded: http://buildserver:8082/nexus/content/groups/company/com/company/team/My.New.Dependency/2.2-SNAPSHOT/maven-metadata.xml (850 B at 55.3 KB/sec)
[DEBUG] Reading resolution tracking file d:\Maven\repositories\com\company\team\My.New.Dependency\2.2-SNAPSHOT\resolver-status.properties
[DEBUG] Writing resolution tracking file d:\Maven\repositories\com\company\team\My.New.Dependency\2.2-SNAPSHOT\resolver-status.properties
...
Downloading: http://buildserver:8082/nexus/content/groups/company/com/company/team/My.New.Dependency/2.2-SNAPSHOT/My.New.Dependency-2.2-SNAPSHOT-vs2010-40-AnyCpu-Release.zip
[DEBUG] Reading resolution tracking file d:\Maven\repositories\com\company\team\My.New.Dependency\2.2-SNAPSHOT\My.New.Dependency-2.2-SNAPSHOT-vs2010-40-AnyCpu-Release.zip.lastUpdated
[DEBUG] Writing resolution tracking file d:\Maven\repositories\com\company\team\My.New.Dependency\2.2-SNAPSHOT\My.New.Dependency-2.2-SNAPSHOT-vs2010-40-AnyCpu-Release.zip.lastUpdated
[INFO] ------------------------------------------------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] My.Client.App FAILURE [1.922s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.687s
[INFO] Finished at: Thu Oct 13 09:54:24 CEST 2016
[INFO] Final Memory: 9M/177M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project My.Client.App: Could not resolve dependencies for project com.company.team2:My.Client.App:pom:7.0-SNAPSHOT: The following artifacts could not be resolved: com.company.team:My.New.Dependency:zip:vs2010-40-AnyCpu-Release:2.2-SNAPSHOT: Could not find artifact com.company.team:My.New.Dependency:zip:vs2010-40-AnyCpu-Release:2.2-SNAPSHOT in company (http://buildserver:8082/nexus/content/groups/company) -> [Help 1]
Файл maven-metadata.xml содержит информацию о версии снимка:
<?xml version="1.0" encoding="UTF-8"?>
<metadata modelVersion="1.1.0">
<groupId>com.company.team</groupId>
<artifactId>My.New.Dependency</artifactId>
<version>2.2-SNAPSHOT</version>
<versioning>
<snapshot>
<timestamp>20161011.235855</timestamp>
<buildNumber>102</buildNumber>
</snapshot>
<lastUpdated>20161011235855</lastUpdated>
<snapshotVersions>
<snapshotVersion>
<extension>pom</extension>
<value>2.2-20161011.235855-102</value>
<updated>20161011235855</updated>
</snapshotVersion>
<snapshotVersion>
<classifier>vs2010-40-AnyCPU-Release</classifier>
<extension>zip</extension>
<value>2.2-20161011.235855-102</value>
<updated>20161011235855</updated>
</snapshotVersion>
</snapshotVersions>
</versioning>
</metadata>
Когда я проверяю список каталогов папки, из которой он загружает материал, версия 2.2-20161011.235855-102 правильно там:
Все другие зависимости из этого же репозитория работают отлично, только недавно введенная не загружается. В настоящее время меня сводит с ума, что Maven не заменяет -SNAPSHOT фактическим номером версии снимка, как это происходит для всех других зависимостей. Я также попробовал варианты "Expire Cache" и "Update Index" в пользовательском интерфейсе Nexus, но это не помогло. Что может привести к тому, что Maven перейдет с фактического номера версии на -SNAPSHOT? Также нет записи в журнале, которая могла бы объяснить это.
2 ответа
После 1 миллиона попыток и сравнения конфигурации других зависимостей с новыми, я, наконец, обнаружил проблему: идентификаторы артефактов (классификаторы) чувствительны к регистру. В моем POM-файле клиента я имел в виду vs2010-40-AnyCpu-Release
но развернуто vs2010-40-AnyCPU-Release
(обратите внимание на столицу AnyCPU).
В лог-файле вы можете увидеть, что он пытается загрузить файл с AnyCpu в нижнем регистре. После того, как я изменил его в верхний регистр, он работал.
У вас есть файл
My.New.Dependency-2.2-SNAPSHOT-vs2010-40-AnyCpu-Release.zip.lastUpdated
в вашем локальном хранилище. Попробуйте удалить его. Это может заблокировать Maven от повторной попытки загрузки.