Я пытаюсь получить 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
. Итак, кажется, что этот плагин сломан.