There’s nothing worse than installing your favorite Java-based application — such as Minecraft, Maven, Jenkins or Apache Pig — only to run into a JAVA_HOME is set to an invalid directory or a JAVA_HOME is not defined correctly error as soon as you boot up the program.
Well, there’s no need to fret. Here’s how to fix the most common JAVA_HOME errors.
How to fix JAVA_HOME not found errors
It’s worth noting that there aren’t standardized JAVA_HOME error messages that people will encounter. There are many different ways that a given JAVA_HOME error might be logged.
For example, one of the most common JAVA_HOME configuration problems arises from the fact that the environment variable has never actually been set up. Such a scenario tends to trigger the following error messages:
- Error: JAVA_HOME not found in your environment
- Error: JAVA_HOME not set
- Error: JAVA_HOME is not set currently
- Error: JAVA_HOME is not set
- Error: Java installation exists but JAVA_HOME has not been set
- Error: JAVA_HOME cannot be determined from the registry
How do you fix the JAVA_HOME not found problem?
Well, you fix this by in the Windows environment variable editor where you can actually add a new system variable. If you know your way around the Windows operating system, you should be able to add the JAVA_HOME environment variable to your configuration and have it point to the installation root of your JDK within minutes. The Windows 10 setting looks like this:
As mentioned above, the JAVA_HOME variable must point to the installation root of a JDK, which means a JDK must actually be installed. If one isn’t, then you better hop to it and get that done.
The JAVA_HOME is set to an invalid directory fix
The next most common JAVA_HOME error message is JAVA_HOME is set to an invalid directory. The error message is delightfully helpful, because it tells you in no uncertain terms the environment variable does in fact exist. And, it also tells you it’s not pointing to the right place, which is helpful as well. All you need to do to fix this error is edit the JAVA_HOME variable and point it to the correct directory.
The JAVA_HOME environment variable must point to the root of the installation folder of a JDK. It cannot point to a sub-directory of the JDK, and it cannot point to a parent directory that contains the JDK. It must point directly at the JDK installation directory itself. If you encounter the JAVA_HOME invalid directory error, make sure the name of the installation folder and the value of the variable match.
An easy way to see the actual value associated with the JAVA_HOME variable is to simply echo its value on the command line. In Windows, write:
>/echo %JAVA_HOME% C:/_JDK13.0
On an Ubuntu, Mac or Linux machine, the command uses a dollar sign instead of percentages:
:-$ echo $JAVA_HOME /usr/lib/jvm/java-13-oracle
Steer clear of the JDK \bin directory
One very common developer mistake that leads to the JAVA_HOME is set to an invalid directory error is pointing JAVA_HOME to the \bin sub-directory of the JDK installation. That’s the directory you use to configure the Windows PATH, but it is wrong, wrong, wrong when you set JAVA_HOME. If you point JAVA_HOME at the bin directory, you’ll need to fix that.
This misconfiguration also manifests itself with the following error messages:
- JAVA_HOME is set to an invalid directory
- Java installation exists but JAVA_HOME has been set incorrectly
- JAVA_HOME is not defined correctly
- JAVA_HOME does not point to the JDK
Other things that might trigger this error include spelling mistakes or case sensitivity errors. If the JAVA_HOME variable is set as java_home, JAVAHOME or Java_Home, a Unix, Linux or Ubuntu script will have a hard time finding it. The same thing goes for the value attached to the JAVA_HOME variable.
The JAVA_HOME does not point to the JDK error
One of the most frustrating JAVA_HOME errors is JAVA_HOME does not point to the JDK.
Here’s a little bit of background on this one.
When you download a JDK distribution, some vendors include a Java Runtime Environment (JRE) as well. And when the JAVA_HOME environment variable gets set, some people point it at the JRE installation folder and not the JDK installation folder. When this happens, we see errors such as:
- JAVA_HOME does not point to a JDK
- JAVA_HOME points to a JRE not a JDK
- JAVA_HOME must point to a JDK not a JRE
- JAVA_HOME points to a JRE
To fix this issue, see if you have both a JRE and JDK installed locally. If you do, ensure that the JAVA_HOME variable is not pointing at the JRE.
JAVA_HOME and PATH confusion
After you’ve downloaded and installed the JDK, sometimes another problem can plague developers. If you already have programs that installed their own version of the JDK, those programs could have added a reference to that specific JDK in the Linux or Windows PATH setting. Some programs will run Java using the program’s availability through the PATH first, and JAVA_HOME second. If another program has installed a JRE and put that JRE’s \bin directory on the PATH, your JAVA_HOME efforts may all be for naught.
However, you can address this issue. First, check the Ubuntu or Windows PATH variable and look to see if any other JRE or JDK directory has been added to it. You might be surprised to find out that IBM or Oracle has at some prior time performed an install without your knowledge. If that’s the case, remove the reference to it from the PATH, add your own JDK’s \bin directory in there, and restart any open command windows. Hopefully that will solve the issue.
Of course, there is never any end to the configurations or settings that can trigger JAVA_HOME errors. If you’ve found any creative solutions not mentioned here, please add your expert insights to the comments.