Ответ 1
Вероятно, что метаданные нарушены, либо в Nexus, из которого вы загружаете артефакт, либо в локальный репозиторий.
Если Nexus принадлежит вам, я бы восстановил метаданные.
Вот результат mvn -version:
Apache Maven 3.0.4 (r1232337; 2012-01-17 00:44:56-0800)
Maven home: /usr/share/maven
Java version: 1.7.0_67, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_67.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.8.5", arch: "x86_64", family: "mac"
Предположим, что у меня есть зависимость от моментального снимка:
<dependency>
<groupId>org.puzzled</groupId>
<artifactId>foo</artifactId>
<version>1.0.4-SNAPSHOT</version>
</dependency>
У меня есть загруженная копия этого моментального снимка в моем локальном репо. Но затем другие разработчики внесли улучшения, и есть обновление для foo-1.0.4-SNAPSHOT.jar. Я хочу, чтобы Maven исполнил заказ, чтобы обновить эту зависимость, загрузив ее из удаленного репозитория.
В ответ на этот и многие другие вопросы по SO, если я делаю
mvn clean -U package
он должен просто (повторно) загрузить все зависимости. Правильно? Это не то, что происходит. Он загружает метаданные для зависимостей моментальных снимков, выводит (и ошибочно) на то, что обновление не требуется. Мне нужно удалить связанный подкаталог в моем локальном репозитории .m2 для Maven для обновления выпуска моментального снимка из удаленного репо, даже с флагом -U.
Является ли это ошибкой, или я чего-то не хватает?
Вероятно, что метаданные нарушены, либо в Nexus, из которого вы загружаете артефакт, либо в локальный репозиторий.
Если Nexus принадлежит вам, я бы восстановил метаданные.
Возможно ли, что репозиторий публикует ваш foo
с помощью уникального имени SNAPSHOT?
Эта запись хорошо описывает разницу между уникальным и неповторимым артефактом SNAPSHOT.
По сути, он не является уникальным, если метаданные артефакта появляются на nexus как foo-1.0.4-SNAPSHOT.jar
. Он уникален, если он отображается как foo-1.0.4-20160122.172609-36.jar
.
Вы можете публиковать уникальные снимки моментальных снимков в Maven 3, но все же разрешать старые временные снимки с уникальными моментами... но это довольно неплохо. Взглянув на древний документ, кажется, что существует некоторое нечеткое и неопределенное взаимодействие между датой файловой системы и метаданных .xml на локальном и удаленные компьютеры.
По существу: (1) Постарайтесь, чтобы ваши зависимости SNAPSHOT были опубликованы с уникальными артефактами, и (2) если они не являются, не зависят от обнаружения новых SNAPSHOT. Используйте mvn dependency:purge-local-repository
с соответствующим включением, чтобы удалить старые SNAPSHOT из локального m2.
mvn clean install -U
-U означает принудительное обновление зависимостей.