2011-06-10 11 views
8

Mam wielomodułową konstrukcję maven, w której jeden z modułów potomnych wymaga wykonania dodatkowego celu w ramach wydania. Wygląda jednak na to, że dowolna konfiguracja wtyczki maven-release w module potomnym jest ignorowana na rzecz domyślnej konfiguracji w module nadrzędnym.Jak zastąpić konfigurację wtyczki maven-release-in w jednym module podrzędnym

To jest fragment z modułu podrzędnego. Konfiguracja wtyczki jest taka sama w sekcji pluginManagement pom nadrzędnej, ale bez elementu niestandardowego.

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-release-plugin</artifactId>  
    <version>2.1</version> 
    <configuration> 
     <tagBase>http://mycompany.com/svn/repos/myproject/tags</tagBase> 
     <goals>deploy myCustomPlugin:myCustomGoal</goals> 
    </configuration> 
</plugin> 

Czy zatem moduł podrzędny może zastąpić konfigurację rodzica i dodać dodatkowe cele?

Wersja Maven 2.2.1

Odpowiedz

2

Tak i nie. Oczywiście pom dziecko może przesłonić konfigurację wtyczki określonej przez rodzica i muszę założyć, że zrobiłeś to poprawnie, ponieważ nie ma w tym nic naprawdę trudnego. Jeśli sprawdzisz wyjście mvn help:effective-pom, powinieneś wyraźnie zobaczyć, że ten moduł ma inne ustawienia wtyczki wydania.

Problem polega na zachowaniu się wtyczki wydania. Zazwyczaj, jeśli wykonasz cel lub fazę - na przykład mvn compile - z modułu głównego projektu, najpierw uruchamia ten cel/fazę w module głównym, a następnie we wszystkich modułach w porządku reaktora, prawie tak, jakbyś "uruchom go w każdym module samodzielnie. Wszelkie modyfikacje dodane do modułów potomnych działają zgodnie z oczekiwaniami. Po uruchomieniu wtyczki wydania uruchamia się tylko w module głównym. Nie działa w żadnym z modułów podrzędnych. Zamiast tego, uruchomienie go w module głównym powoduje wyświetlenie nowej kompilacji przy użyciu tych samych ustawień, co moduł główny, który działa w przypadku wszystkich pozostałych modułów w niemal taki sam sposób, z tym wyjątkiem, że używa konfiguracji modułu głównego dla wszystkich modułów. Nie znam dokładnej semantyki, ale uważam, że jest to analogiczne do ręcznego uruchamiania celów wydania w każdym potomku i określania opcji konfiguracyjnych jako właściwości systemu w wierszu poleceń: niezależnie od tego, jak moduł podrzędny konfiguruje wtyczkę wydania, linia poleceń args wygrywa.

Ja sam nigdy nie uporałem się z tym problemem i trudno powiedzieć, nie wiedząc dokładnie, co próbujesz osiągnąć. Być może, jeśli możesz wyrazić, co chcesz zrobić w tym module specjalnym jako profil, możesz dodać profil do swojego goals i lub preparationGoals. Alternatywnie, istnieje arguments option zarówno w celu przygotowania, jak i wykonywania celów, z którymi możesz wykonać pewne sztuczki.

11

Zastosowanie combine.children="append"combine.self="override"

POM nadrzędna

<configuration> 
    <items> 
    <item>parent-1</item> 
    <item>parent-2</item> 
    </items> 
    <properties> 
    <parentKey>parent</parentKey> 
    </properties> 
</configuration> 

pom Dziecko

<configuration> 
    <items combine.children="append"> 
    <!-- combine.children="merge" is the default --> 
    <item>child-1</item> 
    </items> 
    <properties combine.self="override"> 
    <!-- combine.self="merge" is the default --> 
    <childKey>child</childKey> 
    </properties> 
</configuration> 

Wynik

<configuration> 
    <items combine.children="append"> 
    <item>parent-1</item> 
    <item>parent-2</item> 
    <item>child-1</item> 
    </items> 
    <properties combine.self="override"> 
    <childKey>child</childKey> 
    </properties> 
</configuration> 

Zobacz this blog dla dalszych szczegółów

+0

Tough skuteczne pom zostało działa dobrze do tej pory ... – mschonaker

+0

Nie. To nie działa dla mnie. – mschonaker

+1

Według bloga Maven 3.0.2 jest wymagany (a OP używa Mavena 2).+1 dla linku na blogu, który pomógł mi zrozumieć domyślne zachowanie łączenia –

Powiązane problemy