2011-04-05 4 views
2

J'ai un programme de ligne de commande java existant, qui prend une bazillion d'arguments et les analyse en utilisant un excellent args4j. Je veux maintenant faire un mojo plugin maven qui va exécuter le code Java contenu dans cette application. Pour l'instant, j'ai essayé la méthode de base: la réplication de chaque argument de ligne de commande dans un paramètre mojo. Je trouve cela exceptionnellement ennuyeux et sujet aux erreurs, car les annotations maven mojo javadoc sont beaucoup moins complètes et intégrées que les annotations args4j. Donc, en utilisant maven 3, y a-t-il un meilleur moyen d'exécuter mon exécutable en tant que mojo maven? Oh, s'il vous plaît, ne me parlez pas de exec-maven-plugin, car je trouve cela trop limité dans ce cas (mon exécutable devra être exécuté en utilisant une combinaison de paramètres de projet et ceux du profil utilisateur, et je suppose que j'appelle simplement maven-exec- le plugin ne fera pas l'affaire).Comment regrouper un exécutable java existant dans un mojo maven

+0

De combien d'arguments parlons-nous? – khmarbaise

+0

@khmarbaise entre 10 et 20 – Riduidel

+0

Je pense que beaucoup de ces paramètres ont des valeurs par défaut? Je connais beaucoup de plugins qui ont plus de paramètres. – khmarbaise

Répondre

1

Bien que @khmarbaise's answer est parfaitement vrai d'un point de vue général, je voudrais l'étendre un peu. Mon application de ligne de commande autonome utilise args4j, mais je pense que le processus peut être assez bien copié en utilisant Commons CLI ou (encore plus) JCommander qui repose sur les mêmes annotations en ligne de commande dans un bean principal. Donc, ce que j'ai fait est un mojo maven qui, en utilisant l'introspection, obtient la liste des principaux arguments de la ligne de commande du bean. Pour chacun de ces arguments, j'attends qu'une propriété soit présente dans les informations de projet/paramètres. Si cette propriété est présente, je construis une fausse ligne de commande en utilisant l'option et enfin associée.

Une fois que j'ai parcouru toutes les options (stockées en tant que propriétés maven), je peux utiliser args4j pour remplir mon bean, puis exécuter ce bean en utilisant sa commande principale.

Je pense que cette approche pourrait être assez bien généralisée, à condition que votre application ait un ensemble de drapeaux et une méthode run() sans-args.

2

La seule façon est via les paramètres de mojo parce que c'est la manière de Maven en particulier pour Maven Plugins. Ce qui m'a manqué pour définir un fichier de propriétés qui contient la configuration comme une alternative aux paramètres de mojo

Mais je pense que pour Maven Plugins, la meilleure pratique est d'avoir des paramètres Mojo.

+0

Je suis désolé de ne pas accepter votre réponse, mais j'ai trouvé une meilleure solution et l'expliquera dans une réponse ultérieure. S'il vous plaît excusez mon comportement. – Riduidel

Questions connexes