Jeśli chcesz mieć profil, który powinien być zastosowany do podmodułów (i tylko niektórych z nich), zdefiniowany w sposób scentralizowany w ich projekcie nadrzędnym (pom), a jednocześnie nie stosować profilu do samego rodzica, tutaj jest proponowane podejście:
Zdefiniuj profil w pom nadrzędnego, próbka jeden:
<profiles>
<profile>
<id>sample-profile</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>print-hello</id>
<phase>${phase.prop}</phase>
<goals>
<goal>run</goal>
</goals>
<configuration>
<target>
<echo message="hello there!" />
</target>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
Uwaga, co robimy:
- plugin
phase
elementem jest para metrized, więc wiązanie wtyczki do fazy budowy również zostanie sparametryzowane.
- Możemy teraz zdecydować za pośrednictwem właściwości, do której fazy załączamy wykonanie wtyczki.
- Możemy teraz zdecydować za pośrednictwem właściwości, aby załączyć wykonanie tej wtyczki bez fazy (lub faza pusty)
Tak, w tym samym pom nadrzędnego, niech określić właściwość:
<properties>
<phase.prop>none</phase.prop>
</properties>
jako taka kompilacja działa na pom nadrzędnej będą przywiązywać wykonanie wtyczek do żadnego etapu (none
nie jest keyworem d lub znanej wartości, po prostu standard de facto użyty dla nieistniejącej fazy, możesz zostawić ją pustą lub umieścić dowolną wartość, która by miała taki sam efekt), a zatem pomiń go. Domyślnie zostanie również pominięty we wszystkich zadeklarowanych modułach. Profil będzie nadal aktywny w każdym module, ale będzie nieszkodliwy, ponieważ domyślnie nie będzie wykonywał żadnej wtyczki.
Następnie w modułach gdzie chcesz egzekucje plugin być aktywny można ponownie zdefiniować tylko danej nieruchomości i wymagany etap:
<properties>
<phase.prop>package</phase.prop>
</properties>
Kiedy następnie aktywowanie profilu z głównego kompilacji (rodzica)
mvn clean install -Psample-profile
rodzic będzie stosować go do wszystkich modułów, ale skuteczne wykonanie profilu nastąpi tylko wówczas, gdy wartość phase.prop
ma wartość maven-sensowne.
Jeśli potrzebujesz różnych faz dla różnych implementacji wtyczek, możesz zdefiniować więcej niż jedną właściwość i zastosować ten sam wzorzec.
Jeśli nie masz wykonania wtyczki, ale raczej globalnej konfiguracji wtyczki dla wtyczki już wykonanej przez Mavena (w ramach jego pakowania i domyślnej kompilacji), możesz wtedy ponownie zdefiniować jego wykonanie, zastępując wartość default execution id.
Zauważ, że mogliśmy zrobić to samo przy użyciu elementu skip
konfiguracji, ale:
- nie wszystkie wtyczki zapewniają wejście
skip
konfiguracji
- pomocą elementu
phase
nie jest powiązany z żadnym konfiguracji i może być ponownie użyte w przypadku egzekucji dołączonych do tej samej fazy
Prawdopodobny duplikat [Aktywacja profilu podrzędnego z profilu rodzica] (http://stackoverflow.com/questions/35304770/activating-a-child- profil z profilu nadrzędnego) –
Zgadzam się z @A.DiMatteo. Połączone pytanie odpowiada na to pytanie. – Tunaki
Proszę zobaczyć moją edycję. – JDC