/**
* @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());
答案 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);
}
}