Знаток - пропускает родительскую сборку проекта

Я использую плагин менеджера SQLite для Firefox.

Это кажется довольно стабильным мне.

19
задан Sled 12 March 2014 в 14:25
поделиться

4 ответа

Что не так при построении родительского объекта?

Фактически, в Maven есть две разные концепции (которые обычно используются одновременно):

  • Родительский POM
  • Агрегация модулей

Первый - это определение всего, что является общим для всех потомков. Вы определяете родительский объект как проект, упакованный в pom, и можете установить его в своем репозитории.

Когда вы создаете дочерний объект этого родителя, Maven2 извлечет этого родителя, чтобы объединить родительский pom с дочерним pom. Вы можете просмотреть весь pom.xml, выполнив команду mvn help: effective-pom .

В этом случае родительский pom не будет построен, он будет просто получен из репозиторий.

Второй случай - это проект, который содержит список подпроектов модулей . Принцип заключается в том, что каждая команда, которую вы запускаете в этом проекте, также будет выполняться во всех подмодулях. Порядок модулей будет определен Reactor, который изучит межмодульные зависимости, чтобы найти, какой модуль должен быть построен раньше других. Если нет зависимостей, то он будет принимать список модулей, как они определены в родительском pom.xml.

В этом случае, если вы запустите команду в корневом проекте, Maven2 сначала построит корневой проект , а затем подмодули. Вы не можете пропустить создание корневого проекта.


Изменить, благодаря комментарию RichSeller

Полное объяснение различий между многомодулями (проект агрегации) и наследованием (родительский проект) можно найдено в книге Maven, здесь .

который будет смотреть на межмодульные зависимости, чтобы найти, какой модуль должен быть построен раньше других. Если нет зависимостей, то он будет принимать список модулей, как они определены в родительском pom.xml.

В этом случае, если вы запустите команду в корневом проекте, Maven2 сначала построит корневой проект , а затем подмодули. Вы не можете пропустить создание корневого проекта.


Изменить, благодаря комментарию RichSeller

Полное объяснение различий между несколькими модулями (проект агрегации) и наследованием (родительский проект) может быть найдено в книге Maven, здесь .

который будет смотреть на межмодульные зависимости, чтобы найти, какой модуль должен быть построен раньше других. Если нет зависимостей, то он будет принимать список модулей, как они определены в родительском pom.xml.

В этом случае, если вы запустите команду в корневом проекте, Maven2 сначала построит корневой проект , а затем подмодули. Вы не можете пропустить создание корневого проекта.


Изменить, благодаря комментарию RichSeller

Полное объяснение различий между несколькими модулями (проект агрегации) и наследованием (родительский проект) может быть найдено в книге Maven, здесь .

В этом случае, если вы запустите команду в корневом проекте, Maven2 сначала построит корневой проект, а затем подмодули. Вы не можете пропустить создание корневого проекта.


Изменить, благодаря комментарию RichSeller

Полное объяснение различий между многомодулями (проект агрегации) и наследованием (родительский проект) можно найдено в книге Maven, здесь .

В этом случае, если вы запустите команду в корневом проекте, Maven2 сначала построит корневой проект, а затем подмодули. Вы не можете пропустить создание корневого проекта.


Изменить, благодаря комментарию RichSeller

Полное объяснение различий между многомодулями (проект агрегации) и наследованием (родительский проект) можно найдено в книге Maven, здесь .

10
ответ дан 30 November 2019 в 04:03
поделиться

Вы не можете пропустить родительскую сборку, но вы можете настроить профиль так, чтобы он не активировался с помощью небольшого взлома. Этот ответ показывает, как управлять активацией профиля по наличию или отсутствию файлового элемента . Таким образом, вы можете определить профиль в родительском профиле, но деактивировать его в этом проекте из-за наличия файла маркера в родительском. В дочерних проектах не будет файла маркера в исходном коде, поэтому профиль будет активирован для этих проектов.

Обновите, чтобы уточнить: в моем тестовом проекте эта конфигурация означает, что профиль деактивирован в родительском проекте (в котором файл находится в src / main / resources), но активируется во всех дочерних проектах, у которых нет файла в своих каталогах ресурсов.

<profile>
  <id>test</id>
  <activation>
    <file>
      <missing>src/main/resources/test.marker</missing>
    </file>
  </activation>
  ...
</profile>
14
ответ дан 30 November 2019 в 04:03
поделиться

I want to document that there's partial compromise to my situation (thanks to guys on maven users mailing list for suggestion). Basically you need to chop profile in two pieces. Reusable configuration section of plugin goes to the parent POM, and executions stays in the child POM. Then the profile plugin in the child is marked as inherited and voila - at run time parent profile is not executed since it's missing executions section. This is far from ideal but it does work. Refer to this link for example

4
ответ дан 30 November 2019 в 04:03
поделиться

Мне не удалось реализовать решение для "отсутствующих" файлов, как было предложено Риком Продавцом выше. Кажется, что после установки активного / неактивного состояния профиля не будет изменено, даже если файл маркера отсутствует в модуле (ах). Однако вот точное решение моей проблемы. Предупреждение: это доступно только начиная с Maven 2.1+

. Если у меня есть родительский POM с двумя определенными модулями: foo и boo, то в обычных обстоятельствах порядок выполнения будет:

  1. parent
  2. foo
  3. boo

Все, что мне нужно сделать, чтобы пропустить родительскую сборку, - это добавить этот переключатель командной строки

mvn install –rf foo

В качестве альтернативы вы можете использовать - resume-from Что он будет делать, так это чтобы пропустить родительский элемент и продолжить с модуля foo вниз. Теперь - я изучаю, можно ли этого достичь, настроив плагин Reactor (PS

2
ответ дан 30 November 2019 в 04:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: