Projekt: Jd Arguments

Eine Bibliothek, um das Argument-String-Array, das man in der main()-Methode bekommt, analysieren zu können.

In der main()-Methode, muss dieses Array einem erzeugten ParameterModel zugefügt werden. Danach kann mit dem Model gearbeitet, z.B. initialisiert, werden:

1
2
    getParamModel().populateModel(args);
    doInitWithParams(getParamModel());

Der Ansatz ist die Definition eines Models, das dann gegen das Array geprüft wird. Das Model besteht aus Definitionen der Parameter, es gibt einige generische vordefinierte Parameter:

1
2
3
    Help = new ParamDef("--", "help", "-", "?", ParamType.Bool, "Print Help");
    Verbose = new ParamDef("--", "verbose", "-", "v", ParamType.Bool, "print infos during processing");
    Silent = new ParamDef("--", "silent", "-", "s", ParamType.Bool, "print nothing at all.");

Jede Definition besteht dann aus einer langen und einer Kurzform mit einem Typ (z.b. Boolean / Flag) und einer Beschreibung.

Ohne weitere Konfiguration kann man bei Benutzung der Api das Programm aufrufen mit:

1
    java -jar myjar.jar -?

oder

1
    java -jar myjar.jar --help

Und bekommt eine Liste der möglichen Parameter angezeigt.

Wenn man nun eigene Parameter verwenden will, muss man das Model um die ParamDefinitionen erweitern, z.B.:

1
2
3
4
    public enum CmdlineParams {
        NODOCKER
        // ggf. weitere
    }

Nun kann man einfach eine ParamDefinition erzeugen:

1
    ParamDef nodockerDef = new ParamDef("", NODOCKER.name(), "-", NODOCKER.name().substring(0, 1), ParamType.Bool, "Kein Docker benutzen.");

Diese muss dann zum benutzten Model zugefügt werden (über eine HashMap der Parameter):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
    ParamModel PARAM_MODEL = new ParamModel();
    EnumHashMap<Enum<?>, ParamDef> enumDefmap = new EnumHashMap<>();
    enumDefmap.put(nodockerDef.getName(), nodockerDef);
    PARAM_MODEL.setDefinition(enumDefmap);

    public static void main(String[] args) throws SQLException, IOException {
        ...
        getParamModel().populateModel(args);
        doInitWithParams(getParamModel());
    }

Der Aufruf - wenn man kein Docker benutzen will - ist dann:

1
    java -jar MyApp.jar -n