java_home directory is not correct though it exists in my environment file
I'm using Java jdk with Maven and I have the following /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
# Maven Settings
export JAVA_HOME=/usr/local/jdk1.6.25/
export M2_HOME=/usr/local/apache-maven/apache-maven-3.0.3
export M2=$M2_HOME/bin
export PATH=$M2:$PATH
The /usr/local/jdk1.6.25 does exist, but when I run mvn -version I get...
Warning: JAVA_HOME environment variable is not set.
Apache Maven 3.0.3 (r1075438; 2011-02-28 17:31:09+0000)
Maven home: /usr/local/apache-maven/apache-maven-3.0.3
Java version: 1.6.0_23, vendor: Sun Microsystems Inc.
Java home: /usr/lib/jvm/java-6-openjdk/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.0.0-14-generic", arch: "i386", family: "unix"
does anyone know why this does not think my java_home directory is correct even though it exists in my environment file?
A couple ideas... First, just to reformat for readability, this is your PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
These are your env vars:
export JAVA_HOME=/usr/local/jdk1.6.25/ export M2_HOME=/usr/local/apache-maven/apache-maven-3.0.3 export M2=$M2_HOME/bin export PATH=$M2:$PATH
Note that "java" (the program) is in $JAVA_HOME/bin
, not $JAVA_HOME
. That will cause a little confusion when a different 'java' is found in the shell's PATH. For example...
$ type java java is /usr/bin/java
So just modify your PATH:
$ export PATH=$JAVA_HOME/bin:$PATH $ type java ... should be $JAVA_HOME/bin/java ...
But I don't think that's the issue. From the mvn shell script launcher,
if [ -z "$JAVA_HOME" ] ; then echo "Warning: JAVA_HOME environment variable is not set." fi
This would imply the var really isn't set -- not merely set to a wrong value. Perhaps this is the key hint:
[my java_home ...] even though it exists in my environment file?
Perhaps you added/modified JAVA_HOME
to .bashrc
or .profile
, and then in the same shell tried to run mvn -v
?? If so, these values won't be picked up until you source the file (e.g., . ~/.bashrc
) or create a new login shell (bash -l
) in order for these env var's to be set (or reset).
(Also... it's just a matter of opinion, but in your PATH
, I'd leave the standard /usr/bin
(and /usr/sbin
and /bin
) in front of any /usr/local/bin
or /opt/bin
(etc), just to avoid any rouge 'local' programs taking precedence over the standard programs... using something like alternatives
would be preferable to override the default versions of standard applications.)