2016-04-17 8 views
1

Ich versuche zu übergeben Karte Art von Parametern zu meinem Maven-Plugin über die Befehlszeile. Hier ist, wie ich versuchte,nicht in der Lage, Art der Variablen zu Maven Ziel durch die Befehlszeile übergeben

$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} 

Keine von diesen arbeiten und folgende Störung zu erhalten:

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** 

Hier ist meine Parameter in Mojo:

/** 
* My Map. 
*/ 
@Parameter(property = "sayhi.myMap", required = false) 
private Map<String,String> myMap = new HashMap<String, String>(); 

gefolgt Anweisungen an ==>https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Mapping_Collections, aber kein Glück., Ich denke, ich vermisse etwas sehr kleines. bin auf Maven v3.2.1

dank

+0

Ich habe versucht, alle anderen wie Array, List und Set-Parameter. Alle arbeiten über die Befehlszeile. nur mit Karte getroffen. –

+0

Warum möchten Sie solche Informationen über die Befehlszeile geben? Wozu dient das Plugin? – khmarbaise

+0

wir möchten Maven-Plugin über die Befehlszeile (über Java-Code) ausführen, so dass wir Konfigurationsparameter übergeben müssen. Das ist unser In-House-Plugin. –

Antwort

0

Wir haben die Möglichkeit, nicht die Karte Variablen in der Befehlszeile wie pro meinem Wissen weitergeben, aber Sie können die Karten Variable in der folgenden Art und Weise passieren.

Erstellen von XML-Datei und erstellen ein Plugin (für XML bitte Maven doc entnehmen)

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

Ihr mojo wird:

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

Yor Maven Befehl wird:

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

arbeiten mit XML-Datei nicht meiner Anforderung entspricht, wie ich bereits erwähnt In meinem ursprünglichen Post funktionieren alle anderen Sammlungen, Arrays, Listen, Sets und mit der Seite ==> https://maven.apache.org/guides/mini/guide-configuring-plugins.html#Mapping_Collections werden sie nirgends erwähnt dass MAP nicht arbeiten –

+0

überrascht, um zu sehen, niemand hat diese Situation konfrontiert. ein Problem mit Maven aswell –

+0

@ Gangadharmamillapalli _ "sie nicht erwähnt, dass MAP nicht arbeiten_" ist nicht wahr. [Anleitung zur Entwicklung von Java Plugins] (https://maven.apache.org/guides/plugin/guide-java-plugin-development.html # Parameter_Types_With_Multiple_Values) erwähnt es: "_Maps - Diese Kategorie umfasst jede Klasse, die' java.util.Map' wie 'HashMap' implementiert, aber' java.util.Properties' nicht implementiert. " –

0

Ich habe das gleiche Problem erfahren und Guide to Developing Java Plugins, Introduction, Parameter Types With Multiple Values, Maps erklärt es:

Maps

This category covers any class which implements java.util.Map such as HashMap but does not implement java.util.Properties .

Siehe this answer wie ich es gelöst habe.

Die Abhilfemaßnahme beinhaltet folgende Leistungen:

... 

    @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

Danke für die Antwort Gerold Broser leider ist maven plugin code nicht in unserer hand. –

+0

@gangadharmamillapalli Ihre Begrüßung. Aber warum nicht in deiner Hand? In Kommentaren zu Ihrer Frage verweisen Sie zweimal darauf: "_ [das ist unser | wir haben eins] im Haus [maven] plugin._". –