Maven автоматическое обновление SNAPSHOT - PullRequest
29 голосов
/ 01 марта 2010

Допустим, у меня есть один проект со следующим POM:

<groupId>com.mine</groupId>
<artifactId>coreJar</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>

А потом в другом проекте я всегда хочу сослаться на последний SNAPSHOT:

<dependencies> 
    <dependency>
        <groupId>com.mine</groupId>
        <artifactId>coreJar</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    ...
<dependencies> 

Но вместо 0.0.1-SNAPSHOT я хочу, чтобы он всегда брал последнюю версию SNAPSHOT. В прошлом вы могли использовать ПОСЛЕДНИЕ, но с тех пор это не рекомендуется (по разумным причинам).

Я понимаю, Вы можете указать версии , такие как:

[1.5,)

Но я никогда не смогу заставить его работать с "-SNAPSHOT":

[0.0.1,)-SNAPSHOT // Doesn't work!

Тогда возникает вопрос: как заставить Maven получить последний SNAPSHOT в моем другом проекте?

Ответы [ 7 ]

43 голосов
/ 15 октября 2010

Другой вариант (который я использую) - включить в ваш файл pom.xml следующее. Тег updatePolicy заставит maven всегда использовать последний снимок из этого репозитория.

<repositories>
    <repository>
        <id>you-snapshots</id>
        <url>http://host/nexus/repos/snapshots</url>
        <snapshots>
            <updatePolicy>always</updatePolicy>
        </snapshots>
        <releases>
            <updatePolicy>always</updatePolicy>
        </releases>
    </repository>
</repositories>

p.s. Я всегда настраиваю все репозитории в pom.xml, потому что мы используем несколько серверов CI, и их будет довольно сложно настроить (я ленивый ...)

Документ для settings.xml updatePolicy для справки. The frequency for downloading updates - can be "always", "daily" (default), "interval:XXX" (in minutes) or "never" (only if it doesn't exist locally).

15 голосов
/ 02 марта 2010

Использование

mvn -U, --update-snapshots

Forces a check for updated releases and snapshots on remote repository

14 голосов
/ 02 марта 2010

Несколько слов о диапазонах зависимостей и зависимостях SNAPSHOT (цитируя Посредничество зависимостей и разрешение конфликтов проектный документ):

Включение версий SNAPSHOT в спецификацию

Разрешение диапазонов зависимостей не должно преобразовываться в моментальный снимок (версия для разработки), если он не включен в качестве явной границы. Нет необходимости компилировать код разработки, если вы явно не используете новую функцию, при которой снимок станет нижней границей спецификации вашей версии. Поскольку релизы считаются более новыми, чем снимок, к которому они принадлежат, они будут выбраны поверх старого снимка, если он найден.

Итак, чтобы ответить на ваш вопрос, единственный способ использовать SNAPSHOT с диапазонами зависимостей - это использовать границу, и вы не получите автоматически более высокие версии SNAPSHOT по своей конструкции (что действительно имеет смысл).

Лично мне не нравится использовать диапазоны зависимостей, потому что я считаю, что это может привести к проблемам с воспроизводимостью сборки и сделать сборку более хрупкой. Я не рекомендую их.

На всякий случай, обновление версии SNAPSHOT обычно означает, что вы выпускаете некоторый код, и плагин maven release обеспечивает поддержку для этого (см. Обновление версий POM ).

8 голосов
/ 02 марта 2010

Существует плагин Versions для Maven, который позволяет вам обновлять ваш pom до последних лучших SNAPSHOTS в видимых репозиториях. Это делается путем проверки вашего pom и сравнения с удаленными репозиториями, а затем изменения по мере необходимости.

Это полезный инструмент, но я бы определенно хотел увидеть эквивалент устаревшей опции LATEST. Я считаю этот вид зависимости особенно полезным в сценариях непрерывной интеграции.

3 голосов
/ 03 сентября 2014

используйте mvn install -U Вы должны использовать это, чтобы заставить Maven получать последние снимки

1 голос
/ 17 октября 2016

Это

<version>[0.0-SNAPSHOT,)</version>
0 голосов
/ 14 ноября 2012

Если вы хотите обновить ваши релизы SNAPSHOT внутри Eclipse (при использовании m2e / m2eclipse), щелкните правой кнопкой мыши по затронутому проекту, затем выберите «Maven» -> «Обновить проект ...» -> «OK» (с выбранным проект вызывает проблемы).

...