#java #maven #pipeline
Вопрос:
У нас есть единый репозиторий для нескольких микроуслуг, управляемых с помощью нескольких модулей maven. Прямо сейчас я пытаюсь оптимизировать наш конвейер, разделив их как можно больше, но, к сожалению, Maven, похоже, не поддерживает это.
У меня есть следующая многомодульная структура maven:
Backend
- module-a
- module-b
- module-c
Конвейер, которого я хочу достичь, выглядит следующим образом: артефакты от одного задания к следующему определяются стрелками:
[Install All Dependencies] -{SRC-WITH-.M2}-> [Test-Compile module-a] -{MODULE-A-WITH-TARGET}-> [Unit-Test module-a] -{MODULE-A-WITH-TARGET}-> [Package-Deploy module-a]
-{SRC-WITH-.M2}-> [Test-Compile module-b] -{MODULE-B-WITH-TARGET}-> [Unit-Test module-b] -{MODULE-B-WITH-TARGET}-> [Package-Deploy module-b]
-{SRC-WITH-.M2}-> [Test-Compile module-c] -{MODULE-C-WITH-TARGET}-> [Unit-Test module-c] -{MODULE-C-WITH-TARGET}-> [Package-Deploy module-c]
Очевидно, я бы не задавал этот вопрос, если бы это работало так, как я хочу, чтобы это работало. Проблема в том, что , хотя я и сделал mvn test-compile -am -pl module-a
это, это не работает, так как mvn не может разрешить подмодули pom.xml файлы, без родительского pom.xml файл.
И я серьезно не хочу каждый раз передавать следующие задания в полный внутренний каталог, так как это просто потеря времени для возможной скорости нашего конвейера. Наш каталог очень большой, и это будет стоить нам от 10 до 20 секунд каждый раз, когда будет запускаться новое задание.
Чего я в основном хочу добиться, так это полностью функционирующего и полностью независимого каталога подмодулей для работы, не беспокоясь о том, что они технически являются многомодульными, как только они будут скомпилированы. К сожалению, я не могу заставить это работать, так как maven выдает ошибку, что родительский pom.xml отсутствует, если я передаю каталог модулей только с его целевым каталогом на следующее задание. Предоставление родительского pom.xml поскольку дополнительный артефакт для следующей работы не работает так же хорошо, как родитель pom.xml очевидно, выдает ошибку, что некоторые подмодули отсутствуют.
Я действительно не могу понять, что делать. Может быть, кто-нибудь сможет мне здесь помочь, так как я не думаю, что это не то, что невозможно. В противном случае мне действительно нужно оценить, следует ли нам продолжать использовать многомодульный Mavens.
Я надеюсь на помощь.
Ответ №1:
В многомодульном проекте Maven вы всегда строите из основного POM.
Обычно вы создаете весь многомодульный проект за один запуск Maven.
Комментарии:
1. Я знаю. Но, как я уже сказал, я не хочу создавать их все в одном, а рассматриваю их в конвейере как отдельные, полностью независимые и пригодные для использования модули, чтобы максимально распараллелить их во время выполнения конвейера по разным причинам.
2. Тогда не используйте многомодульный Maven. (Кстати, многомодульный Maven также позволяет строить параллельно)
3. Значит, другого пути нет? Лучший вопрос: на каком этапе можно запускать модульные тесты и интеграционные тесты без использования исходного кода? В какой момент жизненного цикла?
4. Многомодульность не предназначена для разделения так, как вы описываете. Тем не менее, это разделение редко бывает необходимо, потому что оно быстрое и надежное. Вы, конечно, можете определить полностью отдельные проекты Maven с общим родительским POM и создать собственную оркестровку результирующей сборки.
5. О другом вашем вопросе: вы не отделяете тесты от сборки. Ты просто позвони
mvn clean install
илиmvn clean deploy
.