Можно ли выполнить два разных maven exec-maven-plugin в одном POM - PullRequest
55 голосов
/ 24 ноября 2011

Я выполняю следующий код, используя mvn exec:java com.mycompany.FooServer.

Я хотел бы добавить еще один сервер, который я могу выполнить, как mvn exec:java com.mycompany.BarServer.

Как мне сделать это в течение одного pomфайл?

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>com.mycompany.FooServer</mainClass>
            </configuration>
        </plugin>
 </build>  

Ответы [ 6 ]

82 голосов
/ 24 ноября 2011

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

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <executions>
                <execution>
                    <id>first-execution</id>
                    <goals>
                        <goal>java</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.mycompany.FooServer</mainClass>
                    </configuration>
                </execution>
                <execution>
                    <id>second-execution</id>
                    <goals>
                        <goal>java</goal>
                    </goals>
                    <configuration>
                        <mainClass>com.mycompany.BarServer</mainClass>
                    </configuration>
                </execution>
            </executions>
        </plugin>
     </plugins>
 </build>

В Maven 3.3.1 и более поздних версиях вы можете запустить выполнение по его идентификатору, используя

mvn exec:java@id

В этом случае команды будут mvn exec:java@first-execution и mvn exec:java@second-execution. См. этот ответ для получения более подробной информации.

10 голосов
/ 25 марта 2014

@ tieTYT: Вы можете выбрать выполнение по id, используя два разных профиля:

mvn test -Pmanager

mvn test -Pproxy

<profiles> 
<profile>
    <id>proxy</id>
    <build>
    <plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <phase>test</phase>
                <goals>
                    <goal>java</goal>
                </goals>
                <configuration>
                    <mainClass>pt.inesc.proxy.Proxy</mainClass>
                </configuration>
            </execution>
        </executions>
    </plugin>
    </plugins>
    </build>
</profile> 
<profile>
    <id>manager</id>
    <build>
    <plugins>
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <phase>test</phase>
                <goals>
                    <goal>java</goal>
                </goals>
                <configuration>
                    <mainClass>pt.inesc.manager.Manager</mainClass>
                </configuration>
            </execution>
        </executions>
    </plugin>
    </plugins>
    </build>
</profile> 
</profiles>
8 голосов
/ 28 октября 2015

При maven> 3.3.1 можно указать идентификатор выполнения как:

mvn exec:java@execId
2 голосов
/ 23 октября 2014

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

<profiles>
    <profile>
        <id>foo</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <configuration>
                        <mainClass>com.mycompany.FooServer</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>bar</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <configuration>
                        <mainClass>com.mycompany.BarServer</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>

, который затем позволяет запустить тот или иной сервер, используя:

mvn exec:java -Pfoo

или

mvn exec:java -Pbar

Приветствия,

1 голос
/ 06 декабря 2016

Я нахожу решение: I put <configuration> in <execution>

Вы можете использовать mvn clean test -Pfoo, bar

<profiles>
    <profile>
        <id>foo</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <executions>
                        <execution>
                            <id>CountContinusIntegr-execution</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>java</goal>
                            </goals>
                            <configuration>
                                <mainClass>com.mycompany.FooServer</mainClass>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
    <profile>
        <id>bar</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.3.2</version>
                    <executions>
                        <execution>
                            <id>CountContinusIntegr-execution</id>
                            <phase>compile</phase>
                            <goals>
                                <goal>java</goal>
                            </goals>
                            <configuration>
                                <mainClass>com.mycompany.BarServer</mainClass>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
</profiles>
0 голосов
/ 11 сентября 2014

Боюсь, что то, что вы хотите, невозможно .Я не смог найти способ вызвать одну и ту же цель exec-maven-plugin напрямую (mvn exec:java) с разными конфигурациями в файле .pom.

Сказал, что, вы можете, однако, иметь несколько исполнений exec-maven-плагин .Дело в том, что вы не можете назвать цели напрямую.Вы должны использовать несколько исполнений и привязывать их к определенным этапам сборки.

Вы также можете использовать следующее решение , которое мне подходит .Вы по-прежнему можете вызывать одну цель напрямую с помощью ее конфигурации в .pom:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.3.2</version>
    <executions>
        <execution>
            <id>Acceptance Tests</id>
            <phase>integration-test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>pybot</executable>
                <arguments>
                    <!--...-->
                </arguments>
            </configuration>
        </execution>
    </executions>
    <configuration>
        <mainClass>pt.jandias.someapp.persistence.SchemaGenerator</mainClass>
        <arguments>
            <!--...-->
        </arguments>
    </configuration>
</plugin>

Можно было бы использовать mvn exec:java и mvn integration-test по желанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...