Когда maven говорит, что «разрешение не будет предпринято повторно, пока не истечет интервал обновления MyRepo», где указан этот интервал? - PullRequest
474 голосов
/ 01 февраля 2011

В maven я иногда сталкиваюсь с артефактом, исходящим из какого-либо стороннего репозитория, который я еще не построил или не включил в свой репозиторий.

Я получу сообщение об ошибке от клиента maven, в котором говорится, что артефакт не найден:

Ошибка при поиске org.jfrog.maven.annomojo: maven-plugin-anno: jar: 1.4.0 в http://myrepo:80/artifactory/repo был кэширован в локальном репозитории, разрешение не будет предприниматься повторно, пока не истечет интервал обновления MyRepo или принудительные обновления -> [Помощь 1]

Теперь, Я понимаю, что это значит, и могу просто перезапустить мою команду с помощью -U, и с этого момента все нормально работает на .

Однако я нахожу это сообщение об ошибке крайне не интуитивным и пытаюсь избавить моих коллег от некоторых головных болей.

Я пытаюсь выяснить, есть ли место, где я могу изменить эту настройку update interval.

  1. Является ли update interval, который упоминается в этом сообщении об ошибке, параметром на стороне клиента или на стороне сервера?
  2. Если на стороне клиента, как мне его настроить?
  3. Если на стороне сервера, кто-нибудь знает, как / если Nexus / Artifactory предоставляет эти настройки?

Ответы [ 14 ]

235 голосов
/ 25 мая 2011

Я использовал для решения этой проблемы, удалив соответствующий не удалось загрузить каталог артефактов в моем локальном репо.В следующий раз, когда я запускаю команду maven, загрузка артефакта запускается снова.Поэтому я бы сказал, что это настройка на стороне клиента.

Сторона Nexus (сторона сервера репо), эта проблема решена при настройке запланированной задачи.На стороне клиента, это делается с помощью -U, как вы уже указали.

100 голосов
/ 02 апреля 2013

вы можете удалить соответствующий сбойный каталог артефактов в вашем локальном хранилище. А также вы можете просто использовать -U в цели. Это сделает работу. Это работает с Maven 3. Поэтому нет необходимости понижать до Maven 2.

60 голосов
/ 18 мая 2011

У меня была связанная проблема, но ответ Рагурама помог. (У меня пока недостаточно репутации, чтобы проголосовать за него). Я использую Maven в комплекте с NetBeans и получаю то же самое "... было кэшировано в локальном хранилище, разрешение не будет повторно предпринято, пока не истечет интервал обновления нексуса или не произойдет принудительное обновление -> [Помощь 1]" ,

Чтобы это исправить, я добавил <updatePolicy>always</updatePolicy> в свой файл настроек (C: \ Program Files \ NetBeans 7.0 \ java \ maven \ conf \ settings.xml)

<profile>
  <id>nexus</id>
  <!--Enable snapshots for the built in central repo to direct -->
  <!--all requests to nexus via the mirror -->
  <repositories>
    <repository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </repository>
  </repositories>
 <pluginRepositories>
    <pluginRepository>
      <id>central</id>
      <url>http://central</url>
      <releases><enabled>true</enabled><updatePolicy>always</updatePolicy></releases>
      <snapshots><enabled>true</enabled><updatePolicy>always</updatePolicy></snapshots>
    </pluginRepository>
  </pluginRepositories>
</profile>
34 голосов
/ 01 февраля 2011

В соответствии с настройками ссылка :

updatePolicy: Этот элемент указывает частоту попыток обновления.Maven сравнивает временную метку локального POM (хранится в файле метаданных репозитория) с удаленным. Возможны следующие варианты: всегда, ежедневно (по умолчанию), интервал: X (где X - целое число в минутах) или никогда.

Пример:

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>myRepo</id>
          <name>My Repository</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
      ...
    </profile>
  </profiles>
  ...
</settings>
32 голосов
/ 01 мая 2018

Что в основном происходит, так это то, что по умолчанию updatePolicy от maven.Maven будет извлекать банки из репо ежедневно. Так что, если во время 1-й попытки ваш интернет не работал, он не будет пытаться получить эту банку снова, пока не потрачено 24 часа.

Разрешение:

Либо использовать

mvn -U clean install

, где -U принудительно обновит репо

или используйте

<profiles>
    <profile>
      ...
      <repositories>
        <repository>
          <id>myRepo</id>
          <name>My Repository</name>
          <releases>
            <enabled>false</enabled>
            <updatePolicy>always</updatePolicy>
            <checksumPolicy>warn</checksumPolicy>
          </releases>
         </repository>
      </repositories>
      ...
    </profile>
  </profiles>

в ваших настройках.xml

8 голосов
/ 27 июня 2015

Эта ошибка может иногда вводить в заблуждение. 2 вещи, которые вы можете проверить:

  1. Существует ли фактический JAR для зависимости в репо? Ваше сообщение об ошибке содержит URL-адрес, по которому оно ищет, поэтому перейдите туда, а затем перейдите в папку, соответствующую вашей зависимости. Есть ли банка? Если нет, вам нужно изменить свою зависимость. (например, вы можете указывать на родительскую зависимость верхнего уровня, когда вы должны указывать на подпроект)

  2. Если в удаленном репо существует банка, просто удалите свою локальную копию. Он будет находиться в вашем домашнем каталоге (если вы не настроили иначе) в .m2 / repository (ls -a, чтобы показать скрытый, если в Linux).

7 голосов
/ 14 декабря 2018

Хотя вы можете решить эту проблему с помощью чистой установки (переопределяя любые кэшированные зависимости), как @ Sanjeev-Gulgani предлагает с mvn -U clean install

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

mvn dependency:purge-local-repository -DmanualInclude="groupId:artifactId"

Подробнее см. mvn docs .

7 голосов
/ 25 июня 2013

Если вы используете Eclipse, перейдите в Windows -> Настройки -> Maven и снимите флажок «Не обновлять зависимости из удаленных репозиториев» автоматически.

Это работает и с Maven 3.

5 голосов
/ 14 октября 2014

Вам необходимо удалить все файлы "_maven.repositories" из вашего хранилища.

3 голосов
/ 08 октября 2015

Если вы используете Nexus в качестве прокси-сервера репозитория, он имеет настройку «Not Found Cache TTL» со значением по умолчанию 1440 минут (или 24 часа).Понижение этого значения может помочь (Хранилища> Конфигурация> Настройки срока действия).

См. документация для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...