2015-11-25 2 views
2

I found this description но он не кажется исчерпывающим. Может кто-нибудь объяснить подробно, в чем разница между executions и configurations в плагине maven?В чем разница между исполнениями и конфигурациями в плагине maven?

+0

Вы имеете в виду, кроме 'исполнения' * has-a *' configuration'? –

+0

@KevinKrumwiede Эти элементы также живут на одной высоте. Вы можете иметь конфигурацию без выполнения. –

ответ

3

<execution> заставляет плагин выполняться во время жизненного цикла сборки maven, то есть во время сборки. <configuration> позволяет настроить плагин для того, как он должен себя вести во время выполнения. Многие плагины Maven предоставляют документацию об их параметрах конфигурации, например. maven-compiler-plugin.

Вы можете определить <configuration> s на уровне <plugin> или уровне <execution>. Первый является глобально действительным для всех исполнений, последний специфичен для выполнения.

Пример для глобальных конфигураций выполнения конкретных:

Предположим, вы должны скомпилировать проект с Java 1.7, но вы хотите рано принимать Java 9 Jigsaw функции и добавить module-info.java к вашему проекту. Этот Java-файл не будет компилироваться с использованием исходного уровня 1.7. Что вы можете сделать, это определить два выполнений Maven-компилятора-плагин, один, который собирает все, кроме module-info.java с уровнем источника 1.7 и один, который делает только компилировать module-info.java с уровнем источника 1.9:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>3.3</version> 

    <!-- Global plugin configuration for source and target levels. --> 
    <configuration> 
    <source>1.7</source> 
    <target>1.7</target> 
    </configuration> 

    <executions> 
    <!-- Compile all code except module-info.java with the configured source level --> 
    <execution> 
     <id>default-compile</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>compile</goal> 
     </goals> 
     <configuration> 
     <excludes> 
      <exclude>module-info.java</exclude> 
     </excludes> 
     </configuration> 
    </execution> 

    <!-- Compile module-info.java with source level 1.9 --> 
    <execution> 
     <id>compile-module-info-java</id> 
     <phase>compile</phase> 
     <goals> 
     <goal>compile</goal> 
     </goals> 
     <configuration> 
     <source>1.9</source> 
     <target>1.9</target> 
     <includes> 
      <include>module-info.java</include> 
     </includes> 
     </configuration> 
    </execution> 
    </executions> 
</plugin> 
+0

Великие умы думают одинаково. :-) Удивительно, когда это происходит: два человека самостоятельно и одновременно пишут более-менее одно и то же. – Daniel

1

<configuration> раздел снаружи Блок <execution> влияет на поведение плагина в общем виде. Например, плагины, которые либо выполняются непосредственно через CLI, либо имеют фазу по умолчанию, к которой они привязаны, будут использовать этот тип конфигурации. Примером такого плагина может быть плагин compiler.

С другой стороны, секция <configuration>внутри<execution> блок применяется только к этому конкретному исполнению.

Как обычно, более конкретная конфигурация может переопределять общую конфигурацию. Поэтому, если общая конфигурация (вне блока исполнения) говорит <doCheck>false</doCheck>, выполнение может выбрать только переопределить это, выполнив <doCheck>true</doCheck>.

Другая особенность общих конфигураций заключается в том, что их параметры будут наследоваться всеми исполнениями этого плагина.

+0

Я думаю, что, объединив все три ответа (на момент написания), он должен дать довольно последовательную и ясную картину того, как это работает. – Daniel

1

Я думаю, что ответ от @Stefan уже достаточно ясен. Я бы хотел быть немного более подробным, если это поможет.

«Исполнение» под плагином объявляет «что делать когда». В основном, execution обычно содержит по меньшей мере: phase и goal (я знаю, что вы не всегда видите его в конфиге, но концептуально они есть), который вы можете увидеть как: Когда процесс сборки достиг phase, тогда действие goal плагина будет выполнен.

Конечно, у вас может быть несколько execution s для плагина, так что разные/одинаковые цели могут выполняться на разных/одинаковых этапах.

Затем перейдите к configuration.Иногда вам нужно рассказать дополнительный плагин о том, как плагин должен действовать, потому что плагин, возможно, не сможет угадать, что вы хотите сделать по умолчанию. configuration делает такой работа. Вы можете обратиться к документу цели плагина, чтобы узнать, какую конфигурацию они принимают.

уровень Plugin configuration будет применяться ко всем execution с этого плагина, в то время как вы можете также определить configuration под каждым execution, которые служат в качестве execution Определённые конфигурации. Уровень плагина configuration + уровень выполнения configuration - это «реальная» конфигурация, полученная execution.

Смежные вопросы