Maven:如何以特定顺序在同一阶段命令多次执行目标

时间:2018-06-04 12:52:55

标签: maven maven-3

我想要我的"预集成测试"阶段是按照这个特定的顺序执行目标。

阶段:预集成测试

  • 获得一个spring boot jar(maven-dependency-plugin:copy)
  • get-a-port(build-helper-maven-plugin:reserve-network-port)
  • display-port(maven-antrun-plugin:run#1)
  • start-server(exec-maven-plugin)
  • 等待启动(maven-antrun-plugin:run#2)

使用Maven 3有没有办法做到这一点?

我面临的问题是" maven-antrun-plugin:run" 1& 2 将始终一个接一个地运行,因为它们是在同一个插件元素中定义的:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>display-port</id>
                        <phase>pre-integration-test</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <target>
                                <echo>Displaying value of 'tomcat.http.port' property</echo>
                                <echo>[tomcat.http.port] ${tomcat.http.port}</echo>
                            </target>
                        </configuration>
                    </execution>
                    <execution>
                        <id>wait-for-startup</id>
                        <phase>pre-integration-test</phase>
                        <configuration>
                            <target>
                                <sleep seconds="10" />
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

现在,我发现这样做的唯一方法是复制&#34; maven-antrun-plugin:&#34; pom文件中的插件元素。 但这给我一个警告

'build.plugins.plugin.(groupId:artifactId)' must be unique but found duplicate declaration

对于这个问题的范围,我不是在寻找一种解决方法,例如更改&#34; display-port&#34;的插件。或者&#34;等待启动&#34;或者改变目标的阶段。

我只想了解我想做的事情是否可行。

1 个答案:

答案 0 :(得分:0)

如果多个执行具有相同的阶段,那么第一个执行将是id为default-something的内置的(例如maven-compiler-plugin),然后其他执行将依次执行它们出现在您的 pom 文件中。