如何在执行Maven插件目标时获取所有设置参数?

时间:2017-07-20 16:59:43

标签: java maven

/**
 * @goal query
 */
public class MyQueryMojo
    extends AbstractMojo
{
    /**
     * @parameter
     */
    private String param1;

    /**
     * @parameter
     */
    private String param2;

    public void execute()
        throws MojoExecutionException
    {
        showAllParams();
    }
}

如何在执行showAllParams()时实现mvn myquery:query -Dquery.param1=val1 -Dquery.param2=val2打印所有参数的设置/传递值?

预期的StdOut:

query.param1=val1
query.param2=val2

意图与使用help:describe不同,因为help:describe将返回所有参数的元数据,而我需要获取实际传递的值。

编辑:showAllParams()不应该以硬编码方式实现,即使更改了参数数量也应该可以工作。

而不是:

if (param1 != null) this.getLog.info(param1);
if (param2 != null) this.getLog.info(param2);
...
if (param9 != null) this.getLog.info(param9);

是否有可能以这种方式实现:

Map<String, String> params = getAllParams();

getLog().info(params.toString());

2 个答案:

答案 0 :(得分:1)

好吧,考虑到param1和param2没有初始化并且没有默认值,你可以检查所有参数,如果参数不为null,则打印它。在你的情况下:

if (param1 != null) this.getLog.info(param1);
if (param2 != null) this.getLog.info(param2);

但是,如果您的参数具有默认值,那么根据以下链接(http://maven.40175.n5.nabble.com/Check-if-parameter-is-explicitly-set-td5905937.html),无法确定某个值是由命令行显式设置还是设置为默认值。

答案 1 :(得分:0)

这是我的看法。

请注意,您可以传递命名参数(即&#34; -Dquery.param1=1&#34;)或参数值数组。

通过多次指定参数来配置数组类型参数。

(即&#34; -Dquery.param1=1 -Dquery.param1=11&#34;等)

有关文档的更多信息:

https://maven.apache.org/guides/plugin/guide-java-plugin-development.html

/**
 * @goal query
 */
public class MyQueryMojo extends AbstractMojo{

    private final static String PARAM1_DEFAULT_VALUE="param1";
    private final static String PARAM2_DEFAULT_VALUE="param2";
    private final static String PARAM3_DEFAULT_VALUE="param3";

    /**
     *  param1
     */
    @Parameter( property = "query.param1", defaultValue = PARAM1_DEFAULT_VALUE )
    private String param1;

    /**
     *  param1
     */
    @Parameter( property = "query.param2", defaultValue = PARAM2_DEFAULT_VALUE )
    private String param2;

    /**
     *  param1
     */
    @Parameter( property = "query.param3", defaultValue = PARAM3_DEFAULT_VALUE )
    private String param3;

    /**
     *  paramArray
     */
    @Parameter( property = "query.param")
    private String[] paramArray;

    public void execute() throws MojoExecutionException{
        // print individual parameters
        printAllParams();

        // print all in array
        printArrayParam();
    }

    private void printArrayParam(){
        for(String p : paramArray){
            getLog.info( "paramArray: " + p );
        }
    }

    private void printAllParams(){
        getLog().info("param1:" + param1);
        getLog().info("param2:" + param2);
        getLog().info("param3:" + param3);
    }
}