Environment Variables For Java Applications

advertisement
Environment Variables For Java Applications
PATH, CLASSPATH, JAVA_HOME
What are Environment Variables?
Environment variables are global system variables accessible by all the processes running under
the operating system. Environment variables are useful to store system-wide values such as the
directory paths to search for the executable programs, the OS version, and the location of
Windows binaries. Examples of environment variables are:
 COMPUTENAME, USERNAME: stores the computer and current user name.
 OS: the operating system.
 SystemRoot: the system root directory.
 PATH: stores a list of directories for searching executable files.
A process could access all the environment variables, it could also maintain its own local
variables, which is available to itself only.
How to Set or Change a Variable
Take note that variables in CMD are NOT case-sensitive (because the legacy DOS are NOT casesensitive).
Display Variables: To list all the variables and their values, start a CMD shell and issue
command "SET". To display a particular variable, use command "SET varname". For examples,
// Display all the variables (in NAME=VALUE pairs)
prompt> SET
COMPUTERNAME=xxxxxxx
OS=xxxxxxx
PATH=xxxxxxx
// Display a particular variable (in NAME=VALUE pair)
prompt> SET COMPUTERNAME
COMPUTERNAME=xxxxxx
Try issuing a SET command on your system, and study the environment variables listed. Pay
particular attention to the variable called PATH.
SET/Change/Unset a Variable: To set (or change) a variable, use "SET varname=value".
There shall be no spaces before and after the '=' sign. To unset an environment variable, use
"SET varname=", i.e., set to an empty string.
> set varname
Display the value of the variable
> set varname=value Set or change the value of the variable Delete the variable by
> set varname=
setting to empty string (Note: nothing after '=')
> set
Display ALL the environment variables
For examples,
// Set an environment variable
prompt> SET MYVAR=hello
// Display
prompt> SET MYVAR
MYVAR=hello
// Unset an environment variable
prompt> SET MYVAR=
// Display
prompt> SET MYVAR
Environment variable MYVAR not defined
A variable set via the "SET" command under CMD is a local variable, available to that CMD
session only.
Set an Environment Variable: To set an environment variable permanently in Windows, you
need to use the "Control Panel" ⇒ "System" ⇒ (Vista/7) "Advanced system settings" ⇒ Switch to
"Advanced" tab ⇒ "Environment variables" ⇒ Choose "System Variables" (for all users) or "User
Variables" (for this login user only) ⇒ choose "Edit" (for modifying an existing variable) or "New"
(to create a new variable) ⇒ Enter the variable "Name" and "Value".
Use a Variable: To reference a variable, use %varname% (with prefix and suffix of '%'). For
example, you can use the ECHO command to print the value of a variable in the form "ECHO
%varname%".
// Display the PATH environment variable. Same as SET PATH
prompt> ECHO %PATH%
PATH=xxxxxxx
// Append a directory in front of the existing PATH
prompt> SET PATH=d:\bin;%PATH%
PATH=d:\bin;xxxxxxx
For Unix Users
In Unixes:
 For bash: Use "env" to list all the environment variable and "set" to list all the variables.
Use "varname=value" to set a local variable. Use "export varname" to export this
variable to the environment and make the variable available to other processes.
 For csh, ksh: Use "printenv" (or "env") to list all the environment variables. Use "setenv
varname value" and "unsetenv varname" to set and unset an environment variable.
Use "set varname=value" and "unset varname" to set and unset a (local) variable for
the current process.
In Unixes, a variable is referenced as $varname, with a prefix '$'.
Java Applications and the Environment Variables
Many problems in the installation and running of Java applications are caused by incorrect
setting of environment variables (global system variables available to all the applications running
under the system), in particular, PATH, CLASSPATH, JAVA_HOME.
PATH and CLASSPATH
When you launch a program from the command line, the operating system uses the PATH
environment variable to search for the program in your local file system. In other words, PATH
maintains a list of directories for searching executable programs.
If your Java application uses other Java classes, the JDK/JRE uses the CLASSPATH environment
variable to search for the classes in your local file system. In other words, CLASSPATH maintains a
list of directories for searching Java classes referenced in your Java application. For ease of
distribution, Java classes are often zipped together into a so-called JAR-file. CLASSPATH could
include directories and JAR files.
PATH is applicable to all applications; while CLASSPATH is used by Java applications only.
PATH (For Windows Users)
When you launch an executable program (with file extension of " .exe", ".bat" or ".com") from
the CMD shell, Windows searches the program in the current working directory and all the
directories listed in the PATH. If the program cannot be found, you will get the following error:
xxxx is not recognized as an internal or
"cmd.exe" on the newer Windows
external command, operable program or batch
systems (2000/XP/Vista/7)
file.
Bad command or file name
"command.com" on the older Windows
systems (95/98)
PATH maintains a set of directories. The directories are separated by semi-colon ';'.
For Java applications, PATH must include the following directories:
 JDK's "bin" directory (e.g., "c:\Program Files\java\jdk1.6.0_xx\bin"), which contains
JDK programs such as Java Compiler "javac.exe" and Java Runtime "java.exe".
 "c:\windows\system32" and "c:\windows" which contain console programs and
commands.
NOTES: The JDK's "bin" directory should be listed before "c:\windows\system32" and
"c:\windows" in the PATH. This is because some older Windows systems provide their own Java
runtime (which is often outdated) in these directories (try search for " java.exe" in your
computer!).
To manipulate the PATH environment variable, you could use command "set PATH" (just like any
environment variable). But as PATH is frequently used, a dedicated command called path is
provided.
prompt> PATH
Display all the search paths, same as SET PATH and ECHO %PATH%
prompt> PATH=value
Set the value of PATH, same as SET PATH=value (note: no space
prompt> PATH=
before and after '=')
Delete PATH, same as SET PATH=
prompt>PATH=D:\bin;D:\bin\java Set search paths, separated by semi-colon
prompt> PATH=D:\bin;%PATH%
Insert "D:\bin" in front of the current PATH
In Windows, the current working directory '.' is automatically included in the PATH, as the first
entry. In other words, the current working directory is searched first, before searching the other
paths specified in PATH, in a the order specified.
For Windows users, you should set the PATH permanently to include JDK's "bin" directory via
"Control Panel" ⇒ "System"⇒ (Vista/7) "Advanced system settings" ⇒ Switch to "Advanced" tab
⇒ "Environment variables" ⇒ Choose "System Variables" (for all users) or "User Variables" (for
this login user only) ⇒ Select variable "PATH" ⇒ Choose "Edit" (for modifying an existing variable)
⇒
In
variable
"Value",
APPEND
your
JDK's
"bin"
directory
(e.g.,
"c:\Program
Files\java\jdk1.6.0_xx\bin"), followed by a semi-colon ';', IN FRONT of all the existing PATH
entries. DO NOT remove any entry; otherwise, some programs may not run.
CLASSPATH (For Windows User)
Suppose that your Java application uses other Java classes. If the Java class cannot be found in
the Java’s default core package (java.lang), import classes, or one of the directories or jar-files
listed in CLASSPATH, you will receive an error:
Exception in thread "main" java.lang.NoClassDefFoundError: xxxx
CLASSPATH accepts directories and jar-files. The directories and jar-files are separated by semi-
colon ';'. An example of CLASSPATH setting, which includes the current working directory
(denoted
as
dot
'.')
and
Java
Servlets
API
d:\tomcat\lib\servlet.jar) is as follow:
prompt> SET CLASSPATH=.;d:\tomcat\lib\servlet.jar
jar-file
from
Tomcat
(e.g.,
Since JDK 1.3, if no CLASSPATH is set explicitly, the default is set to the current working directory
'.'. However, if you explicitly set your CLASSPATH, you have to include the current directory '.'
explicitly. Otherwise, the current directory will not be searched. A common problem during JDK
installation is CLASSPATH was set (probably by another application) without including the current
directory. You will receive "NoClassDefFoundError" when you run your Hello-world program.
For a beginner, no explicit CLASSPATH setting is required. The default CLASSPATH setting of
currently directory is sufficient. Remove all CLASSPATH setting if there is any. However, if you have
to set CLASSPATH, make sure that you include the current directory '.'.
To temporarily changing CLASSPATH for this CMD session:
// Display current setting of CLASSPATH
prompt> SET CLASSPATH
// Unset (remove) CLASSPATH
prompt> SET CLASSPATH=
// Set CLASSPATH to the current directory '.'
prompt> SET CLASSPATH=.
// Set CLASSPATH to the current directory and a JAR file
prompt> SET CLASSPATH=.;d:\tomcat\lib\servlet-api.jar
For windows users, you can set the CLASSPATH permanently via "Control Panel" ⇒ "System"⇒
(Vista/7) "Advanced system settings" ⇒ Switch to "Advanced" tab ⇒ "Environment variables" ⇒
Choose "System Variables" (for all users) or "User Variables" (for this login user only):
 (RECOMMENDED) Delete CLASSPATH from both System and User variables.
 To modify the existing CLASSPATH, select variable "CLASSPATH" and Choose "Edit" ⇒ In
variable "Value", provide the directories and jar-files, separated by semi-colon ';'.
Make sure that the current directory '.' is included as the first entry.
 To create CLASSPATH ⇒ Choose "New" ⇒ In variable "Name", enter "CLASSPATH" ⇒ In
variable "Value", provide the directories and jar-files, separated by semi-colon ';'.
Make sure that the current directory '.' is included as the first entry.
Read JDK documents "Setting the CLASSPATH" and "How Classes are Found" (you can find the
hyperlinks from the index page of the JDK documentation, or googling).
JAVA_HOME and JRE_HOME
JRE (Java Runtime) is needed for running Java programs. JDK (Java Development Kit) is needed
for writing and running Java programs. JDK includes JRE plus development tools such as Java
compiler.
Set JAVA_HOME to your JDK installation directory (e.g., "c:\Program Files\java\jdk1.6.0_xx").
JAVA_HOME is needed for running Tomcat and many other Java applications.
You
can
optionally
set
JRE_HOME
to
the
JRE
base
directory
(e.g.,
"c:\Program
Files\java\jre1.6.0_xx")
For Unix Users
The above discussion for PATH, CLASSPATH, JAVA_HOME and JRE_HOME applied, except that:
 Unix uses ':' as the path separator, and forward slash '\' as directory separator.
 The current working directory is not searched, unless it is included in the PATH. You can
denote current working directory as '.' in the PATH.
 The program shall have executable file attribute.
 If you invoke a program from the command-line and it cannot be located in the PATH,
you get an error message "command not found".
 You can set the environment variables (PATH, CLASSPATH) permanently in your login or
shell initialization script, such as .login, .cshrc, .bashrc.
(For Advanced Users) Windows vs. Unixes
Java is platform independent. Java classes run in Windows as well as Unixes - binary compatible.
 Unixes have many shells, such as the newer bash and the older csh, ksh. Windows have
two shells: the newer cmd.exe and the older command.com. Each shell come with its own
set of commands, utilities, and its own scripting programming language.
 Unix's variable name is denoted as $varname, e.g., $JAVA_HOME. Windows uses %varname%,
e,g., %JAVA_HOME%.
 Unix uses command "printenv" (print environment) or "env" to list all the environment
variables. Windows uses command "set".
 Unix's PATH is set permanently in the login or shell initialization script (e.g., ".login" or
".bashrc"). Windows' PATH is set in Control Panel ⇒ System.
 The current directory is NOT included in the Unix's PATH implicitly. You need to include
"." in the PATH environment variable explicitly. On the other hand, current directory is
included in Windows' PATH implicitly.
 A Windows' path includes a drive letter and directories. It uses back-slash '\' as directory
separator (e.g., "c:\jdk1.6\bin"). Linux's paths do not have drive letter and use
forward slash '/' as the directory separator (e.g., "/usr/bin/jdk1.6").
 Windows use semi-colon ';' as path separator, while Unixes use colon ':'.
 Windows/DOS uses "0D0AH" (carriage-return plus line-feed) as line-break (or End-of-Line
(EOL)). Unix uses "0AH" (line-feed) only.
(Further details can be found at;
http://www.ntu.edu.sg/home/ehchua/programming/howto/Environment_Variables.html)
Download