2013-11-18 2 views
2

В проекте среднего размера maven (> 40 модулей) рефакторинг структуры модуля может легко сделать сборку ссылкой на модули, которые больше не существуют (например, потому что они были переименованы). К сожалению, проект все равно будет построен, потому что он автоматически выберет (устаревшие) версии старых модулей из репозитория. Тем не менее, я бы хотел, чтобы сборка не выполнялась немедленно.Обеспечение автономности сборки maven

Можно ли сообщить maven, что артефакты с определенной группойId не всегда должны создаваться локально?

+4

Интересный вопрос. Я не думаю, что можно сделать именно то, что вы просите. Я бы сделал следующее: 1) использовать плагин 'versions' для обновления всех модулей и межблочных модулей до некоторой несуществующей версии (т. Е. 123-321-SNAPSHOT); 2) построить проект. В этом случае сборка завершится неудачно, когда maven не сможет найти зависимость от несуществующего модуля версии выше. –

ответ

0

Подумав немного больше, это кажется, что один довольно простой способ обеспечения целостности является

  1. запустить полную сборку

    mvn clean install

  2. Удалите соответствующие части в локальном хранилище

    rm -rf ~/.m2/repository/DIR_FOR_MY_GROUPID

  3. Run оффлайн построить

    mvn -o clean install

Последний шаг потерпит неудачу, если мы зависим от ничего в данном GroupID, что не является продуктом той же сборки.

2

Для этой же проблемы у меня есть работа cron (или работа jenkins), чтобы очистить локальное репо раз в неделю. Это не идеальное решение, так как сборка будет продолжать неправильно строить (в худшем случае) 1 неделю, пока она не сработает.

Если вы хотите что-то более контролируемое, вы можете добавить dependency:purge-local-repository в качестве предыдущего поста, что-то вроде mvn dependency:purge-local-repository deploy. Больше информации here

+1

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

0

Мой предпочтительный способ решить эту задачу - rm -Rf ~/.m2/repository.

Для этого рекомендуется использовать внутренний менеджер хранилища, такой как Nexus или Artifactory.

+1

Не помогает, если устаревшие артефакты доступны из внутреннего Nexus/Artifactory. –

+0

Да, вы правы. – MariuszS

Смежные вопросы