如何使用测试工具更改 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 插件强制执行的还是取自某些我无法弄清楚的奇怪的 属性。
不属于此包的属性是:
- 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
听起来很有教程。
我发现了一堆愚蠢的错误,为什么我的 mojos(包括上面那个)不起作用,比如:
- Maven mojos 不会像 Java 文件一样自动编译,您需要手动启动 Maven(或使用 Maven -> Update Project 之类的东西 IDE)
- 我导入了
org.junit.jupiter.api.Test
而不是 org.junit.Test
,所以 MojoRule
没有正确初始化
我使用 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 插件强制执行的还是取自某些我无法弄清楚的奇怪的 属性。
不属于此包的属性是:
- 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
听起来很有教程。
我发现了一堆愚蠢的错误,为什么我的 mojos(包括上面那个)不起作用,比如:
- Maven mojos 不会像 Java 文件一样自动编译,您需要手动启动 Maven(或使用 Maven -> Update Project 之类的东西 IDE)
- 我导入了
org.junit.jupiter.api.Test
而不是org.junit.Test
,所以MojoRule
没有正确初始化