Можно ли ожидать, что `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 потерпит неудачу на testDPS с сообщением, как 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,

Другие вопросы по тегам