Можно ли выполнить два разных Maven exec-Maven-плагина в одном POM


Я выполняю следующий код с помощью 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 52

6 ответов:

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

<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. Смотрите ответ для более подробной информации.

@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>

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

mvn exec:java@execId

для меня в том числе конфигурации в блоке выполнения не работает и 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

спасибо,

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

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

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

<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 по желанию.

Я нашел решение:I put <configuration> in <execution>

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

<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>