Как очистить кэш Apache Maven? - PullRequest
174 голосов
/ 14 сентября 2011

В последнее время в Apache Maven, похоже, возникают проблемы с кэшированием.Выполнение чистой установки в наших проектах с использованием Windows Vista или Windows 7 иногда приводит к появлению артефактов с теми же данными, что и в предыдущей сборке, даже если файлы нового артефакта должны были быть обновлены.

Есть ли способ очистить этот кэш, чтобы принудительно выполнить принудительную установку?maven, чтобы всегда вызывать чистую сборку локального артефакта, который должен быть собран?

В частности, у нас есть проблемы при создании веб-приложения с помощью плагина войны.Maven версия 3.0.3.Версия плагина War 2.1.1.

Ответы [ 6 ]

188 голосов
/ 14 сентября 2011

Удалите артефакты (или полное локальное репо) из c:\Users\<username>\.m2\repository вручную.

153 голосов
/ 26 марта 2014

Чтобы очистить локальный кеш, попробуйте использовать плагин зависимостей.

  1. mvn dependency:purge-local-repository: это попытка удалить файлы локального репозитория, но она всегда идет и заполняет локальный репозиторий после того, как что-то было удалено.
  2. mvn dependency:purge-local-repository -DreResolve=false: Это позволяет избежать повторного разрешения зависимостей, но, похоже, время от времени отправляется в сеть.
  3. mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false: Это было добавлено Павлом Пранаком и, кажется, работает хорошо. Я бы использовал третий, если вы хотите очистить локальное репо, и первый, если вы просто хотите выбросить локальное репо и снова получить зависимости.
12 голосов
/ 14 сентября 2011

Вы проверили / изменили настройки updatePolicy для своих репозиториев в settings.xml.

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

Попробуйте установить значение always.

8 голосов
/ 25 марта 2017

Я бы сделал следующее:

mvn dependency:purge-local-repository -DactTransitively=false -DreResolve=false --fail-at-end

Флаги говорят maven не пытаться разрешать зависимости или попадать в сеть. Удалить то, что вы видите локально.

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

6 голосов
/ 04 января 2013

Это работает в Spring Tool Suite v 3.1.0.RELEASE, но я предполагаю, что оно также доступно и в Eclipse.

После удаления артефактов вручную (как указано выше в palacsint) вв каталоге /username/.m2 выполните повторную индексацию файлов, выполнив следующие действия:

Перейдите в меню Windows-> Preferences-> Maven-> User Settings.

Нажмите «Reindex»Кнопка рядом с текстовым полем «Локальный репозиторий».Нажмите «Применить», затем «ОК», и все готово.

2 голосов
/ 10 июля 2018

Как указывалось в некоторых ответах, иногда вы действительно хотите полностью удалить локальный репозиторий, например, могут быть некоторые артефакты, которые невозможно удалить, поскольку на них больше не ссылается pom .

Если вы хотите встроить это удаление в фазу maven, как, например, clean, вы можете использовать maven-clean-plugin и получить доступ к хранилищу через настройки, например:

 <plugin>
    <inherited>false</inherited>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-antrun-plugin</artifactId>
    <version>1.1</version>
    <executions>
        <execution>
            <phase>clean</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo>Base clean is attached to deleting local maven cache</echo>
                    <echo>${settings.localRepository}</echo>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

<plugin>
    <inherited>false</inherited>
    <artifactId>maven-clean-plugin</artifactId>
    <version>3.1.0</version>
    <configuration>
        <filesets>
            <fileset>
                <directory>${settings.localRepository}</directory>
            </fileset>
        </filesets>
    </configuration>
</plugin>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...