2014-10-07 3 views
0

Я строю свой многофункциональный проект модуля с помощью командыMaven зависимостей для сборки перед проверкой нексус

mvn clean deploy -DskipTests 

Этот проект имеет 3 Maven модули: A, B, C.

А не зависит ни от чего ,

B ни на что не зависит.

С зависит от А.

Я получаю очень странный сценарий, в котором специалист видит, что C зависит от А, а затем вместо построения из источников, которые он решает проверить нексус для него (как моего .m2 местных репозиторий не содержит A), и он извлекает старую версию A. Затем он продолжает строить все, но когда он достигает C, он использует эту старую версию A и терпит неудачу.

Если я запустил свою сборку в автономном режиме, то она отлично работает, но проблема в том, что я хочу развернуть свои новые артефакты в nexus, когда закончите, а режим автономной работы maven запрещает мне это делать.

Мне интересно, если я делаю что-то действительно странное, это похоже на довольно простой в использовании сценарий.

Редактировать: Если я вхожу в систему для nexus, и я вручную удаляю все старые артефакты, а затем строю с помощью приведенной выше команды, все работает нормально.

Изменить 2: С зависит от А с "при условии" рамки, что-то вроде:

<dependency> 
    <groupId>com.test</groupId> 
    <artifactId>application</artifactId> 
    <scope>provided</scope> 
    <type>jar</type> 
</dependency> 

(версия объявлена ​​в разделе dependencyManagement родительского POM).

+0

Вы не должны видеть поведение, которое вы описываете. Если ваш проект настроен правильно, maven должен использовать вывод из «A» для построения «C». Я думаю, что у вас может быть проблема в вашем POM-файле. – Tim

+2

Покажите свой файл pom. Я предполагаю, что ваши зависимости между модулями просто неправильны, потому что вы описываете типичный симптом, если это так. – khmarbaise

ответ

0

Оказалось, что проблема была связана с каркасом тестирования эспрессо в Android. Одна из зависимостей android в pom.xml была установлена ​​с <scope>test</scope> вместо <scope>provided</scope>, и это вызывало проблемы.

0

Варианты:

  1. совершающие так, что вы получите последние изменения и C создает прекрасную

  2. Make C зависят от конкретной версии A. Обновите версию A и C зависят сделать на нем

+0

Что касается опции (1), я не хочу совершать A перед созданием остальной части проекта. Я хочу, чтобы одна команда делала все. Что касается варианта (2), можете ли вы привести мне пример? Предположим, что C зависит от A-версии1. Я запускаю команду, тогда A-версия1 не найдена в nexus, она создается локально, сборка успешно завершена, B-сборка завершается успешно. Тогда в следующий раз, когда я запустил ту же сборку, A-версия1 уже находится в нексусе, но это старая версия A. Так что maven загружает это и терпит неудачу, как я упомянул в моем вопросе, не так ли? Я не могу продолжать изменять версию A, которая зависит от C после каждой сборки! –

+0

Нет ли простого способа просто сказать: «Эй, посмотри, зависимости, от которых зависит С, так что используйте их вместо проверки связи!» –