Почему maven использует мой внутренний репозиторий перед моим локальным репозиторием? - PullRequest
6 голосов
/ 21 октября 2011

когда я занимаюсь разработкой, мне часто приходится менять зависимость, но я не готов к развертыванию своих изменений. Например, я работаю над проектом Foo и понимаю, что мне нужно добавить метод в общую библиотеку. Перед развертыванием этого изменения в нашем внутреннем репозитории я хотел бы установить изменения в общей библиотеке (mvn install) и перекомпилировать Foo для использования общей библиотеки в локальном репозитории (обратите внимание, что я использую все версии SNAPSHOT).

Однако после того, как я mvn install моя общая библиотека, когда я перекомпилирую Foo, она не использует новую общую библиотеку - она ​​продолжает использовать последний SNAPSHOT общей библиотеки во внутреннем хранилище. Если я разверну измененную общую библиотеку, Foo немедленно ее заберет.

Как мне заставить maven сначала смотреть в локальном хранилище?

ОБНОВЛЕНИЕ: когда файл устанавливается в локальный репозиторий, он получает имя типа foo-1.0.0-SNAPSHOT.jar, но когда я его развертываю, он получает метку времени foo-1.0.0-20111104.191316-23.jar. Я думаю, именно поэтому удаленный артефакт тянется каждый раз. Есть идеи, почему mvn install не работает как mvn deploy? Связано ли это с тем, что у меня есть репозиторий моментальных снимков, настроенный для развертывания?

Ответы [ 2 ]

3 голосов
/ 21 октября 2011

По умолчанию Maven проверяет наличие новых версий артефактов SNAPSHOT один раз в день. Когда он выполнит эту проверку, он загрузит SNAPSHOTS из удаленных репозиториев, которые новее, чем у вас локально. Либо ваши метки времени не синхронизированы, и вы делаете что-то, чтобы переопределить политику обновления Maven (например, вызывая ее с -U или , устанавливая udpatePolicy в "всегда"), либо локальный репозиторий, в который вы устанавливаете артефакт, отличается от того, с которым вы впоследствии запускаете Maven. То, что вы описываете, не является типичным поведением Maven. Для лучшего ответа, дайте больше деталей в вашем вопросе.

Один индикатор, который вы можете найти: после установки вашего общего артефакта, когда вы в следующий раз скомпилируете Foo, Maven снова загружает общий артефакт? Если это так, то он действительно получает его с пульта, и вам нужно проверить настройки обновления. Если нет, то у вас что-то странное происходит на месте.

0 голосов
/ 20 декабря 2012

Вы можете попробовать эту опцию. Это сработало для меня.

В главном файле pom.xml вашего проекта измените настройку «снимки» на «false».

<repository>
    <id>yourRepo</id>
    <name>Repository</name>
    <url>http://your.repo.com/repo</url>
    <snapshots>
        <enabled>false</enabled>
    </snapshots>
</repository>
...