Проекты знатока могут иметь несколько родителей?

У нас есть проекты Flex и Java. У нас в настоящее время есть 1 основной англичанин, который содержит конфигурации, которые мы хотим использовать для обоих проектов. Проблема с этим: проекты Flex наследовали конфигурацию, например, для javadoc и pmd плагины, который не желателен.

Я хочу очистить его и иметь настоящего основного англичанина, и затем a java-base-pom и a flex-base-pom. Но как это работает в мультимодуле, который имеет и часть Flex и часть Java?

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

  • мой - плагин
    • my-plugin-client (гибкий провод)
    • my-plugin-server (Java)

my-plugin просто содержит a pom.xml с <modules/> раздел. Я использовал бы my-plugin pom.xml как родитель для обоих, но затем я не могу также использовать основного англичанина Java или основного англичанина гибкого провода как родитель. Каков был бы лучший подход для этого?

57
задан Ondra Žižka 13 August 2019 в 14:26
поделиться

3 ответа

У проекта может быть только один родительский элемент (в отличие от множественного наследования в C ++), но этот родительский может быть частью более крупной родительской иерархии. Как указывали другие, у вас может быть что-то вроде этого:

base-pom/
|-- flex-base-pom
|   |-- my-plugin-client
|   |   `-- pom.xml
|   `-- pom.xml
|-- java-base-pom
|   |-- my-plugin-server
|   |   `-- pom.xml
|   `-- pom.xml
 `-- pom.xml

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

проекты flex наследуют конфигурацию, например, для javadoc и pmd, которая им не нужна .

Вы должны использовать элемент pluginManagement , чтобы избежать этой ситуации:

pluginManagement - это элемент, который отображается рядом с дополнительными модулями. Управление плагинами содержит элементы плагинов примерно таким же образом, за исключением того, что вместо настройки информации плагина для этой конкретной сборки проекта, он предназначен для настройки сборок проекта, унаследованных от этого. Однако это настраивает только плагины, на которые фактически ссылается элемент plugins в дочерних элементах. У дочерних элементов есть полное право переопределить определения pluginManagement.

Итак, в родительском pom настройте свои плагины в pluginManagement (например, javadoc и pmd) и ссылайтесь на них в плагинах ] в желаемых дочерних элементах (здесь только в my-plugin-server). Это решит вашу текущую проблему.

и ссылаться на них в элементе plugins в желаемых дочерних элементах (здесь только в my-plugin-server). Это решит вашу текущую проблему.

и ссылаться на них в элементе plugins в желаемых дочерних элементах (здесь только в my-plugin-server). Это решит вашу текущую проблему.

33
ответ дан 24 November 2019 в 19:44
поделиться

Единственный способ - сделать base-pom родительским для java-base-pom и flex-base-pom.

У меня аналогичная структура для моих весенних проектов:

base-pom (basic configuration - eclipse, reports, repositories, etc)
|
+ spring-base-pom (spring definitions)
  |
  + spring-jar-base-pom (jar specific definitions)
  |
  + spring-war-base-pom (spring web and servlet dependencies)
    |
    + spring-webapp-base_pom (spring web mvc dependencies)
6
ответ дан 24 November 2019 в 19:44
поделиться

Просто представьте, что pom.xml на самом деле являются классами Java. : у вас может быть только один родитель (или расширяет класс), но этот родитель может также иметь другого родителя и т. д.

Как я объяснил здесь , вы должны различать принципы родительского и агрегационного Maven, что означает, что my-plugin будет рассматриваться как проект агрегации, а не обязательно родительский проект для my-plugin-client и my-plugin-parent.

Итак, подведем итог:

my-plugin определит базовый помп для всех ваших проектов. Затем вы создаете два новых проекта pom : java-base-pom и flex-base-pom . Оба они имеют родительский my-plugin . Сейчас,

2
ответ дан 24 November 2019 в 19:44
поделиться
Другие вопросы по тегам:

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