2016-04-17 6 views
1

Я пытаюсь передать параметры вида карты в мой плагин maven через командную строку. Вот как я пытался,не может передать карту переменным в 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>(); 

следовали инструкциям в ==>https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Mapping_Collections, но не повезло., Я думаю, что не хватает чего-то очень маленького. Я работаю на Maven v3.2.1

благодаря

+0

Я попробовал все другие, как массив, список параметров и Set. все работают через командную строку. ударил только с помощью Карты. –

+0

Зачем вы хотите предоставить такую ​​информацию через командную строку? Какова цель плагина? – khmarbaise

+0

Нам нравится запускать плагин maven через командную строку (через Java-код), поэтому для этого нам нужно передать параметры конфигурации. это наш плагин для дома. –

ответ

0

Мы не имеем возможности передать переменные карты в командной строке, мне известно, но вы можете передать переменную карту следующим образом.

Создать файл XML и создать один плагин (для XML см Maven документ)

<myMap> 
     <key1>value1</key1> 
     <key2>value2</key2> 
</myMap> 

Ваш харизмы будет:

@Parameter(property = "myMap", required = false) 
private Map<String,String> myMap; 

Йор команда Maven будет:

$mvn -s <path_to_xml_file> -U -X sample.plugin:hello-maven-plugin:1.0-SNAPSHOT:sayhi 
+0

Работа с файлом XML не соответствует моему требованию, Как я уже упоминал в моем начальном посте все остальные коллекции: массивы, списки, наборы работают и со страницей ==> https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Mapping_Collections, они не указаны там что MAP не работает –

+0

удивлен, увидев, что никто не сталкивался с такой ситуацией. поднял вопрос с maven aswell –

+0

@gangadharmamillapalli _ «они не сказали, что MAP wont work_» не соответствует действительности. [Руководство по разработке плагинов Java] (https://maven.apache.org/guides/plugin/guide-java-plugin-development.html # Parameter_Types_With_Multiple_Values) упоминает его: "_Maps - эта категория охватывает любой класс, который реализует' java.util.Map', например 'HashMap', но не реализует' java.util.Properties' ._ " –

0

Я столкнулся с той же проблемой, и Guide to Developing Java Plugins, Introduction, Parameter Types With Multiple Values, Maps объясняет это:

Maps

This category covers any class which implements java.util.Map such as HashMap but does not implement 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() 

    ...   
+0

спасибо за ответ Gerold Broser , к сожалению, код плагина maven не в нашей руке. –

+0

@gangadharmamillapalli Приветствую вас. Но почему ты не в своей руке? В комментариях к вашему вопросу вы ссылаетесь на него дважды: «_ [это наш | у нас есть] в доме [maven] plugin._». –