2014-02-06 2 views
1

UPDATE: Упрощение моего вопроса. У меня есть модуль mod1, который используется как зависимость в модуле mod2. Я хотел бы убедиться, что mod2 всегда использует последнюю версию моментального снимка mod1. Как я могу достичь этого в Maven?Использовать последний снимок зависимости?

================

У меня есть два модуля, где один модуль используется как зависимость в другом модуле. Как я могу убедиться, что последний моментальный снимок mod1 всегда используется в mod2? Оба модули упоминаются в родительском П следующим образом -

<modules> 
    <module>mod1</module> 
    <module>mod2</module> 
</modules> 

У меня есть версии выпуска Mod1 на удаленном Maven репо (версия 1.0). Теперь, в моей сборке, когда в mod1 есть код, он создается как 1.1-SNAPSHOT (не развернутый при удаленном репо). Как я могу убедиться, что mod2 использует эту (последнюю) версию моментального снимка? Если источник mod1 был изменен, новая версия 1.1-SNAPSHOT должна использоваться в mod2, и если mod1 не имеет изменения источника, тогда существующая версия 1.1 должна использоваться в mod2. Может ли кто-нибудь предложить, как всегда использовать последний снимок/выпуск здесь? Я попробовал следующее pom.xml для Mod2 -

<dependency> 
    <groupId>com.test</groupId> 
    <artifactId>mod2</artifactId> 
    <version>LATEST</version> 
</dependency> 

Однако, это всегда разрешается в релиз версии 1.0 и никогда не решает 1,1-съёмка, которая находится в местной репо. Как я могу убедиться, что последний снимок используется? Получу любое предложение.

ответ

0

Я нашел решение. Под зависимостью, добавив следующее работало -

<version>[1.0-SNAPSHOT,)</version> 

Если снимок не присутствовал, он взял последний выпуск, который является то, что мне было нужно.

+0

Никогда не используйте диапазоны версий, потому что это делает вашу сборку не предсказуемой и не воспроизводимой. – khmarbaise

+0

Это действительно зависит от вашего использования и того, как вы его настроили. Это позволяет мне делать то, что я хотел сделать, как я объяснил в этом вопросе. Я хотел бы объяснить, как я мог бы сделать свои сборки предсказуемыми и воспроизводимыми при использовании в сочетании с Дженкинсом, но это было бы не по теме по этому вопросу. – JUG

0

Как правило, модули одного и того же проекта используют одну и ту же версию, вообще не указывая версию в модуле. В этом случае Maven вернется к версии родителя.

С этой установкой, mod2/pom.xml может иметь что-то вроде этого:

<dependency> 
     <groupId>com.test</groupId> 
     <artifactId>mod1</artifactId> 
     <version>${project.version}</version> 
    </dependency> 

В этой ситуации вам не нужно устанавливать mod1 на локальном хранилище на всех.

Просто запустите команду mvn из каталога верхнего уровня, и mod2 сможет решить проблему без проблем. mod1. Eclipse и Idea также будут корректно обрабатывать эту установку.

Если у вас есть специальный прецедент, в котором вам необходимо установить mod1, или вам нужны два модуля, чтобы иметь отдельные номера версий, пожалуйста, объясните это, поскольку это может помочь ответить на вопрос для вас лучше.

Наконец, вы можете найти полезное значение Versions plugin. Он может управлять версиями вашего проекта, плагина и зависимостей, при необходимости обновлять их.

+0

Спасибо. Если я всегда придерживаюсь той же версии mod1, что и mod2, ваше предложение будет работать. Тем не менее, мне нужно иметь возможность хранить отдельные версии обоих. mod1 также используется несколькими другими модулями. Для сборки mod2 может измениться без изменения mod1, и в этом случае mod1 не будет строить и, следовательно, будет иметь более раннюю версию, которая должна быть передана в mod2 pom. Однако, если mod1 был изменен вместе с mod2, то оба они были бы в одной и той же новой версии (1.1-SNAPSHOT), и в этом случае мне нужно убедиться, что 1.1-SNAPSHOT mod1 используется в mod2 pom. Возможное? – JUG

+0

Я не уверен, что это возможно. Лучше всего, вероятно, управлять mod2 pom.xml версии зависимости mod1 с плагинами версий. Плохая практика использовать LATEST или что-то в этом роде, потому что сборка никогда не будет стабильной. Основываясь на ваших комментариях, вам не нужно устанавливать ресурсы в локальный репозиторий, вы должны иметь возможность компилироваться из каталога верхнего уровня. – JBCP

2

Версия -SNAPSHOT уже включает понятие «новейшее».

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

Перед тем, как начать, у вас есть: mod1 версия 1.0-SNAPSHOT, mod2 версия 1.1-SNAPSHOT и это зависит от mod1:1.0-SNAPSHOT

Теперь вы хотите освободить. Для этого вы удаляете -SNAPSHOT всюду, строите & разворачиваете.

После развертывания, вы увеличите версии:

mod1 версия теперь 1.1-SNAPSHOT, mod2 версия 1.2-SNAPSHOT и это зависит от mod1:1.1-SNAPSHOT

Вы никогда не будете иметь ситуацию, которая снимок версия Mod2 зависит от версии версия mod1.

Смежные вопросы