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

Выборки всех зависимостей maven, включая зависимости плагина

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

Мы докционировали нашу сборку maven, чтобы мы могли запускать ее из наших jenkins, не имея на машинке jenkins множества зависимостей, специфичных для сборки, (зависимости Java, redis, maven и т.д.). Наша сборка основана на инкрементных сборках докеров, которые выполняют только те шаги, которые действительно нуждаются в повторном запуске.

Наша основная сборка - это DockerFile, который имеет несколько шагов для установки jdk, maven и т.д. Затем он делает

COPY ./pom.xml /opt/inbot-api/pom.xml RUN mvn dependency:copy-dependencies clean

Это загрузит зависимости в локальный репозиторий maven, а затем очистит целевой каталог.

Затем мы копируем исходное дерево в изображение и запускаем полную сборку.

COPY ./src /opt/inbot-api/src RUN mvn -e clean install

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

В наш DockerFile гораздо больше, чем это уместно, но в конечном итоге он создает файл докеров с нашими скомпилированными артефактами, конфигурацией nginx и всеми нашими зависимостями времени выполнения, которые мы можем развернуть в ECS.

Это почти работает, за исключением того, что mvn clean install все еще загружает дополнительные зависимости плагинов для каждой сборки. Таким образом, это зависимости, на которые не распространяется шаг копий-зависимостей.

Мой вопрос, как мне получить RUN mvn dependency:copy-dependencies clean для загрузки всех зависимостей, в том числе зависимостей плагина. Я видел, как люди на самом деле делают mvn verify clean вместо mvn dependency:copy-dependencies clean, но в нашем случае это медленный процесс. Мне было интересно, есть ли лучший способ сделать это.

Буду признателен за любые отзывы о том, как улучшить это.

Обновление

Теперь я делаю

RUN mvn -B -T 4 dependency:copy-dependencies dependency:resolve-plugins dependency:go-offline clean

И он по-прежнему загружает больше вещей с помощью mvn clean install после этого. A mvn -o clean install все еще не работает, несмотря на dependency:go-offline. Итак, кажется, что этот плагин сломан.

4b9b3361

Ответ 2

Я почти решаю с этим:

RUN mvn install -DskipTests dependency:resolve dependency:resolve-plugins

Ответ 3

Это работает для меня, никаких других зависимостей для загрузки:

RUN mvn -B dependency:resolve dependency:resolve-plugins