Подтвердить что ты не робот

Обновление Maven автоматическое SNAPSHOT

Скажем, у меня есть один проект со следующим 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. Раньше вы могли использовать LATEST, но с тех пор это было устаревшим (по разумным причинам).

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

[1.5,)

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

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

Вопрос в том, как мне получить maven, чтобы захватить последнюю SNAPSHOT в моем другом проекте?

4b9b3361

Ответ 1

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

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

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

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

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

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

Ответ 2

Другим вариантом (который я использую) является включение следующего в ваш 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, и их будет сложно сконфигурировать (я ленив...)

Doc на 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).

Ответ 3

Используйте

mvn -U, --update-snapshots

Forces a check for updated releases and snapshots on remote repository

Ответ 4

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

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

Ответ 5

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

Ответ 6

Это

<version>[0.0-SNAPSHOT,)</version>

Ответ 7

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