Почему maven загружает зависимости [SNAPSHOT] из хранилища, даже если в моем локальном хранилище существует jar
Потому что это ожидаемое поведение с зависимостями SNASPSHOT. В отличие от фиксированных версий, Maven будет периодически пытаться загрузить самую последнюю версию данного SNAPSHOT. Это очень полезно, когда вы зависите от проекта, который находится в стадии активной разработки. Из Maven Reference :
Версии Maven могут содержать строку
буквально означает, что проект
В настоящее время активно развивается. Если
версия содержит строку
«SNAPSHOT», тогда Maven расширится
этот токен для значения даты и времени
преобразован в UTC (координируется
Universal Time) при установке или
выпустить этот компонент. Например,
если ваш проект имеет версию
«1.0-SNAPSHOT», и вы развернете это
артефакты проекта Maven
хранилище, Maven будет расширять это
версия «1.0-20080207-230803-1», если
вы должны были развернуть релиз в 11:08
PM 7 февраля 2008 г. UTC. В других
словами, когда вы развертываете снимок, вы
не делают релиз программного обеспечения
составная часть; вы выпускаете
снимок компонента в определенном
время.
Зачем вам это использовать? СНАПШОТ
версии используются для проектов под
активное развитие. Если ваш проект
зависит от программного компонента, который
находится в стадии активной разработки, вы можете
зависит от релиза SNAPSHOT, и
Maven будет периодически пытаться
загрузить последний снимок с
хранилище при запуске сборки.
Точно так же, если следующий выпуск вашего
Система будет иметь версию
«1.4», ваш проект будет иметь
версия "1.4-SNAPSHOT" пока не было
официально выпущен.
По умолчанию Maven не будет
проверить релизы SNAPSHOT на удаленном
Хранилища. Зависеть от SNAPSHOT
релизы, пользователи должны явно включить
возможность загрузки снимков
используя repository
или pluginRepository
элемент в ПОМ.
Выпуская проект, вы должны
разрешить все зависимости от SNAPSHOT
версии к зависимостям от выпущенных
версии. Если проект зависит от
SNAPSHOT, он не стабилен как
зависимости могут меняться со временем.
Артефакты, опубликованные без снимка
Репозитории Maven, такие как
http://repo1.maven.org/maven2 не может
зависит от версий SNAPSHOT, так как
Супер POM Maven имеет снимок
отключен из центрального хранилища.
Версии SNAPSHOT для разработки
только.
Если вы действительно хотите изменить это поведение, вы можете изменить updatePolicy
вашего репозитория с поддержкой моментальных снимков:
<repositories>
<repository>
<id>my-repo</id>
<name>My Corporate Repository</name>
<url>http://repo.mycompany.com/maven2</url>
<layout>default</layout>
...
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
Переключение на never
заставит вас использовать ручное обновление (используя mvn -U
). Но будьте осторожны, обычно это не то, чего люди хотят и ожидают от SNAPSHOT.
Для справки, Maven 3 имеет параметр командной строки -nsu, --no-snapshot-updates
, позволяющий Подавлять обновления SNAPSHOT .
Смотри также