I define a system variable CATALINA_HOME
which refers to tomcat installation directory in my OS system(windows 7 ultimate 64 bit), now I want to get it by java, my code is below:
System.out.println(System.getenv("CATALINA_HOME"));
it returns null, I am pretty sure this variable exists in my system, I type set catalina_home
in cmd console, it shows exactly the value assigned to it.
So why can't I get it, or is there other way to get system env variable?
PS: the below are all variables retrieved by System.getenv()
.
Map<String, String> env = System.getenv();
for (String key : env.keySet())
{
System.out.println(key + ":" + env.get(key));
}
System.out.println(System.getenv("CATALINA_HOME"));
output:
USERPROFILE:C:\Users\chorusheng
ProgramData:C:\ProgramData
PATHEXT:.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
JAVA_HOME:C:\Program Files\Java\jdk1.6.0_20
ProgramFiles(x86):C:\Program Files (x86)
TEMP:C:\Users\CHORUS~1\AppData\Local\Temp
SystemDrive:C:
ProgramFiles:C:\Program Files
Path:C:/Program Files (x86)/Java/jre7/bin/client;C:/Program Files (x86)/Java/jre7/bin;C:/Program Files (x86)/Java/jre7/lib/i386;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;d:\Program Files (x86)\KOUTON\CTBS Standard Client;C:\Program Files (x86)\PC Connectivity Solution\;D:\oracle\product\11.2.0\dbhome_1\bin;C:\Program Files (x86)\Common Files\NetSarang;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Intel\WiFi\bin\;C:\Program Files\Common Files\Intel\WirelessCommon\;C:\Program Files (x86)\EgisTec BioExcess\;C:\Program Files (x86)\EgisTec BioExcess\x64;C:\Program Files (x86)\Common Files\Thunder Network\KanKan\Codecs;d:\Program Files (x86)\Tencent\QQPCMgr\6.6.2150.401;D:\Program Files (x86)\TortoiseSVN\bin;d:\Program Files (x86)\DigiWin OpenVPN\bin;d:\Program Files (x86)\Tencent\QQPCMgr\6.6.2150.401;F:\chega\eclipsej2ee3.7;
HOMEDRIVE:C:
DYNA_HOME:E:\plm
PROCESSOR_REVISION:2502
USERDOMAIN:chorus
ALLUSERSPROFILE:C:\ProgramData
ProgramW6432:C:\Program Files
PROCESSOR_IDENTIFIER:Intel64 Family 6 Model 37 Stepping 2, GenuineIntel
SESSIONNAME:Console
TMP:C:\Users\CHORUS~1\AppData\Local\Temp
CommonProgramFiles:C:\Program Files\Common Files
CLASSPATH:.;C:\Program Files\Java\jdk1.6.0_20\lib\dt.jar;C:\Program Files\Java\jdk1.6.0_20\lib\tools.jar;
LOGONSERVER:\\CHORUS
PROCESSOR_ARCHITECTURE:AMD64
FP_NO_HOST_CHECK:NO
OS:Windows_NT
HOMEPATH:\Users\chorusheng
PROCESSOR_LEVEL:6
CommonProgramW6432:C:\Program Files\Common Files
1830B7BD-F7A3-4c4d-989B-C004DE465EDE:f44:431b280
LOCALAPPDATA:C:\Users\chorusheng\AppData\Local
COMPUTERNAME:CHORUS
windir:C:\Windows
SystemRoot:C:\Windows
asl.log:Destination=file
NUMBER_OF_PROCESSORS:4
USERNAME:chorusheng
PUBLIC:C:\Users\Public
PSModulePath:C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
CommonProgramFiles(x86):C:\Program Files (x86)\Common Files
ComSpec:C:\Windows\system32\cmd.exe
APPDATA:C:\Users\chorusheng\AppData\Roaming
null
as we can see, the last line is null which is the value of CATALINA_HOME variable.
PS: my tomcat is not an installation edition.
If successful, getenv () returns a pointer to a buffer containing the current string value of varname. You should copy the string that is returned because a subsequent call to getenv () will overwrite it. If the varname is not found, getenv () returns a NULL pointer.
If the varname is not found, getenv () returns a NULL pointer. The returned value is NULL if the given variable is not currently defined. /* CELEBG05 In this example, *pathvar points to the value of the PATH environment variable.
The returned value is NULL if the given variable is not currently defined. /* CELEBG05 In this example, *pathvar points to the value of the PATH environment variable.
In this tutorial, we will learn about the Java System.getenv () function, and learn how to use this function to get all environment variables or value for a specific environment variable, with the help of examples. System.getenv () returns an unmodifiable string map view of the current system environment.
Possible reasons:
You've used set CATALINA_HOME
in a command prompt. That makes this variable local to this window. It should be visible to processes started from this command prompt but nowhere else. Use My Computer > Advanced > Environment Variables
to make a variable visible to all new processes.
The process which tries to read the variable is already running. Restart it.
Note: That could be the IDE if you start Tomcat from the debugger or the standalone Tomcat process when you start it from the command line.
The start script of Tomcat unsets the variable before it invokes java.exe
Tomcat unsets the variable in it's Java code.
If method system.getenv("some name")
return null
probably you define this variable in your environment after lunching your Eclipse IDE. Just restart your Eclipse and then run your project again.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With