Повторите „И (возможно) еще один файл Pom.xml (или профиль?)“ в одном из ваших комментариев к вопросу:
Один из принципов Maven: один проект (объявленный в POM), один результирующий (главный) артефакт (JAR, WAR, ...). («Main», поскольку могут быть сопутствующие артефакты, такие как ...-sources.jar
, ...-javadoc.jar
, ...-jar-with-dependencies.jar
, ....zip
, ...)
Maven POM носят декларативный характер. Это означает, что нет (обязательных) if
s для пропуска объявлений время от времени, и вы также не можете добавлять / удалять элементы объявления (XML) во время сборки (вы просто можете добавлять / изменять текстовое содержимое элемента через properties). (Существуют плагины с параметром <skip>false|true
, который можно установить / переопределить с помощью свойства, но это не общее правило, и поэтому их не так много.)
Профили - это способ преодолеть этот принцип «нет, если» . С их помощью вы можете активировать (вводить) объявления, которые установить или переопределить существующие объявления во время сборки с помощью различных методов активации профиля.
Что касается вашего комментария после удаления тега osgi, я собираюсь обновить этот ответ позже. А пока вы можете взглянуть на мой ответ на Maven: жизненный цикл против фазы против плагина против цели.
ОБНОВИТЬ
+- jojal-main
+- pom.xml ... contains declarations common for all of your projects
+- base-main
+- pom.xml ... contains declarations common for all base projects
+- A
+- src/main/java/your/package/Plugin.java
+- pom.xml
+- B
+- src/main/java/your/package/ClassA.java ... implements Plugin
+- pom.xml
+- C
+- src/main/java/your/package/ClassB.java ... implements Plugin
+- pom.xml
+- product-main
+- pom.xml ... contains declarations common for all product projects
+- product1
+- src/main/java/your/package/Product1.java ... references A & B
+ pom.xml
+- product2
+- src/main/java/your/package/Product2.java ... references A & C
+- pom.xml
+- product3
+- src/main/java/your/package/Product3.java ... references A & B & C
+- pom.xml
jojal main POM
<project ...>
...
<groupId>name.jojal</groupId>
<artifactId>jojal-main</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging> <!-- different to the default 'jar'[1] -->
<modules> <!-- to build projects in sub-dirs at once[2] -->
<module>base-main</module>
<module>product-main</module>
</modules>
... declarations common for all of your projects like dependencies for unit testing, logging etc. ..
<project>
[1] Справочник по POM, упаковка
[2] Справочник по POM, агрегирование
Базовый основной ПОМ
<project ...>
...
<parent> <!-- declarations are inherited from this parent POM[3] -->
<groupId>name.jojal</groupId>
<artifactId>jojal-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>jojal-base-main</artifactId> <!-- <groupId>, <version> can be omitted if the same as in parent -->
<packaging>pom</packaging>
<modules>
<module>A</module>
<module>B</module>
<module>C</module>
</modules>
... declarations common for all base projects ...
<project>
[3] Справочник по POM, наследование
ПОМ
<project ...>
...
<parent>
<groupId>name.jojal.base</groupId>
<artifactId>jojal-base-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project-a</artifactId>
<project>
B POM
<project ...>
...
<parent>
<groupId>name.jojal.base</groupId>
<artifactId>jojal-base-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project-b</artifactId>
<dependencies>
<dependency>
<groupId>name.jojal.base</groupId>
<artifactId>project-a</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<project>
C POM
<project ...>
...
<parent>
<groupId>name.jojal.base</groupId>
<artifactId>jojal-base-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>project-c</artifactId>
<dependencies>
<dependency>
<groupId>name.jojal.base</groupId>
<artifactId>project-a</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<project>
Основной ПОМ продукта
<project ...>
...
<parent>
<groupId>name.jojal</groupId>
<artifactId>jojal-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>jojal-product-main</artifactId>
<packaging>pom</packaging>
<modules>
<module>product1</module>
<module>product2</module>
<module>product3</module>
</modules>
... declarations common for all product projects ...
<project>
Продукт 1 ПОМ
<project ...>
...
<parent>
<groupId>name.jojal.product</groupId>
<artifactId>jojal-product-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>product-1</artifactId>
<dependencies>
<dependency>
<groupId>name.jojal.base</groupId>
<artifactId>project-b</artifactId> <!-- project-a is resolved automatically by Maven
as a transitive dependency[4] -->
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<project>
[4] Справочник по POM, зависимости
Продукт 2 ПОМ
<project ...>
...
<parent>
<groupId>name.jojal.product</groupId>
<artifactId>jojal-product-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>product-2</artifactId>
<dependencies>
<dependency>
<groupId>name.jojal.base</groupId>
<artifactId>project-c</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<project>
Продукт 3 ПОМ
<project ...>
...
<parent>
<groupId>name.jojal.product</groupId>
<artifactId>jojal-product-main</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>product-3</artifactId>
<dependencies>
<dependency>
<groupId>name.jojal.base</groupId>
<artifactId>project-b</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>name.jojal.base</groupId>
<artifactId>project-c</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<project>
[Обратите внимание: на практике не тестировалось, возможны опечатки]
person
Gerold Broser
schedule
11.08.2020