2009-09-22 5 views
18

Ich entwickle eine J2EE-Anwendung, die in JBoss auf einem Windows Vista-Rechner läuft, aber die Anwendung wird auf einem Linux-Rechner landen. Gibt es eine Möglichkeit, den Wert einer Umgebungsvariablen plattformunabhängig zu übergeben?Umgebungsvariablen an eine JVM übergeben, plattformunabhängig

Ich denke (aber ich bin mir nicht sicher) die Plattform sensitiv sein würde:

-Denv_var=%MY_ENV_VAR% (Windows) 
-Denv_var=$MY_ENV_VAR (Linux) 

und von dort würde ich den Wert (in Java) mit

System.getProperty("MY_ENV_VAR"); 

zugreifen - Ist das korrekt?

Die Javadoc für System.getenv(String name) scheinen zu implizieren, dass diese Methode plattformabhängig ist, aber das ist mir nicht klar. Könnte ich einfach die Variable vollständig in die JVM übergeben und getenv() verwenden, nachdem ich den Wert für eine Umgebungsvariable über das Betriebssystem eingestellt habe?

+1

Ist Ihr Beispiel falsch? Sollte es nicht -DMY_ENV_VAR sein, wenn Sie System.getProperty ("MY_ENV_VAR") verwenden möchten; –

Antwort

19

System.getenv() ist von sich aus plattformunabhängig. Mit Ihrem obigen Beispiel können Sie sicherlich schreiben

und es wird auf Linux und Windows arbeiten. Kein Grund, dies in die Java-Systemeigenschaft einzubetten. Der "plattformabhängige" Teil von getenv() liegt jedoch darin, dass verschiedene Betriebssysteme unterschiedliche Umgebungsvariablen wie PATH auf Windows vs. Pfad unter Linux verwenden. Aber solange Sie Ihre eigenen Variablen verwenden und sie konsistent benennen (zum Beispiel immer Großbuchstaben), wird Ihnen nichts passieren.

+0

Verdammt, schlage mich auf die Antwort :) –

+0

Also, wenn ich 'System.getEnv()' brauche Ich muss nichts in die JVM übergeben? –

+0

Dies ist nur zum Lesen von Umgebungsvariablen. Ja, Sie müssen sie noch einstellen. –

1

Wie ich interpretiere the java tutorial on this ist, dass getenv in einer plattformunabhängigen Art und Weise arbeitet, aber dass Sie beachten müssen, dass Variablen nicht konsistent plattformübergreifend benannt werden. Da Sie die Var selbst zu setzen scheinen, gilt dies nicht für Sie.

0

Ja - getEnv() gibt nur den Namen der Umgebungsvariable zurück, und Sie können ihn auf die für die Plattform, auf der Sie ausgeführt wird, geeignete Weise festlegen (normalerweise über eine Startbatchdatei auf Win32). Es ist eine gute Methode, auf vernünftige Standardwerte basierend auf der Plattform zurückzugreifen (indem Sie System.getProperty("os.name") inspizieren), wenn Sie vermeiden möchten, dass Ihre Benutzer sich mit Umweltvariablen herumärgern müssen, um Ihre Software auszuführen.

Verwandte Themen