Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

why System.getenv("CATALINA_HOME") returns null?

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.

like image 868
hiway Avatar asked May 07 '13 07:05

hiway


People also ask

What does getenv return in C++?

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.

Why does getenv() return 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.

Why is the returned value null?

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.

What is system getenv() in Java?

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.


2 Answers

Possible reasons:

  1. 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.

  2. 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.

  3. The start script of Tomcat unsets the variable before it invokes java.exe

  4. Tomcat unsets the variable in it's Java code.

like image 90
Aaron Digulla Avatar answered Oct 17 '22 15:10

Aaron Digulla


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.

like image 31
Mostafa Anbarmoo Avatar answered Oct 17 '22 17:10

Mostafa Anbarmoo