Многомодульное приложение maven

У меня есть многомодульный проект maven, где основной проект зависит от подмодуля. Каждая зависимость подмодуля определяется версией следующим образом: ${pom.version}. Я использую плагин выпуска maven. Если я попытаюсь подготовить релиз, у меня будет ошибка об отсутствующей версии подмодуля.

Пример:

основная помпа находится на версии 1.0, я пытаюсь ее выпустить. Maven создает каждый подмодуль до версии 1.1, затем пытается собрать родительский модуль, а затем происходит сбой. Потому что он не может найти sub-module-1.1.

Я не знаю, как сообщить maven о сборке и немедленной установке в локальное репо каждого подмодуля, который он создает. Я использую maven2.

Мой пом:

<modelVersion>4.0.0</modelVersion>

<groupId>com.voncuver</groupId>
<artifactId>voncuver</artifactId>
<packaging>pom</packaging>
<version>1.1-SNAPSHOT</version>
<name>multimodule</name>

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

(...)

<dependencyManagement>
    <dependencies>
        <dependency>
            <artifactId>mod1</artifactId>
            <groupId>com.voncuver</groupId>
            <version>${pom.version}</version>
        </dependency>
        <dependency>
            <artifactId>mod2</artifactId>
            <groupId>com.voncuver</groupId>
            <version>${pom.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
(...)

person voncuver    schedule 13.08.2012    source источник
comment
вы явно устанавливаете версию каждого подмодуля в ${pom.version}? Свойство версии наследуется от родителя...   -  person Michael Wiles    schedule 13.08.2012
comment
Во-первых, не могли бы вы опубликовать свой pom (отрывок в порядке), кроме того, не используйте pom.version, лучше проект.версия   -  person khmarbaise    schedule 13.08.2012
comment
Плагин выпуска будет автоматически обновлять версии зависимостей из реактора, поэтому на самом деле нет необходимости ссылаться на ${project.version}, также имейте в виду, что @khmarbaise сказал, что ${pom.version} устарело в пользу ${ проект.версия}   -  person Stephen Connolly    schedule 14.08.2012


Ответы (1)


Вероятно, вам следует опубликовать немного больше структуры вашего проекта, но обычно многомодульный проект выглядит так:

project
   mod1
   mod2
   mod3
   pom.xml

Основной pom.xml будет иметь тип упаковки "pom" и иметь в нем раздел для сборки всего остального:

<packaging>pom</packaging>
<modules>
  <module>mod1</module>
  <module>mod2</module>
  <module>mod3</module>
</modules>

Затем самый надежный способ убедиться, что все построено правильно, - это выполнить:

mvn чистая установка

Без «установки» вполне возможно, что в реакторе maven ничего не будет найдено, особенно в зависимости от того, какую версию maven вы используете (и несколько других факторов).

person Matt    schedule 13.08.2012
comment
У ОП проблемы с maven-release-plugin, и это намного сложнее, чем просто запустить mvn install. Я не уверен, что этот ответ сильно поможет, поскольку вопрос не так ясен. В данный момент я поставлю минус, извините... - person maba; 13.08.2012
comment
@maba Я хочу сказать, что выпуск плагина или нет, недостаточно информации о структуре его проекта, чтобы кто-либо мог оказать какую-либо помощь. Я просто предложил, как должна выглядеть структура, если она не будет относительно стандартной. - person Matt; 13.08.2012
comment
Запуск mvn release:perform выполнит предопределенную фазу Maven mvn deploy, которая автоматически выполнит mvn install. - person yorkw; 14.08.2012
comment
Если ваш проект не будет собираться из чистого локального репозитория, не дойдя до этапа установки, значит, вы делаете Maven неправильно. Хороший проект maven должен собраться правильно, если вы сделаете следующее: rm -rvf ~/.m2/repository && mvn clean verify Если вам нужно дойти до установки, вы неправильно структурировали свой проект или полагаетесь на дрянные плагины - person Stephen Connolly; 14.08.2012
comment
Я могу собрать проект mu в локальном репозитории. Просто введите mvn clean install. У меня есть структура, похожая на ведьму Мэтта. У меня проблема, когда я пытаюсь освободить. Пробую релиз по mvn release:prepare. Плагин задает зависимость разрешения вопроса: да, когда спрашивают о версии, я набираю для увеличения версии 1.1->1.2. Он строит каждый подмодуль, например. он собирает и выпускает версию 1.1 и увеличивает POM (подмодуль) до версии 1.2. И если он попытается собрать родительский проект версии 1.1, произойдет сбой, потому что он не сможет найти зависимость от подмодуля версии 1.1. Эта версия создана давно. - person voncuver; 14.08.2012