我试图通过命令行将Map类型的参数传递给我的maven插件。这是我试过的方式,
$mvn -U -X sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi -Dsayhi.myMap=key1=value1
$mvn -U -X sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi -Dsayhi.myMap={key1=value1}
这些都不起作用并且出现以下错误:
Caused by: org.codehaus.plexus.component.configurator.ComponentConfigurationException: Cannot assign configuration entry 'myMap' with value '${sayhi.myMap}' of type java.lang.String to property of type java.util.Map**
这是我在Mojo中的参数:
/**
* My Map.
*/
@Parameter(property = "sayhi.myMap", required = false)
private Map<String,String> myMap = new HashMap<String, String>();
按照==&gt;的说明进行操作https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Mapping_Collections,但没有运气。我想我错过了一些非常小的东西。我正在研究maven v3.2.1
感谢
答案 0 :(得分:0)
根据我的知识,我们没有选择在命令行中传递地图变量,但您可以通过以下方式传递地图变量。
创建xml文件并创建一个插件(对于XML,请参阅maven doc)
<myMap>
<key1>value1</key1>
<key2>value2</key2>
</myMap>
你的魔力将是:
@Parameter(property = "myMap", required = false)
private Map<String,String> myMap;
Yor maven命令将是:
$mvn -s <path_to_xml_file> -U -X sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi
答案 1 :(得分:0)
我遇到了同样的问题, Guide to Developing Java Plugins, Introduction, Parameter Types With Multiple Values, Maps解释了它:
地图强>
此类别涵盖实施
java.util.Map
的任何类,例如HashMap
但未实现java.util.Properties
。
请参阅this answer我是如何解决的。
解决方法包括以下内容:
...
@Parameter( property = "map", required = true )
private String[] mapEntries;
private Map<String, String> map;
...
map = Arrays.stream( mapEntries ).collect( Collectors.toMap( s -> s, s -> s ) ); // with Java >=8
putMapEntriesToMap(); // with Java <8
...
private void putMapEntriesToMap()
{
map = new HashMap<String, String>( mapEntries.length );
for ( String entry : mapEntries )
{
int equalsPosition = entry.indexOf( "=" );
map.put(
entry.substring( 0, equalsPosition ),
entry.substring( equalsPosition + 1 ) );
}
} // putMapEntriesToMap()
...