Czy projekty maven mogą mieć wielu rodziców?
Mamy projekty Java i Flex. Obecnie mamy 1 podstawowy pom, który zawiera konfiguracje, które chcemy wykorzystać dla obu projektów. Problem z tym polega na tym, że projekty Flex dziedziczą konfigurację, na przykład dla wtyczek javadoc
i pmd
, co nie jest pożądane.
Chcę go wyczyścić i mieć prawdziwy pom bazowy, a następnie java-base-pom
i flex-base-pom
. Ale jak to działa w wielu modułach, które mają zarówno część Flex, jak i część Java?
Mamy pluginy do naszych aplikacja, w której używamy następującej struktury:
- my-plugin
- my-plugin-client (flex)
- my-plugin-server (java)
my-plugin
zawiera tylko pom.xml
z <modules/>
sekcją. Użyłbym my-plugin
pom.xml jako rodzic dla obu, ale wtedy nie mogę również użyć java base-pom lub flex base-pom jako rodzica. Jakie byłoby najlepsze rozwiązanie?
6 answers
Projekt może mieć tylko jednego rodzica (w przeciwieństwie do dziedziczenia wielokrotnego W C++), ale ten rodzic może być częścią większej hierarchii rodzicielskiej. Jak zauważyli inni, można więc mieć coś takiego:
base-pom/ |-- flex-base-pom | |-- my-plugin-client | | `-- pom.xml | `-- pom.xml |-- java-base-pom | |-- my-plugin-server | | `-- pom.xml | `-- pom.xml `-- pom.xml
Zauważyłem, że napisałeś, że Twój rzeczywisty problem polega na tym, że:
Projekty Flex dziedziczą konfigurację na przykład dla javadoc i pmd, której nie chcą.
Powinieneś użyć pluginManagement
element, aby tego uniknąć "situation": {]}
pluginManagement jest elementem widocznym wzdłuż bocznych wtyczek. Plugin Management zawiera elementy plugin w taki sam sposób, z tym wyjątkiem, że zamiast konfigurowania informacji o wtyczce dla tego konkretnego projektu build, jest przeznaczony do skonfigurowania projektów buduje, które dziedziczą z tego. Jednak to tylko konfiguruje wtyczki, które są faktycznie odwołuje się w elemencie wtyczki w dzieci. Dzieci mają pełne prawo do obejścia pluginManagement definitions.
Tak więc, w macierzystym pom Skonfiguruj swoje wtyczki w pluginManagement
(javadoc i pmd na przykład) i odwołaj się do nich w elemencie plugins
w żądanych potomkach(tylko w my-plugin-server tutaj). To rozwiąże Twój obecny problem.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-28 14:19:57
Mimo że projekty Mavena mają jednego rodzica, mogą zaimportować dowolną liczbę innych pom ' ów w następujący sposób:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>my-shared-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
To ma dwie istotne różnice w porównaniu do rodzica:
- wtyczki zdefiniowane w importowanym pom nie będą importowane
- zależności zdefiniowane w importowanym pom nie będą dodawane do bieżącego pom, zaimportuje tylko zależności do sekcji Zarządzanie zależnościami
Jednakże, jeśli twój rodzic pom ma <dependencies>
sekcję i Ty jeśli chcesz włączyć je do swoich zależności, możesz dodać rodzica do sekcji <dependencies>
tak jak zwykła zależność:
<dependency>
<groupId>org.example</groupId>
<artifactId>my-shared-dependencies</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
Mimo że ta sama zależność jest już zaimportowana, tag version musi zostać ponownie określony. Aby zmniejszyć powielanie, może być przechowywany w właściwości
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2021-01-20 14:15:28
Jedynym sposobem jest posiadanie base-pom jako rodzica java-base-pom i flex-base-pom.
Mam podobną strukturę dla moich wiosennych projektów:
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)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-28 13:15:32
Przekroczyłem również ten dokładny proble, a najlepszym rozwiązaniem, jakie znalazłem, było użycie dziedziczenia i agregacji, jak sugeruje to pytanie: czy maven obsługuje wielu rodziców (wielokrotne dziedziczenie) ?
Możesz mieć agregator pom, który nie jest rodzicem projektów / align = "left" /
I wyjaśnić w Maven Documentation
Dziedziczenie i agregacja tworzą ładną dynamikę do kontrolowania kompilacji za pomocą pojedynczego, wysoki poziom POM (...) Odwrotnie, projekt POM może agregować projekty, które nie dziedziczą z niego.
Z tego miałem swoje dziedzictwo POMs (Pom-master zawiera konfiguracje gmin, a każdy z nich jest specyficzny):
pom-master |-- pom-java |-- pom-flex
I tak mój projekt może uzyskać szczegóły dla każdej konfiguracji modułów zgodnie z życzeniem:
project (aggregate project-flex & project-java) |-- project-java | `-- pom.xml => parent = pom-java |-- project-flex | `-- pom.xml ==> parent = pom-flex `-- pom.xml => parent = pom-master
Mam nadzieję, że pomoże również innym:)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-17 11:16:16
Po prostu obraz, który pom.xml
są w rzeczywistości klasami Javy: możesz mieć tylko jednego rodzica( lub rozszerza klasę), ale ten rodzic może mieć również innego rodzica, i tak dalej.
Jak wyjaśniłem tutaj , należy odróżnić Zasady rodzica i agregacji w Maven, co oznacza, że my-plugin będzie uważany za projekt agregacji, niekoniecznie projekt rodzica zarówno dla my-plugin-client i my-plugin-parent.
Podsumowując:
my-plugin
zdefiniuje baza pom dla wszystkich twoich projektów. Następnie tworzymy dwa nowe projekty pom: java-base-pom
i flex-base-pom
. Mają oboje my-plugin
Jako rodzice. Teraz my-plugin-client będzie miał java-base-pom
jako rodzica, podczas gdy my-plugin-server będzie używać flex-base-pom
dla swojego rodzica.
W ten sposób my-plugin-client odziedziczy wszystkie właściwości zdefiniowane w my-plugin
pom.xml, a także z projektu java-base-pom
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:16
Możesz uzyskać wiele dziedziczeń za pomocą profili:
Tworzysz (wiele) Profili w głównym pom, a automatyczna aktywacja dowolnej odmiany tych profili powoduje wielokrotne dziedziczenie konfiguracji Mavena.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-21 00:26:21