使用Maven插件测试工具(2.0-alpha1)时遇到问题:当我想测试我的Mojo时,参数的默认值和表达式不适用。 我有以下参数:
/**
* <p>The output file to write the settings to.</p>
*
* @parameter default-value="${project.build.directory}/myProperties.properties" expression="${properties.file}"
*/
private String file;
当我运行单元测试时,此属性始终为null。我尝试注入一个成功返回${project.build.directory}
的MavenProjectStub,但这不适用于我的Mojo参数。
有没有办法在测试期间在我的Mojos中启用${project.build.directory}
之类的默认值和表达式?
答案 0 :(得分:9)
所以它看起来像they added lookupConfiguredMojo
for just this use case。我花了一段时间才弄清楚如何调用它,因为你需要一个正确配置MavenProject
来使用它。这对我有用:
File pomFile = ...
MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
ProjectBuildingRequest buildingRequest = executionRequest.getProjectBuildingRequest();
ProjectBuilder projectBuilder = this.lookup(ProjectBuilder.class);
MavenProject project = projectBuilder.build(pomFile, buildingRequest).getProject();
MyMojo mojo = (MyMojo) this.lookupConfiguredMojo(project, "my-goal");
...
答案 1 :(得分:6)
我在测试插件时遇到了很多问题。每个问题只需要几行修复,但找到它们并不容易。这里的指针有所帮助!
我把它们组合成一个
BetterAbstractMojoTestCase.java课程。它包含了神奇的线条,解决了我遇到的半瞌睡问题;并且它为您的问题提供lookupConfiguredMojo(File pom, String goal)
方法。
答案 2 :(得分:2)
我遇到了同样的问题,找不到任何解决方案,所以我决定自己解决。我已经查看了最新版本的maven-plugin-testing-harness(目前是2.0-alpha-1)的源代码,并将其放在我自己的github存储库中。
您必须从那里签出代码并在本地构建。
您需要在项目中进行的唯一更改是替换POM中的依赖项。我使用自己的domain / groupId名称而不是Apache,只是为了避免与未来的Apache版本发生任何冲突(和混淆)。
这是您需要放入POM的内容:
<dependency>
<groupId>com.menttis.maven.plugin-testing</groupId>
<artifactId>maven-plugin-testing-harness</artifactId>
<version>2.0.1</version>
<scope>test</scope>
</dependency>
这是您可以从中获取代码的存储库:https://github.com/grighetto/maven-plugin-testing-harness
答案 3 :(得分:0)
对于版本3 +:
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.5</version>
<scope>provided</scope>
</dependency>
在我意识到我正在将注释语法与javadoc语法混合之前,我花了一些时间对此感到困惑。
@Parameter(property = "project.build.directory")
private String projectBuildDir;
然后将您的文件名与该值连接起来,以完成代码中的路径。