0

я клонировал репозиторий проекта Apache ActiveMQ Artemis (https://github.com/apache/activemq-artemis), а затем напечаталНастройки Maven для компиляции (вместо загрузки) зависимости

mvn -Ptests test -pl :integration-tests 

Я был удивлен видеть сообщения журнала, как в следующем

... 
Downloading: http://repository.apache.org/snapshots/org/apache/activemq/artemis-selector/1.4.0-SNAPSHOT/artemis-selector-1.4.0-20160625.030221-11.jar 
Downloading: http://repository.apache.org/snapshots/org/apache/activemq/artemis-core-client/1.4.0-SNAPSHOT/artemis-core-client-1.4.0-20160625.030211-11.jar 
... 

Поскольку, например, artemis-core-client содержится в репозитории git, который я клонировал в начале, я бы ожидал, что maven просто построит его оттуда.

Таким образом, когда я вношу изменения в основной клиентский источник, они получают результаты тестов интеграции.

Вместо этого maven загружает банку из хранилища.

Вопрос: Как настроить maven, чтобы всегда строить все модули, которые находятся в репозитории git, и загружать только «истинные» зависимости, что я имею в виду не в репозитории git?

+2

По сути, это то же самое, как этот вопрос: http://stackoverflow.com/questions/33131880/maven-multi-module-project-not-find-sibling-module Вы должны запустить Maven из корневого проекта, а не непосредственно внутри модуля. Это связано с тем, что зависимости не установлены, поэтому Maven пытается их загрузить. – Tunaki

+0

@Tunaki Итак, «-pl: integration-tests» - это то, что заставляет maven загружать, а не компилировать. Правильно? Потому что я запускаю mvn в каталоге, где находится основной файл проекта .pom. – user7610

+0

Нет, в главном проекте нет модуля интеграционных тестов, проверьте мой ответ. Вы выполняете maven в тестовом/основном проекте, а не в библиотеке/главном проекте. –

ответ

1

Вы не выполнив Maven построить на основной проект, на главной pom.xml, который действительно определяет artemis-selector и artemis-core-client модулей, среди других.

Вы выполняете сборку Maven на tests и ее pom.xml, где определены только модули тестирования. Это побочный/тестовый проект, который имеет родительский предыдущий файл pom, но он не играет никакой роли в определении родительских модулей. Следовательно, зависимости не разрешаются как модули, а как зависимости Maven.

Вы должны сначала установить (через mvn clean install) прежний проект, чтобы библиотеки были доступны в вашем локальном кеше Maven (следовательно, загрузка не будет запущена), а затем выполните проект tests.


Проверить official doc для наследования против разницы агрегации для дальнейшего уточнения его.

От переполнения стека, то последующие потоки также может быть интересно:

+0

«Сначала вы должны установить (через mvn clean install) прежний проект« Это кажется несколько ошибочным, потому что IMO очень легко запускает тесты против другого набора банок, чем я хотел протестировать. Это лучшее, что можно сделать с Maven, или лучше настроить проект? Я задам новый вопрос, если вы считаете, что это вызвано. – user7610

+0

@JiriDanek это стратегия, выбранная для проекта, я бы сказал, вероятно, чтобы уменьшить количество модулей или провести интеграцию теста на другой основной проект для разделения проблем (нет интеграционных тестов на модулях, чтобы не проводить интеграционных тестов при работе в код прогресса?). В качестве другой стратегии весь проект, посвященный тестированию, мог быть профилем основного проекта, добавив его модули во всю сборку. Однако, из комментария pom, похоже, что вся основная сборка может занять более 2 часов, поэтому, вероятно, она также сыграла определенную роль в этом выборе. –

+0

@JiriDanek, если это вам помогло, рассмотрите [принятие] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) ответ, чтобы вопрос не появляются как неотвеченные в глобальном масштабе. Благодарю. –