Maven: выполнение из командной строки и несколько исполнений в конфигурации

Я хотел бы выполнить цель плагина из командной строки, но выполнить несколько исполнений плагина. С этой целью мой пом выглядит так:

<plugin>
    <groupId>xxx.yyy</groupId>
    <artifactId>zzz</artifactId>
    <version>1.1.6</version>
    <executions>
        <execution>
            <id>default-cli-1</id>
            <goals>
                <goal>mygoal</goal>
            </goals>
            <configuration>
                .... config1 ....
            </configuration>
        </execution>
        <execution>
            <id>default-cli-2</id>
            <goals>
                <goal>mygoal</goal>
            </goals>
            <configuration>
                .... config2 ....
            </configuration>
        </execution>
    </executions>
</plugin>

то, что я хотел бы сделать, это что-то вроде:

mvn xxx.yyy.zzz:mygoal

и это приведет к выполнению двух казней. Но я не могу понять, как.

Я знаю, что не могу использовать <id> при выполнении из командной строки. Вот что такое default-cli - это для. Однако <id> должно быть уникальным внутри <executions> что означает, что я могу только поставить default-cli один execution.

версия Maven 3.0.5.

1 ответов


вы можете выполнить цель (и ее выполнение) из командной строки, начиная с Maven 3.3.1 on and этой новая функция, с помощью @executionId дополнительные опции.

Что касается Maven и генерации идентификаторов выполнения, вы также можете проверить это так вопрос.


Перед Maven 3.3.1 вместо этого вы можете привязать два исполнения к фазе, которая обычно не наносит вреда (например,validate) и что-то например:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <id>execution-1</id>
            <phase>validate</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>something1</classifier>
            </configuration>
        </execution>
        <execution>
            <id>execution-2</id>
            <phase>validate</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>something2</classifier>
            </configuration>
        </execution>
    </executions>
</plugin>

затем исполнитель:

mvn validate

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

если вы не хотите, чтобы они были частью этой фазы по умолчанию (понятно), то вы можете переместить их в профиль и активировать его как часть выполнения:

mvn validate -PpluginGoalExecution

для полноты, профиль будет выглядеть так:

<profile>
    <id>pluginExecution</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.5</version>
                <executions>
                    <execution>
                        <id>execution1</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>something1</classifier>
                        </configuration>
                    </execution>
                    <execution>
                        <id>execution2</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>something2</classifier>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</profile>

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

обновление
Просто косметический, но вы также можете добавить в профилированную сборку над элементом:

<defaultGoal>validate</defaultGoal>

так что вам нужно будет только запустить следующую команду Maven (только активация профиля):

mvn -PpluginGoalExecution

и после этого автоматически выполните фазу проверки и настроенные выполнения плагинов. Не большое изменение (как я уже сказал, косметическое), но, возможно, ближе к выполнению цели плагина, а не к вызову фазы Maven (опять же, просто внешний вид).