2009-08-26 4 views

Répondre

9

Vous ne pouvez pas le faire directement autant que je sache, mais il est assez courant d'accepter une chaîne délimitée et de la scinder dans un tableau.

Par exemple, le maven-site-plugin vous permet de spécifier une chaîne de paramètres régionaux délimitée par des virgules, tandis que maven-scala-plugin gère cela en vous permettant de définir les arguments avec un séparateur de canaux. Vous pouvez regarder les Mojos pertinents pour voir comment l'argument est traité.

Quelques exemples d'usages ci-dessous:

site plugin:

-Dlocales=enGB,frFR 

scala-plugin:

-DaddArgs=arg1|arg2|arg3 

Mise à jour: si vous voulez gérer cela de manière plus élégante, vous pouvez utiliser Maven -shared-io pour permettre la définition d'un fichier descripteur externe, puis passer l'emplacement du descripteur en tant que propriété. Cela signifie qu'un seul argument de ligne de commande peut référencer une structure de configuration.

Si cela ressemble à cela pourrait fonctionner pour vous, un coup d'oeil à ce answer qui décrit comment utiliser les descripteurs externes dans les propriétés d'un plugin, ou ce answer qui fait similaire pour le xml-maven-plugin. Ou vous pouvez simplement regarder l'assembly-plugin pour des idées.

+0

C'est ma conclusion aussi, malheureusement. – torbjornvatn

+0

J'ai ajouté quelques conseils pour une approche alternative qui pourrait aider, utilisez-io partagé avec les fichiers de descripteurs externes pour passer un ensemble de configuration dans le plug-in avec un seul paramètre. –

7

Dernière version (3.0.3) devrait fonctionner avec:

-DaddArgs = arg1, arg2, arg3

+0

pour moi didnt travail avec Maven 3.0.3 soit avec -Dgoal.addArgs = x, y, z ou -DaddArgs = x, y, z – dcompiled

+0

est-il un moyen pour le type "carte" aussi bien? – ctron

+0

@dcompiled Je ne sais pas pourquoi cela ne fonctionne pas pour vous, mais cela fonctionne pour moi. Version 3.0.5 exec-maven-plugin -Dexec.arguments = arg1, arg2 – Pyrolistical

1

Selon le blog de Sonatype here, si vous êtes un développeur de plug-in et

  1. Maven 3
  2. et annoter votre paramètre plugin de type tableau/collection en utilisant l'annotation comme:

    /** @parameter expression="${args}" */

De cette façon, le paramètre de plug-in peut être traité par Maven automatiquement et les utilisateurs du plugin peut fournir les paramètres réseau de plug-in/type de collection via CLI en utilisant une propriété système séparés par des virgules comme mvn myplugin:mygoal -Dargs=a,b,c

0

Pour mettre à jour sur la réponse de @ nybon un peu, il semble

@Parameter(property="your.param") 
private List<String> yourParam; 

œuvres, au moins lors de l'utilisation maven-plugin-annotations:3.5 dans Maven 3.5.0. Exécution avec

-Dyour.param=val1,val2 

définit la liste.

0

La manière de spécifier une liste de valeurs via la propriété système, pour un plugin, dépend de la mise à jour du plugin.

Cependant, si vous avez besoin d'un plugin mis à jour correctement mis à jour, alors la façon correcte de spécifier un tableau de valeurs à un plugin est de passer par des chaînes séparées par des virgules.

Voici une référence: http://blog.sonatype.com/2011/03/configuring-plugin-goals-in-maven-3/

Voici une citation de la référence:

Pour de nombreux paramètres du plugin, il est parfois pratique de spécifier leurs valeurs de la ligne de commande via les propriétés du système. Dans le passé, était limité aux paramètres de type simple comme String ou Boolean. La dernière version de Maven permet enfin aux utilisateurs de plugins de configurer des collections ou des tableaux à partir de la ligne de commande via des chaînes séparées par des virgules. Prenons par exemple un paramètre plugin comme celui-ci:

En allant un peu plus loin, nous pouvons regarder un exemple plus concret. Considérons, le plugin Wildfly maven. Ce plugin possède une propriété de configuration obsolète appelée: jvmArgs.

On s'attendait à ce qu'il soit transmis en tant que liste de valeurs séparées par des espaces. Comme nous le savons tous, dans la ligne de commande, déconner avec des espaces n'est pas adorable. Donc, si nous regardons la définition de ce paramètre dans le code plugin mojo, vous trouverez quelque chose comme ça (voici une autre citation).

/** 
* A space delimited list of JVM arguments. 
* 
* @deprecated use {@link #javaOpts} 
*/ 
@Parameter(alias = "jvm-args", property = PropertyNames.JVM_ARGS) 
@Deprecated 
private String jvmArgs; 

C'est donc l'ancienne façon de faire les choses.

Maintenant, si vous utilisez la dernière version de ce plugin (par exemple Alpha6). Ensuite, le code source aura un joli nouveau champ appelé javaOpts. Regardons à quoi ressemble le champ dans le code.

/** 
* The JVM options to use. 
*/ 
@Parameter(alias = "java-opts", property = PropertyNames.JAVA_OPTS) 
private String[] javaOpts; 

Donc, ce que nous voyons est que nous avons un bon champ de tableau dans le StartMojo. Ce champ de tableau est correctement annoté. Et le moteur Maven fera la lourde tâche de régler les valeurs dans le Mojo.

Lorsque vous voulez pomper des données dans ce domaine via la ligne de commande, vous devez spécifier dans votre fichier de lot quelque chose de la forme:

-Dwildfly.javaOpts="-Xmx1536M,-Xms1536M,-XX:MaxMetaspaceSize=512M,-XX:-HeapDumpOnOutOfMemoryError" 

Si vous essayez samething à l'aide sapces au lieu de Commans. Je vais vous montrer ce qui se passe:

[INFO] Le serveur STANDALONE est en cours de démarrage. taille maximale du tas non valide: -Xmx1536M -XX: MaxMetaspaceSize = 512m -XX: -HeapDumpOnOutOfMemoryError

Vous voyez, Maven avec avalé ma propriété complète du système d'espaces, il n'a pas fait une scission de chaîne. Wildfly a donc essayé de configurer les paramètres de mémoire de jvm comme si la mémoire max était cette chaîne complète. D'autre part, lorsque j'utilise des virgules pour séparer, le Mojo est correctement enrichi et je peux prendre le contrôle des paramètres de la mémoire du serveur d'application lors de son démarrage.

Et bien sûr, vous voulez utiliser les propriétés du système et non pom.xml configuration XML, pour des tâches telles que la mise en place des emplois Jenkins. Avec les propriétés du système, vous êtes plutôt plus flexible.

Voilà.

Questions connexes