Ich bin dabei, einige Legacy-Code zu migrieren, um weniger veraltete Warnungen von 3rd -Party-Bibliotheken enthalten. Für Apache commons-cli
Bibliothek (Version: 1.3.1 ) entdeckte ich in der official JavaDoc dass GnuParser
veraltet und DefaultParser
sollte stattdessen verwendet werden:Warum werden die erkannten CLI-Optionen bei der Verwendung von DefaultParser anstelle von GnuParser unterschieden?
@deprecated seit 1.3, verwenden Sie die
{@link DefaultParser}
statt
Das folgende Code-Snippet funktioniert jedoch nicht mehr wie erwartet:
Options options = new Options();
Option optionGSTypes = new Option(
"gst","gs-types", true,
"the supported types, comma-separated: article, category, template, all");
optionGSTypes.setArgs(3);
optionGSTypes.setValueSeparator(',');
options.addOption(optionGSTypes);
// ... other options
// parsed option values are correct, yet this is deprecated
CommandLineParser parser = new GnuParser();
CommandLine commands = parser.parse(options, args);
// ... interpret parsed 'commands' and related actual values via CLI
Beachten Sie, dass setValueSeparator(',')
wird hier verwendet, um ein benutzerdefiniertes Trennzeichen zu definieren ,
, um die CLI zu aktivieren, um mehrere gst-Typen zu unterstützen (siehe Code-Snippet).
Wie geben Sie die folgenden Programmargumente verwendet, um die CLI zu nennen:
java -jar MyCLI.jar -gst category -gsd 4
Offensichtlich einige andere Argumente auch hinzugefügt wurden nach dem gsd Parameter könnten. Die erwartete und richtig analysiert Optionen für den Separator lose Verwendung des "gst" Argument sind (via GnuParser
):
- "Kategorie" (und sonst nichts)
Allerdings, wenn ich ändern meinen Code und wechseln auf den empfohlenen Parser über:
CommandLineParser parser = new DefaultParser();
der resultierenden, analysiert Werte falsch als erkannt werden:
- "Kategorie"
- "-GSD"
- "4"
Hinweis: benutzte ich einen Debugger das falsche Ergebnis des Parsing-Prozess über Inspektion des Feldes values
in org.apache.commons.cli.Option
zu überprüfen über die zurückgegebene commands
Variable.
Meine Erwartung wäre, dass die interne Änderung des Parsers nicht unterschiedliche Ergebnisse ergeben, da dies bestehenden Code bricht. Hat jemand jemals das gleiche Verhalten bei Apache Commons-CLI beim Wechsel zu DefaultParser
und mehreren Optionswerten und benutzerdefinierten Trennzeichen festgestellt?
Gibt es einen Unterschied in der Konstruktion/Verwendung von DefaultParser
, die ich hätte übersehen können?
Das ist eine ziemlich tiefe Frage und es klingt wie ein Bug. Vorschlag: Sie finden eher eine sachkundige Antwort auf der Commons-Mailing-Liste: [email protected] –
ist die "gsd" -Option auch auf den Optionen konfiguriert? – jtahlborn
Ja, ist es. Ich habe nur das Code-Fragment gekürzt. rate mal was: es funktioniert, wenn 'GnuParser' zuständig ist: Sowohl gst als auch gsd werden so erkannt, wie ich es erwarten würde. – MWiesner