Можно ли ожидать, что `mvn compile` будет работать с многомодульными сборками реакторов Maven?
Можно mvn compile
ожидать работы с многомодульными сборками реактора Maven?
Я пытаюсь работать над проектом, который использует реактор / многомодульную сборку Maven. когда mvn compile
не удалось*, мне сказали люди, знакомые с проектом, что mvn install
нужен, а не mvn compile
потому что это реакторная сборка.
В то время как mvn install
действительно работает, потому что Maven может затем извлечь зависимость сборки из локального репозитория, мне кажется неправильным, что я должен публиковать данные в репозитории, так как это может создать проблемы, особенно в средах CI.
Тем не менее, почти каждый пример, который я могу найти, касающийся многомодульного проекта, использует mvn clean install
в том числе Maven по примеру. Я не нашел примеров mvn compile
что я могу отнести к многомодульным проектам, заставляя меня думать, что здесь есть ограничение / требование Maven.
Отмечу что mvn compile
я работал с примером, представленным в Maven by Example, но это относительно простой проект, поэтому я знаю, что не могу принять это, чтобы означать, что он должен работать в целом.
* Не удалось, потому что не удалось найти одну из зависимостей, которая была успешно построена ранее при сборке реактора.
3 ответа
Как указано в комментарии @khmarbaise и продемонстрировано тем, что он работает с примером Maven By Example. mvn compile
а также mvn test
может работать с реакторными сборками.
Однако не все плагины хорошо работают с таким подходом. Например, выполнение работы test-jar может потребовать изменения фазы.
С помощью mvn package
как предложено khmarbaise, вероятно, даст гораздо меньше из этих проблем, а также позволит избежать проблем, вызванных использованием mvn install
или же mvn deploy
,
Если ваш многомодульный проект имеет взаимозависимости друг с другом, то на самом деле вполне логично, что вам нужно как минимум install
эти зависимости для вашего локального хранилища, прежде чем другие будут компилироваться.
Ты можешь использовать --also-make-dependents
вариант. Он настраивает Maven для создания проекта и его зависимых элементов. На самом деле, команда проверяет все проекты в реакторе, чтобы найти проекты, которые зависят от конкретного проекта. Он будет автоматически строить эти проекты и ничего больше.
$ mvn --projects your-sample-project --also-make-dependents install
Ссылка на ресурс: Maven Советы и хитрости: Дополнительные параметры Reactor
Я столкнулся с этой проблемой для многомодульных проектов. Например, у меня будет модуль под названием base
от которого зависит любой другой модуль, как для обычного объема, так и для test
объем. Существует зависимость от области тестирования, поэтому я могу поделиться общими классами и утилитами модульного тестирования.
mvn compile
потерпит неудачу на test
DPS с сообщением, как Could not resolve dependencies for project com.example:zydeco:jar:0.0.1: Failure to find com.example:base:jar:tests:0.0.1
Однако используя mvn test -Dmaven.test.skip.exec=true
по духу такой же как compile
и он найдет решение всех внутрипроектных тестовых зависимостей просто отлично.
Если я бегу что-то вроде mvn dependency:tree
, это не удастся для обычных зависимостей с сообщением, как Could not resolve dependencies for project com.example:zydeco:jar:0.0.1: Failure to find com.example:base:jar:0.0.1
Я согласен с другими людьми, которые избегают package
а также install
желательно - чтобы не было устаревшего кода. В прошлом я на самом деле писал сценарии, которые создают пустые / поддельные файлы jar, чтобы такие команды, как mvn dependency:build-classpath
может работать.
Я не уверен, что есть с этим рядом с Maven. Это в моем списке, чтобы посмотреть на sbt
а также gradle
,