Обстоятельства
Было бы неплохо разбить длительные задания по сборке, особенно в многомодульных проектах.
- Скомпилировать все
mvn clean install
или mvn clean package
- Выполнение модульных тестов на каждом модуле
mvn surefire:test
- Выполнение интеграционных тестов
ant and stuff
- Публикация sh артефактов в удаленном хранилище
mvn my.own.tools:publish-plugin:publish
- Выполнение шагов после сборки (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 пытается загрузить их, что забавно, потому что это делает их доступными для загрузки.