Nexus не будет использовать SNAPSHOTs из стандартной группы по умолчанию
По какой-то причине я не могу заставить Nexus обслуживать мои артефакты SNAPSHOT через общедоступную группу по умолчанию. Я прочитал соответствующий бит руководства Nexus и искал Google, но я ничего не работаю.
Я реализовал материал в разделе 4.2. (Настройка Maven для использования одной группы Nexus) в руководстве, поэтому мои settings.xml выглядят следующим образом:
<settings>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>*</mirrorOf>
<url>http://my-server/nexus/content/groups/public</url>
</mirror>
</mirrors>
<profiles>
<profile>
<id>nexus</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>central</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
</settings>
Все работало нормально, пока я не начал создавать вещи на чистой машине (то есть, я не строил ни одного из проектов SNAPSHOT), и он не загружал бы необходимые зависимости SNAPSHOT. Maven дает мне следующее:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building MyCo Actions Base Classes 1.0.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
Downloading: http://my-sever/nexus/content/groups/public/com/myco/testing/1.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://my-sever/nexus/content/groups/public/com/myco/testing/1.0.0-SNAPSHOT/maven-metadata.xml
Downloading: http://my-sever/nexus/content/groups/public/com/myco/testing/1.0.0-SNAPSHOT/testing-1.0.0-SNAPSHOT.pom
[WARNING] The POM for com.myco:testing:jar:1.0.0-SNAPSHOT is missing, no dependency information available
Downloading: http://my-sever/nexus/content/groups/public/com/myco/testing/1.0.0-SNAPSHOT/testing-1.0.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.023s
[INFO] Finished at: Tue Mar 08 15:55:23 GMT 2011
[INFO] Final Memory: 99M/480M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project actions-base: Could not resolve dependencies for project com.myco:actions-base:jar:1.0.0-SNAPSHOT: Could not find artifact com.myco:testing:jar:1.0.0-SNAPSHOT in nexus (http://my-sever/nexus/content/groups/public) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
Проблема в том, что testing-1.0.0-SNAPSHOT.jar не существует, но test-1.0.0-20110301.182820-1.jar делает. Как я могу заставить Nexus правильно разрешить SNAPSHOT и обслуживать меня своим JAR...?
Ответы
Ответ 1
Я закончил тем, что все это работало с удалением локальных релизов и репозиториев снимков из публичной группы и созданием зеркала, а не только для публичной группы. Итак, мои параметры settings.xml содержали:
<profiles>
<profile>
<id>nexus</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>maven-releases</id>
<url>http://myhost.com/nexus/content/repositories/releases</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>maven-snapshots</id>
<url>http://myhost.com/nexus/content/repositories/snapshots</url>
<layout>default</layout>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>madeUp</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>madeUp</id>
<url>http://central</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
<mirrors>
<mirror>
<id>nexus</id>
<mirrorOf>madeUp</mirrorOf>
<url>http://myhost.com/nexus/content/groups/public</url>
</mirror>
</mirrors>
Ответ 2
Такая же проблема для меня, когда настройка nexus работает как зеркало. После добавления всех репозиториев (выпуск и моментальные снимки) в группу Публичный репозиторий вы можете найти все моментальные снимки, просмотрев соответствующий URL-адрес:
![Browser public group]()
Но maven в любом случае не сможет получить моментальные снимки из зеркала, как описано в этом потоке. Он швыряет, что maven не извлекает моментальные снимки из зеркала, пока вы явно не сказали ему это сделать. В качестве решения я добавил тот же URL-адрес, что и репозиторий-тег, и он работает как ожидалось:
<settings>
<mirrors>
<mirror>
<id>nexus-mirror</id>
<name>Nexus Mirror</name>
<url>http://my-server/nexus/content/groups/public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>nexus-public</id>
<name>Nexus Public Repository</name>
<url>http://my-server/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
</snapshots>
</repository>
</repositories>
</profile>
</profiles>
</settings>
Даже установка updatePolicy-Tag во все зеркало не вызывает никаких проблем. Поскольку maven достаточно умен, чтобы обновлять моментальные снимки только в каждой сборке, но не в выпусках.
Ответ 3
Я тоже пробовал это, и он не прошел. Существует второе описание проблемы здесь. Возможно, публичное репо Nexus вмешивается в вещи.
В итоге я добавил второй репозиторий в settings.xml, указав непосредственно на наш локальный репозиторий снимков.
<repository>
<id>ummsSnaps</id>
<url>https://team/nexus/content/repositories/snapshots</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
И это сработало.
Ответ 4
Убедитесь, что ваш репозиторий снимков добавлен в вашу открытую группу. Похоже, что у вас правильно настроен параметр settings.xml, поэтому должно быть просто, чтобы /public не содержал репозиторий моментального снимка.