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

时间:2019-05-08 21:26:55

标签: maven maven-plugin

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

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插件都强制这样做,还是取自我不知道的某些奇怪属性。

对本程序包没有帮助的属性是:

  • pom的工件ID
  • pom的群组ID
  • pom的版本

错误消息是:

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听起来真的很有教程。

1 个答案:

答案 0 :(得分:0)

我发现了一些愚蠢的错误,为什么我的mojo(包括上面的一个)无法正常工作,例如:

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