在 Maven 中 - 当默认执行的验证阶段为 运行 时如何向用户显示消息?

In maven - how to display a message to the user when the verify phase is run on the default execution?

在我们的 Maven 构建中 - 我们使用默认配置文件进行构建,并使用不同的配置文件进行测试。当我们的测试在默认配置文件下 运行 时,由于各种原因它们会中断。

例如在我们的团队中使用我们的构建很好

mvn -Pfoo verify

我们的构建在我们的团队中很糟糕

mvn verify

我们想鼓励我们团队中的人 运行 在 'foo' 生命周期下进行测试,并在他们不这样做时发出警告。

我目前解决这个问题的方法是为默认配置文件创建一个新的 surefire 测试,排除所有测试,除了一个新的 DefaultProfileWarningTest,其唯一目的是告诉用户 运行 foo 配置文件下的测试。

因此测试可能如下所示:

public class DefaultProfileWarningTest {
    @Test
    public void displayWarning() {
        System.out.println("The tests aren't running - you should have run **mvn -Pfoo verify**");
    }
}

pom.xml 中执行类似于:

<profiles>
    <profile>
        <id>foo</id>
        ...      
    </profile>
    <profile>
        <id>my-default-profile</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.19.1</version>
                    <configuration>
                        <includes>
                            <include>DefaultProfileWarningTest.java</include>
                        </includes>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </profile>
<profiles>

但这似乎是一个过度劳累的拼凑。假设我们无法修复配置文件问题 - 当验证阶段针对默认配置文件时,是否有一种简单的轻量级方法向用户显示消息?

我的问题是:在 maven 中 - 如何在默认执行的验证阶段 运行 时向用户显示消息?

一个可能的解决方案是定义 maven-antrun-plugin that echos a message with the echo task. It would be skipped when run under the foo profile, using the attribute skip 的执行。可以从 foo 配置文件中设置为 true 的 Maven 属性 进行切换,默认情况下设置为 false

考虑以下几点:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <phase>test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <target>
                    <echo>The tests aren't running - you should have run mvn -Pfoo verify</echo>
                </target>
                <skip>${isRightProfile}</skip>
            </configuration>
        </execution>
    </executions>
</plugin>

然后您可以像这样配置您的配置文件:

<profile>
    <id>foo</id>
    <properties>
        <isRightProfile>true</isRightProfile>
    </properties>
</profile>
<profile>
    <id>my-default-profile</id>
    <properties>
        <isRightProfile>false</isRightProfile>
    </properties>
    <!-- rest unchanged -->
</profile>

foo 配置文件被激活时,isRightProfile 属性 将被设置为 true,因此 AntRun 插件的执行将被跳过并且没有消息将被打印。当默认配置文件被激活时,这个 属性 将被设置为 false 并且消息将被回显。

您可以简单地使用像 echo-maven-plugin 这样的适当插件来打印消息。

<plugin>
  <groupId>com.soebes.maven.plugins</groupId>
  <artifactId>echo-maven-plugin</artifactId>
  <version>0.2</version>
  <executions>
    <execution>
      <phase>initialize</phase>
      <goals>
        <goal>echo</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <echos>
      <echo>This is the Text which will be printed out.</echo>
    </echos>
  </configuration>
</plugin>

如果您想强迫人们使用特定的配置文件,您应该使用 maven-enforcer-plugin,它可以强制您使用特定的配置文件。