在maven插件执行时调用默认阶段

时间:2014-06-16 13:57:36

标签: maven maven-3 integration-testing maven-plugin

编辑:我想做的就是在maven插件中调用maven默认阶段(这种情况是它的进程类)(在这种情况下是failafe插件)

Edit2:使标题更清晰,编辑了描述

美好的一天,

在自己这么做之后,我别无选择,只能问一个问题。

基本上这会运行我的集成测试。

mvn clean package -DskipTests
mvn verify

这很有效。我只需要一种方法来配置前两个命令,以便在预集成测试时执行,这样当用户输入mvn verify时,前两个命令会自动执行:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.3.1</version>
            <executions>
                <execution>
                    <id>clean-package</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>mvn</executable>
                        <arguments>
                            <argument>clean</argument>
                            <arguments>package</arguments>
                              <arguments>-Dmaven.test.skip</arguments>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>

我似乎无法找到执行上述阶段的maven中的插件。

你能指出我正确的方向吗?如果答案将被解释(我将彻底阅读文件),我将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果我理解正确,如果有人拨打mvn clean package -DskipTests,您会自动执行mvn verify?这是对的吗?

首先,packagelife cycle phase。第二次通话中的verify也是一个生命周期阶段。

Maven中的生命周期是mvn verify所有阶段的方式

validate, initialize, generate-sources, process-sources, generate-resources, 
process-resources, compile, process-classes, generate-test-sources, 
process-test-sources, generate-test-resources, process-test-resources, 
test-compile, process-test-classes, test, prepare-package, package, 
pre-integration-test, integration-test, post-integration-test, verify

一个接一个地运行,这意味着包含package阶段。

如果您真的想通过-DskipTests进行单元测试,可以通过以下方式完成:

mvn -DskipTests verify

我不能推荐。

正如您所提到的,工件是一个包,它应该在package阶段打包,然后您可以在生命周期中对其进行集成测试。

答案 1 :(得分:0)

如何使用exec-maven-plugin [1]

示例:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.3.1</version>
        <executions>
          <execution>
            <id>clean-process-classes</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>maven</executable>
              <arguments>
                <argument>clean</argument>
                <argument>process-classes</argument>
              </arguments>
            </configuration>
          </execution>
          <execution>
            <id>felix-bundle</id>
            <phase>pre-integration-test</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>maven</executable>
              <arguments>
                <argument>org.apache.felix:maven-bundle-plugin:bundle</argument>
                <argument>-DskipTests</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
   ...
</project>

注意:未经测试的代码。 注2:从技术上讲,“流程类”不是一个目标。这是一个maven阶段。目标附加到maven阶段,以便在执行该阶段时,它将执行附加到该阶段的所有目标以及之前附加到阶段的所有目标。在Maven中,目标的格式类似于[groupId:] artifactId:[version:]目标。一个很好的指标是,如果你看到一个结肠,这是一个maven的目标。如果它的前缀是' - '或' - ',那么它就是一个选项。否则,这是一个maven阶段。有关maven生命周期的更多信息,请参见[2]。

[1] http://mojo.codehaus.org/exec-maven-plugin/usage.html

[2] http://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html