2016-10-07 2 views
1

Вопросы, подобные этой гавани, были заданы снова и снова, но почему-то они просто сосредотачиваются на зависимостях. Таким образом, согласно maven documentation порядок сборки определяется следующим образом.Как модули порядка Maven в реакторе

  • зависимость проекта от другого модуля в сборке
  • плагин декларации, где плагин еще модули в сборке
  • плагин зависимость от другого модуля в сборке
  • удлинительный сборки объявление в другом модуле в сборке
  • порядок, указанный в элементе <modules> (если не применяется иное правило)

Первое правило прекращено, например. если модуль A зависит от модуля B, последний строится первым.

Четвертое правило (последнее) также совершенно очевидно. Если прежние три правила не применяются, мы рассмотрим порядок в разделе модуля.

Остальные два правила не так понятны для меня. Английский - это не мой родной язык, но мне интересно, не содержит ли правило два опечатки.

Я ищу простой пример, который объясняет эти два правила в деталях.

+0

Лучше всего было бы показать проект в качестве примера (может быть на github), так что проще взглянуть на него ... – khmarbaise

+0

Не могли бы вы «решить» свою проблему, объявив зависимость от A до C? –

+0

На самом деле, меня не интересует решение этой конкретной проблемы. Поэтому я отредактировал вопрос, чтобы удалить это. Мне действительно интересно, как работают эти правила сортировки. – pjanssen

ответ

1

Let's go through them один за другим.

  • зависимость проекта от другого модуля в сборке

Это означает, что если модуль А имеет зависимость от модуля B, то B должен быть построен до А. Это ручки в случае, когда в POM А, вы бы:

<dependencies> 
    <dependency> 
    <groupId>${project.groupId}<groupId> 
    <artifactId>B<artifactId> 
    <version>${project.version}</version> 
    </dependency> 
</dependencies> 
  • плагин декларации, где плагин еще модули в сборке

Это означает, что если модуль А использует a Maven plugin, который представляет собой модуль B, то B должен быть построен до A. Это обрабатывает случай, когда, в POM А, вы бы:

<build> 
    <plugins> 
    <plugin> 
     <groupId>${project.groupId}<groupId> 
     <artifactId>B<artifactId> 
     <version>${project.version}</version> 
    </plugin> 
    </plugins> 
</build> 
  • плагин зависимость от другого модуля в сборке

Это означает, что если модуль A использует плагин Maven that has a dependency на модуле B, то B должен быть построен до A.Это обрабатывает случай, когда в POM А, вы бы:

<build> 
    <plugins> 
    <plugin> 
     <groupId>some.plugin.groupId<groupId> 
     <artifactId>some.plugin.artifactId<artifactId> 
     <version>some.version</version> 
     <dependencies> 
     <dependency> 
      <groupId>${project.groupId}<groupId> 
      <artifactId>B<artifactId> 
      <version>${project.version}</version> 
     </dependency> 
     </dependencies> 
    </plugin> 
    </plugins> 
</build> 

Обратите внимание, что это правило применяется после того, как последний, так что даже если сам плагин является также модуль сборки, его будет построено ранее, убедившись, что безопасно разрешать зависимости.

  • декларация расширения сборки на другом модуле сборки

Это означает, что если модуль А объявляет использовать as extention модуль B, то B должен быть построен до А. Это обрабатывает случай, когда в POM А, вы бы:

<build> 
    <extensions> 
    <extension> 
     <groupId>${project.groupId}</groupId> 
     <artifactId>B</artifactId> 
     <version>${project.version}</version> 
    </extension> 
    </extensions> 
</build> 
  • порядок объявлен в <modules> элемента (если не применяется никакое другое правило)

Когда не применялись ни одно из предыдущих правил, порядок порядок <modules>, который будет выглядеть в POM из проект агрегатора:

<modules> 
    <module>A</module> 
    <module>B</module> 
</modules> 

A будет построен до B, если ни одно из предыдущих правил не применялось.

+0

Большое вам спасибо за этот четкий ответ. Вы должны подумать о том, чтобы сделать их примерами для новой документации ... – pjanssen