【问题标题】:Maven Plugin Mojo Configure Default Parameter ValuesMaven Plugin Mojo 配置默认参数值
【发布时间】:2016-04-08 16:25:41
【问题描述】:

我有一个 maven 插件和一个看起来有点接近的简单 Mojo

public abstract class AbstractSetupMojo extends AbstractMojo {
    @Parameter(property="targetHost", defaultValue="localhost") 
    private String targetHost;
    @Parameter(property="targetPort", defaultValue="27017")
    private Integer targetPort;
    @Parameter(property="targetDbName", required=true) 
    private String targetDbName;
    @Parameter(property="sourceHost", defaultValue="${mojo.configuration.targetHost}") 
    private String sourceHost;
    @Parameter(property="sourcePort", defaultValue="${mojo.configuration.targetPort}")
    private Integer sourcePort;
    @Parameter (property="sourceDbName", defaultValue="${mojo.configuration.targetDbName}")
    private String sourceDbName;
    @Parameter(property="scriptsPath")
    private File scriptsPath;
}     

其他 Mojo 正在扩展这个。因此,想法是将source* 参数设置为相应target* 参数的值。还设置了一些默认值。

在测试中我有类似的东西

public class GenerateMojoTest extends AbstractMojoTestCase {

    protected void setUp() throws Exception {
        super.setUp();
    }

    public void testConfiguration() throws Exception {
        File pom = getTestFile("src/test/resources/test-project-1/pom.xml");
        assertNotNull(pom);
        assertTrue(pom.exists());
        GenerateMojo generateMojo = (GenerateMojo)lookupMojo("generate", pom);
        assertThat(generateMojo.getSourceDbName()).isEqualTo(generateMojo.getTargetDbName());
        assertThat(generateMojo.getSourcePort()).isEqualTo(generateMojo.getTargetPort()).isEqualTo(27017);
        assertThat(generateMojo.getSourceHost()).isEqualTo(generateMojo.getTargetHost()).isEqualTo("localhost");
    }

}

测试中POM文件感兴趣的部分看起来像

        <plugin>
            <groupId>com.ffy</groupId>
            <artifactId>setup-maven-plugin</artifactId>
    <!--                
            <configuration>
                <scriptsPath>src/test/resources/temp</scriptsPath>
            </configuration>
    -->                
            <executions>
                <execution>
                    <id>generate</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

测试失败,因为如果我将 &lt;configuration&gt; 注释掉,则所有 Mojo 参数都为空,如果我取消注释,则仅设置 scriptsPath。其他参数为null

为了获得完全配置的 Mojo,我是否必须在测试中执行其他操作?

我尝试了更长的方法

protected GenerateMojo setupMojo(final File pom) throws ComponentConfigurationException, Exception {
    final MavenExecutionRequest executionRequest = new DefaultMavenExecutionRequest();
    final ProjectBuildingRequest buildingRequest = executionRequest.getProjectBuildingRequest();
    final ProjectBuilder projectBuilder = this.lookup(ProjectBuilder.class);
    final MavenProject project = projectBuilder.build(pom, buildingRequest).getProject();
    final MavenSession session = newMavenSession(project);
    final MojoExecution execution = newMojoExecution("generate");
    final GenerateMojo mojo = (GenerateMojo) this.lookupConfiguredMojo(session, execution);
    return mojo;
}

而不是lookupMojo,但这并没有改变。

【问题讨论】:

    标签: java maven maven-3 maven-plugin


    【解决方案1】:

    您需要拥有&lt;configuration/&gt; 部分并定义您感兴趣的值。您会期望它更聪明一点,但实际上测试工具所做的是,它从@ 读取值987654323@ 并忽略注释中的那些。测试工具还有很多不足之处,它实际上并没有像正确的 Maven 执行/插值那样为您加载值......因此,如果它更适合您的需求,我建议使用 maven-invoker-plugin

    【讨论】:

    • 看来maven-plugin-testing-harness还有很长的路要走。
    • 哦,看起来确实如此,但我向你保证,自从 Maven 2.x 出现以来,情况就是这样,所以......这可能真的需要一段时间(如果有的话)解决。
    • stackoverflow.com/questions/31528763/… 中有一个相关的答案 - 答案建议使用 mojoRule.lookupConfiguredMojo() 似乎设置参数的默认值。
    猜你喜欢
    • 1970-01-01
    • 2014-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 2021-05-11
    • 2019-07-05
    相关资源
    最近更新 更多