Когда 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 ]

2 голосов
/ 20 февраля 2019

Чтобы окончательно ответить на заглавный вопрос: Это (настройка на стороне клиента) в (проект, профиль или настройки)

[plugin]?[r|R]epository/[releases|snapshots]/updatePolicy

... тег.

(в настоящее время,maven: 3.6.0, но я полагаю, что «далеко назад» совместимы) возможные значения:

/**
 * Never update locally cached data.
 */
public static final String UPDATE_POLICY_NEVER = "never";
/**
 * Always update locally cached data.
 */
public static final String UPDATE_POLICY_ALWAYS = "always";
/**
 * Update locally cached data once a day.
 */
public static final String UPDATE_POLICY_DAILY = "daily";
/**
 * Update locally cached data **every X minutes** as given by "interval:X".
 */
public static final String UPDATE_POLICY_INTERVAL = "interval";

Текущая оценка (тег maven 3.6.0) реализована следующим образом:

public boolean isUpdatedRequired( RepositorySystemSession session, long lastModified, String policy )
{
    boolean checkForUpdates;
    if ( policy == null )
    {
        policy = "";
    }
    if ( RepositoryPolicy.UPDATE_POLICY_ALWAYS.equals( policy ) )
    {
        checkForUpdates = true;
    }
    else if ( RepositoryPolicy.UPDATE_POLICY_DAILY.equals( policy ) )
    {
        Calendar cal = Calendar.getInstance();
        cal.set( Calendar.HOUR_OF_DAY, 0 );
        cal.set( Calendar.MINUTE, 0 );
        cal.set( Calendar.SECOND, 0 );
        cal.set( Calendar.MILLISECOND, 0 );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else if ( policy.startsWith( RepositoryPolicy.UPDATE_POLICY_INTERVAL ) )
    {
        int minutes = getMinutes( policy );
        Calendar cal = Calendar.getInstance();
        cal.add( Calendar.MINUTE, -minutes );
        checkForUpdates = cal.getTimeInMillis() > lastModified;
    }
    else
    {
        // assume "never"
        checkForUpdates = false;
        if ( !RepositoryPolicy.UPDATE_POLICY_NEVER.equals( policy ) )
        {
            LOGGER.warn( "Unknown repository update policy '{}', assuming '{}'",
                    policy, RepositoryPolicy.UPDATE_POLICY_NEVER );
        }
    }
    return checkForUpdates;
}

.. с:

private int getMinutes( String policy )
{
    int minutes;
    try
    {
        String s = policy.substring( RepositoryPolicy.UPDATE_POLICY_INTERVAL.length() + 1 );
        minutes = Integer.valueOf( s );
    }
    catch ( RuntimeException e )
    {
        minutes = 24 * 60;
        LOGGER.warn( "Non-parseable repository update policy '{}', assuming '{}:1440'",
                policy, RepositoryPolicy.UPDATE_POLICY_INTERVAL );
    }
    return minutes;
}

... где lastModified - (локальный файл) "измененометка времени "/ каждого лежащего в основе артефакта.


В частности, для параметра interval:x:

  • двоеточие : не так уж строго - любое" непустой "символ мог бы сделать это (=, , ...).
  • отрицательные значения x < 0 должны уступить" никогда ".
  • interval:0 Я бы предположилинтервал «минутно» (0–59 секунд или выше ...).
  • исключения числового формата приводят к 24 * 60 минутам (~ «ежедневно»).

..see: DefaultUpdatePolicyAnalyzer , DefaultMetadataResolver # resolMetadata () и RepositoryPolicy

1 голос
/ 21 июля 2014

Как у меня появилась эта проблема,

Когда я перешел с Eclipse Juno на Luna и извлек мои проекты maven из репозитория SVN, у меня возникли те же проблемы при создании приложений.

Что я пробовал? Я попытался очистить локальный репозиторий, а затем снова обновить все версии, используя опцию -U. Но моя проблема продолжалась.

Затем я перешел в «Окно» -> «Настройки» -> «Maven» -> «Настройки пользователя» -> и нажал кнопку «Переиндексировать» в «Локальном репозитории» и подождал, пока произойдет переиндексация.

Вот и все, проблема решена.

0 голосов
/ 30 апреля 2016

Maven имеет updatePolicy настройки для указания частоты проверки обновлений в хранилище или для синхронизации хранилища с удаленным.

  • значение по умолчанию для updatePolicy - ежедневно.
  • Другие значения могут быть всегда / никогда / XX (указав интервал в минутах).

Ниже приведенный пример кода может быть добавлен в файл пользовательских настроек maven для настройки updatePolicy.

<pluginRepositories>
    <pluginRepository>
        <id>Releases</id>
        <url>http://<host>:<port>/nexus/content/repositories/releases/</url>
        <releases>
            <enabled>true</enabled>
            <updatePolicy>daily</updatePolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
    </pluginRepository>             
</pluginRepositories>
0 голосов
/ 13 июня 2012

В некотором роде .. Я получаю

"[ОШИБКА] Не удалось выполнить цель в тестовом проекте проекта: не удалось разрешить зависимости для проекта myjarname: jar: 1.0-0: ошибка при поиске myjarname-core: bundle: 1.0-0 в http://repo1.maven.org/maven2 кэширована в локальной хранилище, разрешение не будет предприниматься повторно, пока не истечет интервал обновления центрального сервера или принудительные обновления -> [Помощь 1] "

Эта ошибка была вызвана случайным использованием Maven 3 вместо Maven 2. Просто подумал, что это может сэкономить кому-то время, потому что мой первый поиск в Google привел меня на эту страницу.

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