IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[Args4j] Double parsing, est-ce possible ?


Sujet :

API standards et tierces Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut [Args4j] Double parsing, est-ce possible ?
    Bonjour,

    J'utilise Args4j pour parser les paramètres en entrée de mon application.

    Cependant, j'ai un petit soucis.

    En gros, j'ai un seul point d'entrée pour deux actions différentes puisque mes classes Java sont mises dans un seul JAR (ça m'est imposé).

    Donc, avant je pouvais faire :
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java mon.package.MonActionA -a param1 -b -c 123
    java mon.package.MonActionB -c bqsf -d -f

    Maintenant, je devrais faire quelquechose comme ceci :
    Code Batch : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    java -jar mon-jar.jar --ActionA -a param1 -b -c 123
    java -jar mon-jar.jar --ActionB -c bqsf -d -f

    En fait, ce que je voudrais faire est assez simple :
    Code Java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    import java.util.ArrayList;
    import java.util.List;
     
    import org.kohsuke.args4j.Argument;
    import org.kohsuke.args4j.CmdLineException;
    import org.kohsuke.args4j.CmdLineParser;
    import org.kohsuke.args4j.ExampleMode;
    import org.kohsuke.args4j.Option;
    import org.kohsuke.args4j.spi.BooleanOptionHandler;
     
    /**
     * 
     * @author BiM
     *
     */
    public class ActionChoice
    {
    	private CmdLineParser parser;
     
    	@Option(name="--ActionA", required=false, handler=BooleanOptionHandler.class,)
    	private Boolean actionA = Boolean.FALSE;
     
    	@Option(name="--ActionB", required=false, handler=BooleanOptionHandler.class)
    	private Boolean actionB = Boolean.FALSE;
     
    	@Argument
    	private List<String> arguments = new ArrayList<String>();
     
    	/**
             * @param args
             */
    	public static void main(String[] args)
    	{
    		new ActionChoice(args);
    	}
     
    	private ActionChoice(String[] args)
    	{
    		parser = new CmdLineParser(this);
     
    		try
    		{
    			parser.parseArgument(args);
    			choice(arguments);
    		}
    		catch (CmdLineException e)
    		{
    			System.err.println(e.getMessage());
    			System.err.println("java -jar mon-jar.jar [options...] arguments...");
    			parser.printUsage(System.err);
    			System.err.println();
    			System.err.println("Exemple : java -jar mon-jar.jar"+parser.printExample(ExampleMode.ALL));
    		}
    	}
     
    	private void choice(List<String> arguments) throws CmdLineException
    	{
    		if (create.equals(send))
    		{
    			throw new CmdLineException(parser, "Un seul des deux paramètres doit être initialisé");
    			if (actionA)
    				new ActionA(arguments);
    			else
    				new ActionB(arguments);
    		}
    	}
    }

    En gros, cela revient à dire : je parse mes premiers paramètres et je les mets dans les options actionA et/ou actionB puis je met le reste dans les arguments que je passe à mon Action A ou B qui elle même parse ces arguments.

    Mais j'ai cette erreur :
    "-a" is not a valid option
    Comment lui faire comprendre que les options en trop sont à mettre dans arguments ?

    Merci d'avance !

  2. #2
    BiM
    BiM est déconnecté
    Expert confirmé
    Avatar de BiM
    Femme Profil pro
    Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT
    Inscrit en
    Janvier 2005
    Messages
    7 796
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultante/Formatrice BIRT & Ingénieur Java/J2EE/GWT

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7 796
    Par défaut
    Bonjour,

    J'ai finalement opté pour un parsing un peu modifié. En gros, je ne parse que le premier argument avec la première classe et en fonction de la valeur du premier argument, je renvoie vers une deuxième classe qui parse le reste ou bien le help des commandes

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 02/02/2011, 16h05
  2. Réponses: 1
    Dernier message: 25/04/2009, 19h47
  3. Réponses: 7
    Dernier message: 06/04/2009, 16h43
  4. [Conception] double order by ? est-ce possible ?
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/06/2006, 16h34
  5. Réponses: 8
    Dernier message: 13/12/2005, 14h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo