测试多项目

注意:此示例改进了多项目测试的说明书。

你的 Mojo 应该有@aggregator参数,即:

  • 使用 java 注释(maven-plugin-plugin 3.x):
    @Mojo( name = "touch", aggregator = true )
    public class MyMojo
        extends AbstractMojo
    {
      ...
    }
  • 或使用 javadoc 标签:
    /**
     * @goal touch
     * @aggregator
     */
    public class MyMojo
        extends AbstractMojo
    {
      ...
    }

要在多项目区域中测试 Mojo,您需要定义几个存根,即用于主测试项目及其模块。

创建存根

主测试项目的存根:

public class MyProjectStub
    extends MavenProjectStub
{
    /**
     * Default constructor
     */
    public MyProjectStub()
    {
        ...

        setExecutionRoot( true );
    }

    /** {@inheritDoc} */
    public MavenProject getExecutionProject()
    {
        return this;
    }
}

子项目的存根:

public class SubProject1Stub
    extends MavenProjectStub
{
    /**
     * Default constructor
     */
    public SubProject1Stub()
    {
        ...
    }
}
public class SubProject2Stub
    extends MavenProjectStub
{
    /**
     * Default constructor
     */
    public SubProject2Stub()
    {
        ...
    }
}

配置项目到测试的pom

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-my-plugin</artifactId>
        <configuration>
          ...
          <project implementation="org.apache.maven.plugin.my.stubs.MyProjectStub"/>
          <reactorProjects>
            <project implementation="org.apache.maven.plugin.my.stubs.SubProject1Stub"/>
            <project implementation="org.apache.maven.plugin.my.stubs.SubProject2Stub"/>
          </reactorProjects>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>