Erste Schritte Variable Parameter an JAR übergeben

sinky

Mitglied
Hallo Leute,
ich stehe vor dem Problem Parameter an ein JAR zu übergeben. Eigendlich ist das garnicht das Problem, sondern vielmehr wie die Parameter richtig ausgewertet werden.

Code:
// Bsp. 1
java -jar prog.jar param1 param2

Obriges Beispiel funktioniert solange gut bis jemand die beiden Parameter vertauscht. Daher möchte ich gerne die Parameter wie folgt eingeben können:
Code:
// Bsp. 2
java -jar prog.jar -p param1 -r param2
oder
Code:
// Bsp. 3
java -jar prog.jar --port=param1 --root=param2

Damit soll gewährleistet werden dass auch folgendes funktioniert.
Code:
// Bsp. 4
java -jar prog.jar --root=param2 --port=param1

Da ich nur absolute Grundkenntnisse besitzte, weiß ich nicht wie das überhaupt logisch ablaufen kann.
Beim zweiten Beispiel sind es ja praktisch 4 Parameter, von denen einer die Beschreibung des nächsten ist. Und beim dritten, zwei parameter, die zuerstmal auseinander gepflückt werden müssten.

Hatt jemand ne Idee, wie diese Art der Parameterübergabe heist? Ist finde ebei google nichts zum Thema "Variabel Parameter". Oder gibts für so einen Anwendungszweck schon Codebeispiele?

gruß Sinky
 

Andi_CH

Top Contributor
@08/15 - du solltest mir noch erklären was deine Antwort mit der Frage zu tun hat - Was hat Apache mit der Auswertung von Parametern zu tun?

@Sinky - meinst du auswerten im Code? Also wie du im Main die Paramter auswerten willst?

Das ist doch kein Problem. Das ist die gute Nachricht - die Schlechte ist: Den Code musst du schon selber schreiben! Setz dich zuerst vor ein Blatt Papier und schreib dir dir auf was für Parameter alle vorkommen können, mit welchen Notationen zu rechnen ist und beginne danach mit codieren.

Grundsätzlich:
Der erste Vorschlag ist nicht sehr gut um nicht zu sagen unbrauchbar - du kannst nicht erkennen was für ein Parameter da steht.

Aus der Unix/Linux welt sind die Notationen
Code:
-p blabla
und
Code:
--p=blabla
bekannt, wobei da verschieden Fälle funktionieren müssen um die Leute nicht all zu sehr zu nerven:

-p blabla
--param=blabla
--param = blabla
--param= blabla
--param =blabla

Implementiere alle Muster, wenn du ein Programm schreiben willst, dass sich so verhält wie die meisten anderen Progrämmchen bzw Kommandos

Ach ja, folgendes muss natürlich auch gehen ;-)
-h
-?
--help

Wie packt man das in etwa an? (Das Folgende ist möglicherweise unvollständig und noch fehlerhaft!)

Wie gesagt erst ist mal paperwork gefragt:

Die Parameter kommen bekanntlich in einem Sring[] daher - arbeite der Reihe nach alle Felder durch

Wenn der String im Feld mit einem - beginnt, merk dir was es war (Thema statemachine) und lies das nächste Feld welches den Wert beinhaltet (das darf NICHT mit einem - beginen, sonst -> Fehler.

Wenn es mit zwei - beginnt schau ob ein = drin steckt, splite beim = und das was nach dem = kommt ist der Wert

Wenn nach dem = nichts kommt steckt der Wert im nächsten Feld, das aber nicht mit einem- beginnen darf, sonst -> Fehler

Wenn es mit zwei - beginnt und kein = drin steckt nimm das nächste ( da muss ein = drin stecken)
Wenn nach dem = noch etwas kommt, ist das der Wert
Wenn nicht, steckt der Wert im nächsten Feld, das dann aber nciht mit einem - beginnen darf, sont -> Fehler

....

Also denk gut nach bevor du mit programmieren beginnst. Wie gesagt zuerst paperwork.
 
Zuletzt bearbeitet:
B

Benutzer 08/15

Gast
@08/15 - du solltest mir noch erklären was deine Antwort mit der Frage zu tun hat - Was hat Apache mit der Auswertung von Parametern zu tun?

Ääääh, hast du den Link überhaupt angeschaut?????? Ich glaube nicht!

The Apache Commons CLI library provides an API for parsing command line options passed to programs. It's also able to print help messages detailing the options available for a command line tool.

Das ist das, was Sinky möchte. (Und noch ein bisschen mehr!)
 

Andi_CH

Top Contributor
Hm der Link: - ok, er bechreibt nicht nur die Formate sondern macht noch "Werbung" für ein Library. Hab ich übersehen, aber

Die Frage war:
Code:
Eigentlich ist das gar nicht das Problem, sondern vielmehr wie die Parameter richtig ausgewertet werden.

Die Betonung ist auf "wie auswerten" und nicht auf "welche Formate sind möglich" und so sieht halt die Seite auf der ersten Blick aus.

Ob ich allerdings eine Library einsetzen will ist mehr als fraglich, denn so ein Parserchen habe ich schneller geschrieben als eine API Spezifikation durchgelesen und der Aufwand den die üblichen "Features" einer solchen Software mit sich bringen ist auch nicht zu unterschätzen.

("Feature" ist ein Synonym für unterwartete Verhaltensweisen und Bugs)

Dazu kommt, dass ich KEINE Apache Libraries installiert weil ich den Apache nicht brauche - ich schreibe kein Websoftware, also müsste ich die erst suchen.

Interessant ist, dass ich gerade letzte Woche genau das gemacht habe - einen kombinierten Parameter und Config-File-Parser geschrieben - brauchte insgesamt keine 2 Stunden.
 
Zuletzt bearbeitet:

sinky

Mitglied
@Andi_CH
Also ich hätte mich wirklich nur auf eine Schreibweise -p oder --port= (exakt so) geschränkt. Alles andere sollte in Ausgabe der Hilfe ende. Ging mir nur um die variable Reihenfolge der Parameter.

Warscheinlich wäre es noch am besten alle Parameter in einem String zusammen zu setzten und per RegEx auf korekte Formatierung zu überprüfen. Gerade weil ich halt einen Pfad per Parameter übergeben möchte und dann ein Leerzeichen im Pfad neue Parameter generieren würde.

Code:
... prog.jar -p 8081 -r "./unterordner/"
... prog.jar -r "./unterordner/" -p 8081

-p ([0-9]{1,5}) -r "(.*)"|-r "(.*)" -p ([0-9]{1,5})

Trifft auf beides zu. Somit musst nun nurnoch die inhalte selbst überprüft werden.

@08/15 schaue ich mir mal an, vlt. ist es ja doch ganz nützlich.
 

Andi_CH

Top Contributor
Ok - dass Regex ein rotes Tuch für mich ist (viel zu komplizert, widerspricht dem Motto KISS) ist ja nicht neu.

Warum machst du " in die Parameter? Das ist sehr unüblich, aber was solls - so lange es nicht Pflicht ist.

Programmieren sollte man immer sehr tolerant, wenn es um Auswertungen geht - das vereinfacht das Leben des Supports ;-)

--

Wer nicht weiss was KISS heist: "Keep it simple otherwise you're stupid"
 
M

maki

Gast
sinky,

den Link von 08/15 solltest du dir auf jedenfall ansehen, hast du offensichtlich nicht gemacht und beantwortet genau deine Frage, dann müsstest du auch nicht mit RegEx rumspielen.

Unter "usage guide" kannst du dir Beispiele ansehen: Commons CLI - Usage Scenarios


@Andi_CH
Hopfen & Malz ist offensichtlich schon verloren...
 

sinky

Mitglied
Also mein Problem ist bisher, ich habe von Java keine Ahnung. Habe bisher nur mit PHP zu tun gehabt.

Ich hab hier die Source eines äußerst simplen Webservers (Java Mini Web Server) und wollte den etwas nach meinem Geschmack "verbessern" und privat nutzen.
Bisher habe ich das Directory Listing angepasst, Dateigrößen auslesen lassen und einen "Parent Directory" Link eingefügt.
Nun wollte ich halt den DefaultPort und das RootDir per Parameter angeben können.

Auf Grund der bisher fehlenden Kenntnisse, ist es für mich schwer das CLI einzubinden. Klingt aber wirklich sehr nach dem was ich brauchen könnte. Hier jetzt um Hilfe zu bitte wie ich das CLI.Jar in mein Projekt einbinde ist warscheinlich nicht so gut.

Nun zu den Antworten ;-)
@Andi_CH: die " sind dazu dass durch ein evtl. Leerzeich im Pfad, der Rest nicht in einem neuen Parameter landet.
@maki: Ich hatte es mir nach dem ich den Beitrag geschrieben habe angesehen. Problem ist wie gesagt nur, das einbinden von externen Libs. java.lang.StringBuffer hab ich importiert, die ist ja auch schon in Java drin.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
KogoroMori21 Variable im Parameter und Ohne Java Basics - Anfänger-Themen 5
S Variable Parameter Java Basics - Anfänger-Themen 5
X Variable Parameter in Konstruktor Java Basics - Anfänger-Themen 7
H B-Baum: Knoten Position als Parameter oder als Variable im Objekt? Java Basics - Anfänger-Themen 4
G mittels Parameter Variable identifizieren Java Basics - Anfänger-Themen 6
O Variable Zimmergrößen per scanner einlesen Java Basics - Anfänger-Themen 5
richis-fragen String("AT") als StringObject-Variable deklarieren Java Basics - Anfänger-Themen 14
M Länge eines Arrays als Variable speichern möglich? Java Basics - Anfänger-Themen 14
R Liste in Variable speichern Java Basics - Anfänger-Themen 6
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
E Variable von 1. Fenster an 2. Fenster übergeben. Java Basics - Anfänger-Themen 7
T Variable in Schleife deklarieren, Speicherplatz, Garbage Collector Java Basics - Anfänger-Themen 10
T Datum als Variable wert Java Basics - Anfänger-Themen 4
G Variable aktualisiert sich nicht in rekursiver Methode Java Basics - Anfänger-Themen 4
R Compiler-Fehler Variable wird nicht gefunden bzw. erkannt? Java Basics - Anfänger-Themen 2
Say super.methode / super.variable und super(variable) Java Basics - Anfänger-Themen 2
M variable in anderer funktion aufrufen Java Basics - Anfänger-Themen 10
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
T Variable von Objekten in einer Methode überprüfen Java Basics - Anfänger-Themen 26
U Wie mache ich die Variable xyz eindeutig/unique? Java Basics - Anfänger-Themen 20
JordenJost char variable funktioniert irgendwie nicht a+b ergibt nicht à Java Basics - Anfänger-Themen 4
M Variable Felderanzahl Java Java Basics - Anfänger-Themen 10
T Variable durch Action Listener ändern Java Basics - Anfänger-Themen 2
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
M Variable in einer Schleife initialisieren Java Basics - Anfänger-Themen 46
W Schleife und einmal variable++ zu viel Java Basics - Anfänger-Themen 20
M String mit Variable vergleichen Java Basics - Anfänger-Themen 9
M Methoden Wert einer Variable geht verloren? Java Basics - Anfänger-Themen 6
G variable kopieren bzw. woanders benutzen Java Basics - Anfänger-Themen 6
Ameise04 Variablen Inhalt einer Variable im Code verwenden? Java Basics - Anfänger-Themen 9
J Double Variable und Addition Java Basics - Anfänger-Themen 2
I Variable innerhalb Methode: Local variable test defined in an enclosing scope must be final or effectively final Java Basics - Anfänger-Themen 3
Vivien Auf eine Variable von einer anderen Klasse aus zugreifen Java Basics - Anfänger-Themen 3
H Datentypen Wertebereich von <Klassenname> <Variable> Java Basics - Anfänger-Themen 12
M Private Variable Java Basics - Anfänger-Themen 2
idontknow707 Matrix nach z.B. Variable durchsuchen Java Basics - Anfänger-Themen 4
T Variable in for Schleife ansprechen ohne Array ? Java Basics - Anfänger-Themen 25
s.marcii Modulo in der Variable einsetzen - ist das möglich? Java Basics - Anfänger-Themen 2
N Variable aus anderen Variablen in statischer Klasse berechnen/abspeichern? Java Basics - Anfänger-Themen 4
Y Wie kann ich die Variable in der Try Catch returnen? Java Basics - Anfänger-Themen 3
K Übergabe des Wertes einer Variable aus main() in eine Klassenmethode Java Basics - Anfänger-Themen 8
B Inkrement von Variable Java Basics - Anfänger-Themen 8
V Variablen statische Variable einer Objektvariable zuordnen Java Basics - Anfänger-Themen 3
L Variable von einer Methode zu einer anderen Methode inkl. einer "Zwischenmethode" Java Basics - Anfänger-Themen 1
J JTextField Bezeichnung als Variable Java Basics - Anfänger-Themen 3
N Wie kann ich eine meine Variable Final machen? Java Basics - Anfänger-Themen 1
NeoLexx Variable für Array wird nicht korrekt übergeben Java Basics - Anfänger-Themen 45
M Enum-Variable HashMap zuweisen Java Basics - Anfänger-Themen 5
H Variable um 1 erhört ausgeben Java Basics - Anfänger-Themen 4
V Erste Schritte Eine Array-Variable mit Benutzereingaben befüllen Java Basics - Anfänger-Themen 3
J Fehlermeldung unklar. non-static variable player0 cannot be referenced from a static context Java Basics - Anfänger-Themen 4
P non-static variable cannot be referenced from a static context Java Basics - Anfänger-Themen 6
A Wie zwei zahlen in einer Variable speichern? Java Basics - Anfänger-Themen 7
W Problem mit dem Wert von boolean-Variable Java Basics - Anfänger-Themen 3
M Input/Output JTextField Eingabe in String Variable speichern Java Basics - Anfänger-Themen 15
A Kann man eine Methode als Variable speichern und danach noch verändern? Java Basics - Anfänger-Themen 6
L cannot find symbol variable Kon Java Basics - Anfänger-Themen 8
C Statischer Typ aber Variable nicht statisch? Java Basics - Anfänger-Themen 5
H Variable.methode aufstellen, verstehen Java Basics - Anfänger-Themen 2
R Warnung, wenn eine Variable eingegeben wird Java Basics - Anfänger-Themen 6
S Variable einscannen Java Basics - Anfänger-Themen 30
N Best Practice Rückgabe eines Terminal Befehls in eine Variable speichern Java Basics - Anfänger-Themen 27
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
J Input-Variable nicht sichtbar Java Basics - Anfänger-Themen 2
L Warum ist Variable null? Java Basics - Anfänger-Themen 3
E Variable (Vektor) in andere Methode übergeben Java Basics - Anfänger-Themen 4
A OOP Variable in anderer Klasse durch Methode aufrufen und einer anderen Variable gleichsetzen Java Basics - Anfänger-Themen 2
D Datei auslesen & Werte in Variable speichern Java Basics - Anfänger-Themen 12
P if - Statement erkennt variable nicht. Java Basics - Anfänger-Themen 12
J Ungewollte Wertveränderung einer Variable Java Basics - Anfänger-Themen 9
R Variablen Variable an FXML-Controller übergeben Java Basics - Anfänger-Themen 4
J Zugriff auf Variable in anderem Programm Java Basics - Anfänger-Themen 5
R variable istpositiv might not have been initialized Java Basics - Anfänger-Themen 2
A Methodenname aus variable Java Basics - Anfänger-Themen 2
L Variable aus einer Klasse in einer anderen Klasse nutzen Java Basics - Anfänger-Themen 6
P Methode soll Variable einer anderen Klasse ändern. Wie? Java Basics - Anfänger-Themen 1
Hanschyo Variable nicht initialisiert Java Basics - Anfänger-Themen 6
deatzi Variable aus If Abfrage später nutzen Java Basics - Anfänger-Themen 4
L Variable in If-Statement initialisieren Java Basics - Anfänger-Themen 4
C return kann nicht auf variable zugreifen Java Basics - Anfänger-Themen 26
S Wie erstelle ich eine Vorbedingung für eine Variable einer Methode ? Java Basics - Anfänger-Themen 5
S Warum kann ich nicht mehr als eine Variable in einer for Schleife deklarieren ? Java Basics - Anfänger-Themen 1
V Warum speichert meine String-Variable nummerische Werte? Java Basics - Anfänger-Themen 3
J Wert eines Arrays einer Variable zuweisen, sobald der Wert eines anderen Arrays eintritt Java Basics - Anfänger-Themen 2
DaCrazyJavaExpert Compiler-Fehler Variable nicht mit null initialisiert, trotzdem: NullPointerException Java Basics - Anfänger-Themen 28
A Erste Schritte Mein Programm erkennt die variable EinAus.readInt nicht Java Basics - Anfänger-Themen 15
Aprendiendo [JAVA-Syntax] (int... variable) bei einem Konstruktor Java Basics - Anfänger-Themen 8
F Variablen If else: Einer Variable einen Wert hinzufügen oder so? Java Basics - Anfänger-Themen 6
Aprendiendo Interpreter-Fehler "non-static variable this cannot be referenced from a static context" Java Basics - Anfänger-Themen 2
D Aufruf einer statischen Variable Java Basics - Anfänger-Themen 1
F [OOP] Auf eine Variable aus meherer Klassen zugreifen Java Basics - Anfänger-Themen 22
D Einer Variable automatisch Zahlen hinzuaadieren Java Basics - Anfänger-Themen 3
BadBat Klassen instanz als variable + methodenaufruf Java Basics - Anfänger-Themen 4
BadBat Variablen Eine Variable mit 2 Typen Java Basics - Anfänger-Themen 38
S Cannot find symbol (symbol ist eine Variable) Java Basics - Anfänger-Themen 13
K String einlesen und als Variable speichern Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben