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

Есть ли способ сделать Maven для загрузки моментальных снимков автоматически?

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

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

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

Missing:

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: В моих настройках .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

4b9b3361

Ответ 1

Просто добавьте это в свой файл ~/.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>

Ответ 2

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

<updatePolicy>interval:5</updatePolicy>

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

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

Является ли артефакт org.oop:oop:jar:0.9.9-SNAPSHOT в вашем репозитории?

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

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

Ответ 3

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

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

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

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

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

Не удалось выполнить развертывание: элемент репозитория не был указан в POM внутри элемента распределения управления или в параметре -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>

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

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

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

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

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

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

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

Ответ 7

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