从 Maven 配置文件执行 cargo:run

Executing cargo:run from a maven profile

我正在尝试编写一个 Maven profile 它将 运行 cargo:run goal 并将启动一个容器并等待用户按 CTRL + C 停止。但是,当我 运行 mvn clean install -PstartApplication 时,命令无需等待即可成功完成。我错过了什么?

<profile>
   <id>startApplication</id>
   <build>
      <plugins>
         <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <configuration>
               <wait>true</wait>
               <container>
                  <containerId>tomcat7x</containerId>
                  <type>installed</type>
                  <home>${catalina.home}</home>
               </container>
               <configuration>
                  <type>standalone</type>
                  <home>${project.basedir}/target/tomcat7x</home>
               </configuration>
               <deployables>
                  <deployable>
                     <properties>
                        <context>ROOT</context>
                     </properties>
                     <groupId>com.demo.web</groupId>
                     <artifactId>sample-web-app</artifactId>
                     <type>war</type>
                  </deployable>
               </deployables>
               <executions>
                  <execution>
                     <id>start-container</id>
                     <phase>pre-integration-test</phase>
                     <goals>
                        <goal>run</goal>
                     </goals>
                  </execution>
               </executions>
            </configuration>
         </plugin>
      </plugins>
   </build>
</profile>

检查插件配置:您发布的代码中的 executions 元素在 configuration 元素内,这是不正确的,因此它会被 Maven 忽略。 (查看 official documentation 了解更多详情)。
executions 部分应该在 configuration 部分之外(并且在同一嵌套级别)。然后它们还可以包括一个进一步的 configuration 部分,这将是特定包装 execution 使用的配置,而前一个将是默认应用于所有列出的执行的更通用的配置。

在这种特定情况下,Cargo 插件还在 Maven configuration 部分中 provides 另一个 configuration 元素,这让事情有点混乱和误导(不同的名称应该已被选中,在我看来)。

因此,在您的情况下,您应该从 configuration 部分移出 executions 部分,如下所示:

<profile>
   <id>startApplication</id>
   <build>
      <plugins>
         <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <configuration>
               <wait>true</wait>
               <container>
                  <containerId>tomcat7x</containerId>
                  <type>installed</type>
                  <home>${catalina.home}</home>
               </container>
               <configuration>
                  <type>standalone</type>
                  <home>${project.basedir}/target/tomcat7x</home>
               </configuration>
               <deployables>
                  <deployable>
                     <properties>
                        <context>ROOT</context>
                     </properties>
                     <groupId>com.demo.web</groupId>
                     <artifactId>sample-web-app</artifactId>
                     <type>war</type>
                  </deployable>
               </deployables>
            </configuration>
            <executions>
              <execution>
                 <id>start-container</id>
                 <phase>pre-integration-test</phase>
                 <goals>
                    <goal>run</goal>
                 </goals>
              </execution>
            </executions>
         </plugin>
      </plugins>
   </build>
</profile>