[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:
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:
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:
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 :
Citation:
"-a" is not a valid option
Comment lui faire comprendre que les options en trop sont à mettre dans arguments ?
Merci d'avance !