maven发布:准备junit

时间:2013-08-14 16:21:01

标签: maven junit maven-plugin

我需要在执行mvn release:prepare时只运行特定的jUnit。我不希望它在mvn install或任何其他目标下运行,因为这个jUnit旨在查看开发人员是否首先执行了数据库活动。

有没有办法让junit通过参数(?)知道正在执行的进程是release:prepare

或者,有没有办法在 pom.xml 中定义这个jUnit只运行在那个目标上?

我一直在搜索这个问题,我似乎无法找到解决方案,因为我还没有那么擅长maven。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

我还没有完全按照您的要求完成,但关键是使用SureFire下的<executions>部分:

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <configuration>
      ... exclude the test from normal execution ...
    </configuration>
    <executions>
      <execution>
        <id>release-phase</id>
        <phase>release-prepare</phase>
        <goals>
          <goal>test</goal>
        </goals>
        <configuration>
          ... fill this in to include the tests you want ...
        </configuration>
      </execution>
    </executions>
 <plugin>

您还希望在正常<configuration>部分中排除该测试。

有一些相关信息HERE

答案 1 :(得分:1)

其他人很接近......但没有雪茄。

当Maven运行发布时,发布过程没有特殊阶段。您要做的是添加配置为包含所需测试的配置文件,例如

<profiles>
  <profile>
    <id>release-preflight-checks</id>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <executions>
            <execution>
              <id>release-preflight-checks</id>
              <goals>
                <goal>test</goal>
              </goals>
              <configuration>
                .. include your test here
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </build>
  </profile>
</profiles>

然后,您需要默认配置surefire以不执行预检检查

<build>
  <plugins>
    ...
    <plugin>
      <artifactId>maven-surefire-plugin</artifactId>
      <configuration>
        .. exclude your test here
      </configuration>
    </plugin>
    ...
  </plugins>
</build>

然后最后,你需要告诉Maven这个配置文件只应在release:prepare的分叉执行期间处于活动状态

<build>
  <plugins>
    ...
    <plugin>
      <artifactId>maven-release-plugin</artifactId>
      <configuration>
        ...
        <preparationGoals>clean verify -P+release-preflight-checks</preparationGoals>
        ...
      </configuration>
    </plugin>
    ...
  </plugins>
</build>

注意:在个人资料名称前加上+非常重要,这样您才能将个人资料添加到有效个人资料列表中,否则您的release:prepare步骤将无法验证build可以在发布配置文件处于活动状态时使用,您可以使后续的release:perform失败。

注意:一个不太复杂的路径就是将surefire配置放入您正在使用的版本配置文件中(默认情况下,其ID为release,但由于您可以更改错误,因此更容易出错父pom - 例如,如果您决定将项目推送到中心,则sonatype-oss-parent将发布配置文件更改为sonatype-release - 然后您将看不到构建失败,因为测试将不会执行直到您更改您的pom以匹配新发布配置文件的ID ...使用-P+release-preflight-checks确保该个人资料始终release:prepare有效,并且还可以满足请求者完全的原始要求 - 即只运行release:prepare而不运行release:perform,如果执行被添加到发布配置文件中就是这种情况)