Заставьте maven всегда получать артефакты из целевой папки - PullRequest
0 голосов
/ 06 марта 2020

Обстоятельства

Было бы неплохо разбить длительные задания по сборке, особенно в многомодульных проектах.

  1. Скомпилировать все mvn clean install или mvn clean package
  2. Выполнение модульных тестов на каждом модуле mvn surefire:test
  3. Выполнение интеграционных тестов ant and stuff
  4. Публикация sh артефактов в удаленном хранилище mvn my.own.tools:publish-plugin:publish
  5. Выполнение шагов после сборки (Tagging, et c) build server stuff

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

Наблюдение

Maven использует содержимое папок target, прежде чем выполнить поиск в локальный репозиторий или удаленный репозиторий. Это верно, когда содержимое целевых каталогов создается предыдущим phase во время указанного запуска c.

Пример: mvn clean install surefire:test

Если у теста есть зависимости, maven сначала будет смотреть в целевые каталоги, которые были созданы во время compile phase.

Если команда разбита на две части, похоже, что maven вообще не распознает папки target.

Пример: mvn clean install; mvn surefire:test

Теперь maven загружает все зависимости из локального хранилища или, если их нет, из удаленного хранилища.

Проблема (и)

  • На шаге 2 maven игнорирует содержимое внутри целевой папки, созданное на шаге 1.
  • Шаг 2 выполняется на другом сервере сборки, нежели шаг 1. Однако весь файл структура (включая целевые папки) из шага 1 была скопирована в рабочий каталог из шага 2. Артефакты, от которых зависят тесты, не извлекаются из этих каталогов. Поскольку у каждого сервера сборки есть свой локальный репозиторий, они не найдены, и в удаленном репозитории они никогда не загружались.
  • Любая идея сделать нашего зверя более модульным и разделить проект, к сожалению, невозможна

Вопрос

Каким образом maven может принудительно загружать зависимости из существующих целевых папок многомодульного проекта при любых обстоятельствах? Я понимаю, что maven не знает об этих папках на шаге 2, поскольку они не создаются во время этого запуска maven. Но как я могу заставить maven посмотреть, существуют ли эти папки?

Более трудоемкая проблема; -)

Наш "Publi sh -Plugin" в шаге 4, кажется, работает в основном нормально и загружает артефакты из целевых папок. Информация о проекте собрана внутри Mojo обычными мавенскими свойствами. Но есть некоторые zip-файлы, созданные на шаге 1 org.apache.maven.plugins:maven-assembly-plugin. Эти zip-файлы не найдены, хотя они находятся в целевой папке. Теперь Maven пытается загрузить их, что забавно, потому что это делает их доступными для загрузки.

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