java 如何在一个构建中多次运行maven exec插件

tv6aics1  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(187)

以下是我的POM的相关部分-

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.5.0</version>
    <executions>
        <execution>
            <id>StartHub</id>
            <phase>test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-jar</argument>
                    <argument>${basedir}/src/lib/Hub/selenium-server-standalone-2.53.0.jar</argument>
                    <argument>-role</argument>
                    <argument>hub</argument>
                    <argument>-throwOnCapabilityNotPresent</argument>
                    <argument>false</argument>
                    <argument>-newSessionWaitTimeout</argument>
                    <argument>20000</argument>
                </arguments>
            </configuration>
        </execution>
        <execution>
            <id>StartNode</id>
            <phase>test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-jar</argument>
                    <argument>${basedir}/src/lib/Node/selenium-server-standalone-2.53.0.jar</argument>
                    <argument>-hub</argument>
                    <argument>http://127.0.0.1:4444/register/grid</argument>
                    <argument>-port</argument>
                    <argument>5555</argument>
                    <argument>
                        Dwebdriver.chrome.driver=${basedir}/chromedriver.exe</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

我尝试使用exec插件在两种配置(hub和Node)下执行jar(selenium独立服务器)。
我的问题是jar在第一对“execution”标记之间指定的配置中只执行一次。我广泛地搜索了一个解决方案,唯一我发现的是不同执行的id需要不同。我改正了我还是不能虽然如果我注解掉另一个的执行,我可以成功地运行其中的任何一个,但我似乎无法运行两次jar。
我还应该提到,我是在Eclipse中运行这个项目的,因此理想情况下,我想要做的是右键单击POM.xml,单击Run-as并选择“Maven test”。

ffx8fchx

ffx8fchx1#

这不是Maven执行问题,而是与您正在执行的内容相关的问题:一个阻塞进程(第一个服务器),它将停止构建,侦听一个永远不会连接的节点(因为它的执行不会开始)。
将您的pom更改为以下内容:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>1.5.0</version>
    <executions>
        <execution>
            <id>StartHub</id>
            <phase>test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-version</argument>
                </arguments>
            </configuration>
        </execution>
        <execution>
            <id>StartNode</id>
            <phase>test</phase>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <executable>java</executable>
                <arguments>
                    <argument>-version</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>

它将完美地执行两次exec执行,打印两倍的Java版本。该代码片段是从您的问题复制粘贴而来的,只是将java命令的参数替换为其version选项。
您最可能希望的是在后台执行这两个命令,或者至少以非阻塞的方式执行第二个命令,然后继续构建(我猜是为了执行一些测试)。
检查this SO question如何实现:不使用exec-maven-plugin,而是使用maven-antrun-plugin启动两个selenium命令。
进一步说明一下,您可能应该考虑使用maven-failsafe-plugin并执行集成测试,将上面的执行附加到pre-integration-test阶段,并在post-integration-test阶段停止它们,以便正确地清理它们。

相关问题