Zum Inhalt springen

Mit Java Umgebungsvariablen erzeugen


Empfohlene Beiträge

Geschrieben (bearbeitet)

Hallo Leute,

nach einem halben Tag googlen gestern und der ziemlich zermürbenden Suche in der Java Hilfe, würd ich einfach gerne mal wissen, wie man mit Hilfe von Java Umgebungsvariablen erzeugt.

Hintergrund ist ein Programm innerhalb meiner Firma, das ersetzt werden muss, auf dessen Basis aber Umgebungsvariablen gesetzt wurden, die später in Batch dateien verwendet werden.

Beispiel:

Umgebungsvariablen:

"t1=DE"

"t2=location"

"t3=department"

usw.

Dass man mit (Achtung code!) System.getenv() das gesamte Environment auslesen kann ist toll, hat mir auch wirklich weitergeholfen, nur andersherum habe ich bisher von Runtime.getRuntime().exec("cmd /c set t1=DE") bis System.setProperty alles ausprobiert, jedoch hat nichts weitergeholfen.

MfG Basti

Bearbeitet von Wegginho
vertippt!
Geschrieben
Runtime.getRuntime().exec("cmd /c set t1=DE")

Wenn du Variablen in einer CMD setzt, gelten die nur für die CMD-Sitzung.

Wenn es sich nur um Windowsrechner handelt, würde ich einfach setx ausführen.

Ob es einen plattformübergreifenden Weg gibt, weiß ich nicht.

Geschrieben

Ja, du hast das Problem schon richtig erkannt. Danke schonmal für deinen Beitrag. Nur würde ich gerne alles in einer shell abhandeln, da ich das Programm für Windows UND Unix (AIX) mache.

Quasi:


[1]Benutzer startet über cmd-Programm mein Java Programm

[2]Benutzer wählt die gewünschte Einstellung aus

[3]Programm startet eine cmd, gibt alle Env-Variablen durch, startet 5 Batch dateien


[4]Finales-Programm startet

Das Problem ist ja, dass ich wenn ich
Runtime.getRuntime().exec("cmd /c set t1=DE")

benutze, immer wieder eine neue shell bekomme, ungefähr so als würd ich für jeden Set Befehl ein eigenes Fenster benutzen.

Geschrieben

Dann schreib dir doch 2 Batchdateien. Eine für Windows (die setx aufruft) und eine für UNIX und starte diese je nach Betriebssystem. :confused:

Das Problem bei Windows ist z.B., dass du zwar die Registry editieren könntest (und die Dateien einträgst), aber das Controlset (glaub so heißt das) noch nicht aktualisiert wurde.

Unter unixoiden System gibts glaub ich ein ähnliches Problem.

Geschrieben

Dann hätten wir ja den doppelten Pflegeaufwand für ein Programm, dass nur dafür da ist andere Programme zu starten. Es geht hier ja nicht nur um die 3 Variablen. Ich rede hier von über 30 verschiedenen Variablen, die auch gerne mal das Limit eines einzigen Aufrufs mit Parametern sprengen können.

Gibt es vielleicht eine möglichkeit, ein shell (command) fenster zu öffnen und in dieses einzelne Befehle einfließen zu lassen? Das wäre dann ja quasi schon was ich bräuchte.

Problem ist, wie ich vorhin schon erwähnte, dass man mit Runtime.getRuntime().exec() immer wieder eine neue shell öffnet, die unberührt von vorherigen Aufrufen ist.

Geschrieben

Ich glaub ich hatte mich falsch ausgedrückt:

Die Batchdatei soll nur eine Umgebungsvariable setzen. Diese soll aber vom Programm mehrfach aufgerufen werden.

D.h. Batch/Shell bekommt Parameter und schreibt diesen Parameterwert als Umgebungsvariable ins System. Von Javaseite wird die Datei dann x-Mal aufgerufen.

(Man könnte natürlich auch gleich mehrere Parameter übergeben und dann in der Batch/Shell einfach iterieren, nur dann ist die Key-Value-Zuweisung nicht gerade sicher.)

Geschrieben

Okay so langsam kommen wir der Lösung näher. Habe mich jetzt grade mit einem Kollegen darüber unterhalten ob das okay ist/wäre. Das geht schon in die Richtung.

Wir wollen nur unter Windows und AIX eine shell quasi aufsetzen, über die ein Batch-Programm läuft, dass abhängig von gesetzten Variablen noch andere Variablen hinzufügt. Die komplette Umgebung wird nach der Batch datei mit System.getenv() einmal zwischengespeichert und dann in ein script geschrieben, dass später auch ohne mein Java-Tool funktioniert.

Also um das ganze nochmal zu erläutern.

gewünscht wäre:


[1] ich starte das Java programm

[B][2] das Java Programm setzt das Environment

[3] eine Batch Datei wird gestartet, die das Environment anreichert

[4] das Java Programm ließt alle Variablen aus[/B]

[5] die shell wird geschlossen

[6] das Java Programm startet eine selbst erzeugte Datei

....

Bei 2-4 liegt also der Hase begraben. Ich habe bisher halt schon so einiges ausprobiert. Ich möchte auch kein fertig ausprogrammiertes Ding hier haben, sondern nur den Ansatz, bzw. die Denkweise verstehen die man dafür braucht.

mfg

Geschrieben

Also die Lösung war eigentlich ganz einfach.

Mit einem ProcessBuilder einen Prozess erzeugen, per Map env= ProcessBuilder.environment() das Environment rausziehen, env.put mit den Environmentvariablen reinsetzen.

Dann einen OutputStream (zum schreiben) und einen InputStream (zum lesen) auf die Konsole binden, per output die Befehle an die Konsole schicken und zack alles funktioniert.

Hab dazu noch nen anderes Problem, aber da mach ich doch glatt nen neuen Thread auf, weil das fast n anderes Thema ist.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...