Есть ли способ заставить Maven автоматически загружать версии снимков? - PullRequest
18 голосов
/ 10 октября 2011

Итак, у меня есть проект, который зависит от версии снимка другого проекта. Зависимость:

<dependency>
  <groupId>org.oop</groupId>
  <artifactId>oop</artifactId>
  <version>0.9.9-SNAPSHOT</version>
</dependency>

Для проекта oop я выполнил 'mvn clean deploy', поэтому версия моментального снимка должна находиться где-то в центральном репозитории maven. Но когда я делаю чистую установку mvn, вышеупомянутая зависимость снимка не может быть решена, и я получаю это:

Отсутствует:

1) org.oop: oop: jar: 0.9.9-SNAPSHOT

Попробуйте загрузить файл вручную с веб-сайта проекта.

Затем установите его с помощью команды: mvn install: install-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file

В качестве альтернативы, если вы размещаете свой собственный репозиторий, вы можете развернуть файл там: mvn deploy: deploy-file -DgroupId = org.oop -DartifactId = oop -Dversion = 0.9.9-SNAPSHOT -Dpackaging = jar -Dfile = / path / to / file -Durl = [url] -DrepositoryId = [id]

Есть ли способ заставить maven автоматически загружать снимок? Я должен что-то здесь упустить.

EDIT1: В моем файле settings.xml у меня есть:

   <server>
      <id>sonatype-nexus-snapshots</id>
      <username>XXXXXX</username>
      <password>XXXXXX</password>
    </server>

    <server>
      <id>sonatype-nexus-staging</id>
      <username>XXXXXX</username>
      <password>XXXXXX</password>
    </server>

EDIT2: enter image description here

Ответы [ 7 ]

19 голосов
/ 10 октября 2011

Просто добавьте это в ваш ~ / .m2 / settings.xml:

<profiles>
  <profile>
     <id>allow-snapshots</id>
        <activation><activeByDefault>true</activeByDefault></activation>
     <repositories>
       <repository>
         <id>snapshots-repo</id>
         <url>https://oss.sonatype.org/content/repositories/snapshots</url>
         <releases><enabled>false</enabled></releases>
         <snapshots><enabled>true</enabled></snapshots>
       </repository>
     </repositories>
   </profile>
</profiles>
19 голосов
/ 10 октября 2011

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

<updatePolicy>interval:5</updatePolicy>

Это будет проверять Maven каждые 5 минут(если вы строите это часто).В качестве альтернативы вы можете использовать опцию -U или --update-snapshots, чтобы принудительно выполнить проверку вручную.

Однако она не может найти зависимость.Не могли бы вы опубликовать настройки репо и конфигурацию артефакта для зависимости моментального снимка?

Является ли артефакт org.oop:oop:jar:0.9.9-SNAPSHOT в вашем хранилище?

... поэтому версия снимка должна быть где-то в центральном хранилище maven.

Нет, это не так.Я пытался найти его, но не смог его найти.Афаик, есть какой-то механизм постановки, так что, возможно, твои настройки просто неверны.Но обычно, как уже говорили другие, вы бы пошли и использовали свой собственный менеджер репозитория, такой как Artifactory или Nexus.

18 голосов
/ 10 октября 2011

Чтобы обновить снимки, попробуйте с опцией -U

-U,--update-snapshots                  Forces a check for updated
                                       releases and snapshots on remote
                                       repositories

Однако вы сказали:

Я сделал 'mvn clean deploy', поэтому версия снимкадолжно быть где-то в центральном хранилище maven.

Это просто невозможно, ваш снимок отправляется куда-то еще.Если я выполняю mvn clean deploy без настройки своего личного репозитория, я получаю:

Развертывание не удалось: элемент репозитория не был указан в POM внутри элемента distributionManagement или в -DaltDeploymentRepository = id :: layout :: urlпараметр

Чтобы включить развертывание, необходимо добавить некоторую конфигурацию в pom.xml, например:

<distributionManagement>

    <!-- Publish versioned releases here -->
    <repository>
        <id>myrepo</id>
        <name>My releases</name>
        <url>http://nexus.mycompany.com/nexus/content/repositories/releases</url>
    </repository>

    <!-- Publish snapshots here -->
    <snapshotRepository>
        <id>myrepo</id>
        <name>my snapshots</name>
        <url>http://nexus.mycompany.com/nexus/content/repositories/snapshots</url>
    </snapshotRepository>

</distributionManagement>

<repositories>
    <repository>
        <id>myrepo</id>
        <name>My Public Repository</name>
        <url>http://nexus.mycompany.com/nexus/content/groups/public</url>
        <releases>
            <enabled>true</enabled>
        </releases>
        <snapshots>
            <enabled>true</enabled>
        </snapshots>
    </repository>
</repositories>
1 голос
/ 10 октября 2011

Существует ли эта зависимость в вашем хранилище? (в pom.xml или settings.xml)?

Похоже, нет. Кстати, посмотрите на ваш конфиг, просто вы не используете -o (в автономном режиме) Также вы можете использовать -U для обновления снимков.

0 голосов
/ 23 октября 2017

Я столкнулся с проблемой, что снимки не обновляются даже при установке -U в командной строке. Для меня проблема заключалась в том, что моим клиентом был Maven 3, а сервером был Maven 2, а в Maven 3 уникальные снимки больше не поддерживаются. Нам пришлось создать новый репозиторий с моментальными снимками с метками времени для поддержки клиентов 3.xx.

0 голосов
/ 10 октября 2011

Давайте немного проясним терминологию, чтобы убедиться, что нет недопонимания.

"Maven Central" (http://search.maven.org/) - это глобальный сайт, где вы найдете только выпуски. Central не принимает снимкипоэтому развертывание там должно привести к ошибке.

Вы, вероятно, имеете в виду ваш локальный / корпоративный прокси / кеш maven. Их также можно настроить для отклонения версий моментальных снимков. В случае Nexus вы также можете определить более сложные правилаВ моем случае у меня была проблема, которая не давала ошибок во время mvn deploy, но я мог видеть ошибку в журналах сервера.

Попробуйте проследить за данными: включите отладку (mvn -X), чтобы увидетькуда Maven загружает данные. Затем проверьте сервер, чтобы увидеть, действительно ли были загружены артефакты. Проверьте журналы сервера на наличие ошибок.

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

ПК № 1: mvn install -> Ошибка отсутствия зависимости ПК № 2: mvn deploy ПК № 1: mvn install -> Зависимость по-прежнему отсутствует из-за «обновления один раз в день»"policy

Попробуйте mvn install -U, чтобы заставить Maven обновить свои кэшированные метаданные.

0 голосов
/ 10 октября 2011

Вы можете либо

  • используйте родительский проект, который создает все ваши снимки, или
  • разверните свои снимки на сервере сборки maven (nexus / archiva / ..), например, mvn: deploy
...