我使用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插件都强制这样做,还是取自我不知道的某些奇怪属性。
对本程序包没有帮助的属性是:
错误消息是:
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
听起来真的很有教程。
答案 0 :(得分:0)
我发现了一些愚蠢的错误,为什么我的mojo(包括上面的一个)无法正常工作,例如:
org.junit.jupiter.api.Test
而不是org.junit.Test
,所以MojoRule
初始化不正确