Как автоматически обновить локальную папку Maven .m2 для автономной сборки - PullRequest
0 голосов
/ 31 января 2020

Я работаю над большим проектом, который имеет много зависимостей, и многие из них являются зависимостями SNAPSHOT. А из-за зависимостей моментальных снимков сборка занимает огромное количество времени (около часа), поскольку для каждой зависимости необходимо проверить, обновляется ли она в удаленной артефакте или нет, даже если версия моментального снимка не изменилась. С выпусками версий проблем не возникает, так как только если версия обновляется, то проверяется только удаленная, в противном случае используются локально доступные файлы jar из .m2

По сравнению с описанным выше сценарием, если я делаю автономную сборку с флагом -o, когда у меня есть все зависимости, доступные в моем локальном .m2, сборка занимает всего около 5-10 минут, что экономит около 40-45 минуты сборки. Но поскольку проект большой, и над ним работают многие, всякий раз, когда я извлекаю изменения, могут быть некоторые изменения кода, которые требуют последнего снимка и разрывов автономной сборки, поскольку даже одно несоответствие может привести к разрыву сборки.

Итак, чтобы решить эту проблему, я думаю о следующем подходе: 1. Всегда собирать в автономном режиме, используя флаг -o. 2. Создайте некоторый внешний сценарий (вероятно, в nodejs), который будет периодически продолжать сканирование, если зависимости, указанные в pom, обновляются на удаленном артефакте. Если да, потяните в локальный .m2, иначе ничего не делайте.

Есть ли лучшая альтернатива этому? Также, как только я выясню, какой артефакт обновлять, каким способом я могу принудительно обновить только этот конкретный артефакт без транзитивных зависимостей? При вышеупомянутом подходе все еще есть вероятность разрыва сборки, если какие-либо транзитивные зависимости будут изменены, но это случается не часто, и в этом случае мне придется запускать полную сборку в режиме онлайн.

Я думал о настройке локального прокси-сервера-артефакта, но в этом сценарии это не поможет, поскольку для разрешения снимка это будет в любом случае go для удаленного хранилища. Если я сохраню время кеширования дольше, снова появятся шансы потерять изменения и прервать сборку.

1 Ответ

1 голос
/ 31 января 2020

Вы можете контролировать проверку снимков:

Политика загрузки

updatePolicy String Частота загрузки обновлений - может быть «всегда», «ежедневно» (по умолчанию), «интервал»: XXX "(в минутах) или" никогда "(только если он не существует локально).

https://maven.apache.org/ref/3.6.3/maven-settings/settings.html#class_snapshots

Но, вероятно, у вас есть некоторые другая проблема, так как 45 минут на сборку, потраченной впустую на загрузку артефактов, очень много.

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