Best Practice apache common cli - optionen für hilfe ausblenden

zer0zer0

Mitglied
hallo,

da es beim apache common cli project ( 1.2 ) leider kein forum gibt, nur ne mailing-list für die entwickler da, versuche ich mal hier meine frage zu stellen.

ich suche einen weg, wie ich bestimmte optionen ( die nur für debugging / teste zwecke dienen ) für die hilfe auszublenden, damit einfache benutzer des console-programms nicht optionen angezeigt bekommen, die für sie nicht relevant sind.

leider habe ich keine gute möglich gefunden, wie ich das machen könnte. hatte vlt. gehofft das es irgendwie unterstützt wird, scheint aber nicht der fall zu ( oder doch irgendwie? ).

hat jemand eine idee, bzw. sowas ähnliches auch schonmal gebraucht?

gruß,
robin
 
Zuletzt bearbeitet:

turtle

Top Contributor
Zum Ersten gibt es NATÜRLICH eine user mailing list.

Zum Punkt#2: Useage-Ausgabe mit Debugging-Optionen
In der Tat habe ich das noch nicht gemacht. Die Useage Zeilen werden mit der Klasse org.apache.commons.cli.HelpFormatter zusammen gebaut. Diese Klasse müsstest du erweitern/anpassen. Hab aber den Eindruck, das es mit dem Handling out-of-the-box gehen sollte,wenn du "nur" die richtigen Optionen angibst:
Java:
formatter.printHelp("myapp", header, options, footer, true);

Ich rate dir, und das ist ein grosser Vorteil von Open-Source-Software, in den Quellcode zu schauen und wenns nicht passt, zu ändern.
 
Zuletzt bearbeitet:

zer0zer0

Mitglied
ja ich hatte nur nicht den eindruck das es in den mailing-lists darum geht, so allgemeine und praktische fragen zum umgang mit dem tool zu stellen, sondern eher so framework-entwickler-unter-sich ;-)

das es mit dem Handling out-of-the-box gehen sollte,wenn du "nur" die richtigen Optionen angibst
problem dabei ist das ich alle optionen schon initial setze. sowas wie removeOption gibt es nicht.

deswegen werde das erstellen der optionen jetzt in zwei methoden splitten, damit ich explizit für die hilfe dann nur die optionen ausgeben, die nicht für entwickler gedacht sind. und für das parsen der optionen nehm ich die zusammengeführte menge aus beiden methoden. denke das müsste klappen, das ist recht simpel, bin nur erst nicht darauf gekommen, naja wie das nun manchmal so ist ;-) die "richtigen Optionen" ist da ein guter denkanstoß gewesen, danke dir.
 

turtle

Top Contributor
Ich sage NICHT, das es das Eleganteste ist, aber du musst doch "nur" zwei verschiedene Optionssätze bauen
Im Beispiel fehlt bei Debug-Optionen das Argument -g2
Java:
	public static void main(String[] args) {
		// normale Optionen
		Options lvOptions = new Options();
		lvOptions.addOption("h", "hilfe", false, "zeigt diese Hilfe an.");
		OptionGroup lvGruppe = new OptionGroup();
		lvGruppe.addOption(OptionBuilder.withLongOpt("gruppe1").withDescription("gruppe 1").create("g1"));
		lvGruppe.addOption(OptionBuilder.withLongOpt("gruppe2").withDescription("gruppe 2").create("g2"));
		lvGruppe.addOption(OptionBuilder.withLongOpt("gruppe3").withDescription("gruppe 3").create("g3"));
		lvOptions.addOptionGroup(lvGruppe);

		// debug-Optionen
		Options debugOptions = new Options();
		debugOptions.addOption("h", "hilfe", false, "zeigt diese Hilfe an.");
		OptionGroup debugOptionsGruppe = new OptionGroup();
		debugOptionsGruppe.addOption(OptionBuilder.withLongOpt("gruppe1").withDescription("gruppe 1").create("g1"));
		debugOptionsGruppe.addOption(OptionBuilder.withLongOpt("gruppe3").withDescription("gruppe 3").create("g3"));
		debugOptions.addOptionGroup(debugOptionsGruppe);
		
		HelpFormatter formatter = new HelpFormatter();
		formatter.printHelp("turtle", lvOptions);
		formatter.printHelp("turtleDebug", debugOptions);
		// usage: turtle
		// -g1,--gruppe1 gruppe 1
		// -g2,--gruppe2 gruppe 2
		// -g3,--gruppe3 gruppe 3
		// -h,--hilfe zeigt diese Hilfe an.
		// usage: turtleDebug
		// -g1,--gruppe1 gruppe 1
		// -g3,--gruppe3 gruppe 3
		// -h,--hilfe zeigt diese Hilfe an.
	}
 

zer0zer0

Mitglied
ja, würde es im prinzip auch lieber mit OptionGroups machen, sofern man auch in einer OptionGroup auch mehrere argumente einer gruppe "geparst" bekommt:

Java:
Options userOptions = new Options();
userOptions.addOption( "h", "hilfe", false, "zeigt diese Hilfe an." );
OptionGroup userGroup = new OptionGroup();

userGroup.addOption( OptionBuilder.withLongOpt( "gruppe1" ).withDescription( "gruppe 1" ).hasArg().create( "g1" ) );
userGroup.addOption( OptionBuilder.withLongOpt( "gruppe2" ).withDescription( "gruppe 2" ).hasArg().create( "g2" ) );
userGroup.addOption( OptionBuilder.withLongOpt( "gruppe3" ).withDescription( "gruppe 3" ).hasArg().create( "g3" ) );
userOptions.addOptionGroup( userGroup );

Options debugOptions = new Options();
debugOptions.addOption( "h", "hilfe", false, "zeigt diese Hilfe an." );
OptionGroup debugGroup = new OptionGroup();
debugGroup.addOption( OptionBuilder.withLongOpt( "gruppe1" ).withDescription( "gruppe 1" ).hasArg().create( "g1" ) );
debugGroup.addOption( OptionBuilder.withLongOpt( "gruppe3" ).withDescription( "gruppe 3" ).hasArg().create( "g3" ) );
debugOptions.addOptionGroup( debugGroup );

HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "turtle", userOptions );
formatter.printHelp( "turtleDebug", debugOptions );


userOptions.addOptionGroup( debugGroup );

formatter.printHelp( "both", userOptions );

CommandLineParser parser = new PosixParser();
String[] arguments = new String[]{
    "--g1", "bla",
    "--g3", "blubb"
};
CommandLine line = parser.parse( userOptions, arguments );

aber da kommt dann beim parsen:

[WR]org.apache.commons.cli.AlreadySelectedException: The option 'g3' was specified but an option from this group has already been selected: 'g1'[/WR]

ich habs jetzt mit der variante gemacht wie ich es beschrieben hatte, sieht in etwa so aus ( da kann der dann auch mehrere argumente dieser gruppierungen parsen ):
Java:
private Options createMergedOptions() {
    return this.createOptions( ( Option[] ) ArrayUtils.addAll( getDebugOptions(), getOptions() ) );
}

private Options createUserOptions() {
    return this.createOptions( getOptions() );
}

private Options createDebugOptions() {
    return this.createOptions( getDebugOptions() );
}

private Options createOptions( Option[] opts ) {
    Options options = new Options();
    for( Option opt : opts ) {
        options.addOption( opt );
    }
    return options;
}

private Option[] getDebugOptions() {
    return new Option[]{
        new Option( null, "app-dir", true, "application directory." ),
        new Option( null, "dir-has", true, "check whether a directory is set." )
    };
}
private Option[] getOptions() {
    return new Option[]{
        new Option( "s", "scan", false, "scan / rescan your directories." ),
        new Option( "v", "verbose", false, "log common events to console." ),
        new Option( null, "source-location", true, "current path location. REQUIRED!" ),
        new Option( null, "source-drive", true, "current drive identification label." )
    };
}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Apache Common CLI Allgemeine Java-Themen 4
V Für was benötigt man Apache Common Allgemeine Java-Themen 3
M Apache Proxy Weiterleitung auf Tomcat funktioniert nicht wie gewünscht Allgemeine Java-Themen 1
T Logging mit org.apache.logging.log4j Allgemeine Java-Themen 1
E Ersetzen eines Bildes in der Kopfzeile eines Word-Docx-Dokuments mit Apache POI XWPF Allgemeine Java-Themen 0
H Apache fop -- welche Möglichkeit gibt es um den Fortschritt anzuzeigen (Progressbar) Allgemeine Java-Themen 5
H Apache fop - OutOfMemoryError Allgemeine Java-Themen 10
B Schnittstelle zwischen MySQL und Apache Allgemeine Java-Themen 8
O Wie kann ich in Apache POI (Excel Dateien schreiben) Datumszellen in Excel erzeugen Allgemeine Java-Themen 6
F Fehlermeldung: java.lang.NoClassDefFoundError: org/apache/commons/net/ntp/NTPUDPClient Allgemeine Java-Themen 6
N Apache POI/ neue Reihe in Excel mit einem Button Allgemeine Java-Themen 2
I Apache POI Bild in Word ersetzen Allgemeine Java-Themen 15
O xlsx Datei auslesen mit POI Apache liest keine LEERZELLEN Allgemeine Java-Themen 6
O xlsx Datei auslesen mit POI von Apache wirft seltsamen Fehler. Allgemeine Java-Themen 11
L APACHE POI PIVOT TABELLEN Allgemeine Java-Themen 4
L Apache POI Datenquelle Allgemeine Java-Themen 1
S Apache POI Filtern nach bestimmten Kriterium Allgemeine Java-Themen 1
L JavaFX JavaFX Chart in Apache Poi Excel Datei Allgemeine Java-Themen 2
F Operationen/Methoden einen WebService im Browser mit Apache Axis aufrufen Allgemeine Java-Themen 4
F Input/Output NullPointerException, aber wieso? [Apache POI] Allgemeine Java-Themen 11
F Input/Output NullPointerException with Apache POI Allgemeine Java-Themen 7
E HILFE !! Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/io/FileUtils Allgemeine Java-Themen 4
J Apache POI - No external workbook with name Allgemeine Java-Themen 5
M Suche aktuelle Apache Poi Bibliothek zum Einbinden in mein Programm Allgemeine Java-Themen 2
MiMa Apache Tika: Warnmeldungen und Beispielcode Allgemeine Java-Themen 12
X Performance für Tomcat / Apache optimieren Allgemeine Java-Themen 2
G Ant Probleme bei einer Installation die Apache ant+ivy verwendet Allgemeine Java-Themen 14
FrittenFritze Swing Apache Batik - Zoom an einer bestimmten Stelle Allgemeine Java-Themen 4
K Apache poi: Deprecated getCellType Allgemeine Java-Themen 3
J Apache POI Excel- Blattschutz aufheben Allgemeine Java-Themen 2
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T Geschlossen: Apache POI - Excel einlesen Allgemeine Java-Themen 0
K Apache POI Word Tabelle Zellen verbinden Allgemeine Java-Themen 4
K Apache POI Word Tabelle Spaltenbreite festlegen Allgemeine Java-Themen 7
K Apache POI Word bestimmte Textstellen bearbeiten Allgemeine Java-Themen 1
R Apache POI XSSF Allgemeine Java-Themen 2
E Apache POI Powerpoint Verlinkungen ändern Allgemeine Java-Themen 4
T xls-Datei per Apache Commons CsvParser einlesen UTF-8 Zeichen russische Zeichen Allgemeine Java-Themen 2
S Eclipse Apache Camel FTP: Fehlerbehandlung, wie? Allgemeine Java-Themen 2
H Excel Datei einlesen mit Apache POI Allgemeine Java-Themen 1
GianaSisters Apache POI - Hyperlink erstellen Allgemeine Java-Themen 0
reibi Apache PDFBox Allgemeine Java-Themen 0
T Mit Apache Poi Daten aus einer Excel Tabelle kopieren und in Word einfügen Allgemeine Java-Themen 1
C Was bekomme ich eine Nullpointerexception? (Apache POI) Allgemeine Java-Themen 3
S OOP Apache Commons Math - Verwendung von Genetics - Wie werden Daten in Chromosomen gespeichert? Allgemeine Java-Themen 4
H Apache POI HSSF - Farbe/Rahmen etc. ohne Style-Vorlage? Allgemeine Java-Themen 4
E Apache POI-Datei lesen und umschreiben Allgemeine Java-Themen 8
G Input/Output Apache POI Excel Allgemeine Java-Themen 5
L Apache CLI: Args[] übergeben Allgemeine Java-Themen 3
P docx mit Apache POI auslesen, verändern und zurückschreiben Allgemeine Java-Themen 2
N Applet Apache Poi Wert einer Formel ausgeben Allgemeine Java-Themen 5
J Webstart (auf Apache) jnlp wird nicht geladen Allgemeine Java-Themen 2
S HTTP Apache HTTPClient Problem Allgemeine Java-Themen 4
R org.apache.http kompletter Internetausfall Allgemeine Java-Themen 7
J xlsx Dateien lesen OHNE apache POI Allgemeine Java-Themen 6
V Apache POI Excel Datum auslesen Allgemeine Java-Themen 6
V Apache POI Excel Sheet auslesen Allgemeine Java-Themen 5
B Problem mit RegEs und org.apache.regexp.RE Allgemeine Java-Themen 5
T Apache POI Export EXCEL - [Zahlen-Werte] Allgemeine Java-Themen 1
Landei Erfahrungen mit JavaConfig oder Apache Commons Config? Allgemeine Java-Themen 3
J Apache FTPClient upload Allgemeine Java-Themen 3
A Apache License, Version 2.0 Allgemeine Java-Themen 7
S Bzip2 apache commons-compress Allgemeine Java-Themen 3
Chris81T Apache FOP 0.20-5 mit JNI von C++ Code aufrufen Allgemeine Java-Themen 8
C Apache POI(HSSF) Conditional Formatting Allgemeine Java-Themen 3
G Apache soll mit SVN zusammenarbeiten Allgemeine Java-Themen 3
E Apache Commons - PropertyConfiguration - Autosave Allgemeine Java-Themen 2
G Servlet über apache Tomcat ansprechen Allgemeine Java-Themen 6
alexpetri DirectoryWalker apache.commons Allgemeine Java-Themen 3
S Apache Commons Net geht nicht Allgemeine Java-Themen 5
G mit Apache-Jakarta-POI auch Graphiken aus Excel einlesen? Allgemeine Java-Themen 3
T Apache Lucene Allgemeine Java-Themen 2
Q Ant und org.apache.log4j.xml.DOMConfigurator Problem Allgemeine Java-Themen 2
M Java Webserver - Tomcat alleine oder zusammen mit Apache? Allgemeine Java-Themen 3
B Java FTP (common net - user anlegen) Allgemeine Java-Themen 2
E JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C Allgemeine Java-Themen 2
F Dateien ins Array lagern und Optionen zur Auswahl, Allgemeine Java-Themen 5
H java.util.logging Formatter Optionen setzen Allgemeine Java-Themen 2
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
G JVM mit Optionen aus JVM starten Allgemeine Java-Themen 2
meez VM-Optionen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben