如何使用测试工具更改 Maven 插件的包

How to Change the Package of a Maven Plug-in With Testing Harness

我使用 this tutorial 创建了一个非常基本的设置来创建和测试 Maven mojo。两个 类 看起来像这样。

魔力:

/**
 * @goal touch
 * @phase process-sources
 */
public class MyMojo extends AbstractMojo {
    public void execute() throws MojoExecutionException {
        // stuff
    }
}

测试:

public class MyMojoTest {
    @Rule
    public MojoRule rule = new MojoRule();

    @Test
    public void testSomething() throws Exception {
        File pom = new File("src/test/resources/pom.xml");
        MyMojo myMojo = (MyMojo) rule.lookupMojo("touch", pom);
        Assert.assertNotNull(myMojo);
        myMojo.execute();
    }
}

目前有效。然后我将它移到我自己的项目中,看看为什么我的测试不起作用。它仍然有效,直到我将 类 移到另一个包中。

默认值是 org.apache.maven.plugin.my,我不确定这是对所有 Maven 插件强制执行的还是取自某些我无法弄清楚的奇怪的 属性。

不属于此包的属性是:

错误信息是:

org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
      role: org.apache.maven.plugin.Mojo
  roleHint: org.acme:maven-my-plugin:1.0.0-SNAPSHOT:touch
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:264)
    at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:240)
    at org.codehaus.plexus.PlexusTestCase.lookup(PlexusTestCase.java:205)
    at org.apache.maven.plugin.testing.AbstractMojoTestCase.lookupMojo(AbstractMojoTestCase.java:389)
    at org.apache.maven.plugin.testing.AbstractMojoTestCase.lookupMojo(AbstractMojoTestCase.java:334)
    at org.apache.maven.plugin.testing.MojoRule.lookupMojo(MojoRule.java:164)
    at org.apache.maven.plugin.my.MyMojoTest.testSomething(MyMojoTest.java:22)

那么我该如何更改套餐呢? org.apache.maven.plugin.my听起来很有教程。

我发现了一堆愚蠢的错误,为什么我的 mojos(包括上面那个)不起作用,比如:

  • Maven mojos 不会像 Java 文件一样自动编译,您需要手动启动 Maven(或使用 Maven -> Update Project 之类的东西 IDE)
  • 我导入了 org.junit.jupiter.api.Test 而不是 org.junit.Test,所以 MojoRule 没有正确初始化