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

Maven не может найти мои локальные артефакты

Я не могу запустить mvn -o package, потому что он жалуется на

Система репозитория отключена, но артефакт com.liferay.portal: util-bridges: jar: 6.1.20 недоступен в локальный репозиторий.

Но я проверил свой локальный репозиторий и что там артефакт существует. Я также попробовал решение установки updatePolicy никогда в файле settings.xml, но это не сработало.

4b9b3361

Ответ 1

До Maven 3.0.x Maven не отслеживал происхождение файлов в локальном репозитории.

Это может привести к проблемам с сборкой, особенно если вы создали что-то, что перечислило (теперь мертвый) очень borked репозиторий java.net2... Не только это хранилище изменило выпущенные артефакты (крайне плохая и злая практика), но и опубликованные артефакты в тех же координатах, что и артефакты на центральном, но с различным содержанием (невероятно злые)

Итак, у вас может быть работа с сборкой (потому что у вас есть commons-io: commons-io: 2.0 из центра) уничтожить локальное репо, и сборка завершилась неудачно (потому что теперь вы получаете commons-io: commons-io: 2.0 из java.net2, который был совершенно другим артефактом с различными зависимостями в pom) или наоборот.

Вышеупомянутая ситуация является одним из драйверов для использования менеджера хранилища maven, поскольку это позволяет вам управлять подмножеством репозитория, который вы выставляете ниже по течению, и порядок, в котором артефакты разрешены из нескольких репозиториев (обычно называемых маршрутизацией правила)

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

Итак, с Maven 3.0.x, когда артефакт загружается из репозитория, maven оставляет файл _maven.repositories для записи, где был разрешен файл. Если вы строите проект, а эффективный список репозиториев не включает в себя местоположение, из которого был устранен артефакт, тогда Maven решает, что это как если бы артефакт не был в кеше и будет пытаться повторно разрешить артефакт...

В версии 3.0.x есть несколько ошибок. Самое критичное из того, как обрабатывается offline... А именно: когда в автономном режиме maven 3.0.x считает, что нет репозиториев, поэтому всегда найдется несоответствие файла _maven.repositories!!!

Обходной путь для Maven 3.0.x заключается в удалении этих файлов из локального кеша, например

$ find ~/.m2/repository -name _maven.repositories -exec rm -v {} \;

Побочным эффектом является то, что вы теряете защиту, которую Maven 3.0.x пытается обеспечить.

Хорошей новостью является то, что Maven 3.1 будет иметь требуемое исправление (если мы сможем когда-либо получить наш акт вместе и выпустить выход из двери)

С Maven 3.1, когда в автономном режиме файл _maven.repositories игнорируется (semi-), а также есть возможность игнорировать этот файл для онлайн-сборки (называемый устаревшим режимом)

На данный момент (1 июня 2013 года) 4-я попытка сократить выпуск, который соответствует требованиям законодательства и тестирования, продолжается... Итак, если предположить, что в 4-й раз повезет, я надеюсь увидеть 3.1. 0-alpha-1, выпущенный через 3-4 дня... Но это может быть более продолжительным, если мы хотим дать изменения в 3.1 достаточно времени, чтобы замачивать, чтобы гарантировать, что сборки не сломаются (произошли изменения в API (случайно - ish - API необходим плагину сайта и зависимостей), от которого зависели авторы плагинов (хотя они и не должны были), поэтому есть потенциал, хотя мы думаем, что у нас есть все основания)

Надеюсь, что ответит на ваш вопрос (и, возможно, еще несколько вы не знали, что у вас есть;-))

Ответ 2

Мне также пришлось удалить _remote.repositories так же, как описанные выше _maven.repositories. Я использую Maven 3.1.1

find ~/.m2/repository -name _remote.repositories -exec rm -v {} \;

Ответ 3

У меня была эта проблема, когда я использовал apache-maven-3.0.4, проблема исчезла сразу после перехода на apache-maven-3.3.1.

Ответ 4

У меня была эта проблема в Ubuntu Linux, когда я установил локальные артефакты через оболочку script. Решение заключалось в том, чтобы удалить локальные артефакты и установить их снова "вручную" - вызов mvn install:install-file через терминал.