JAVA_HOME on OSX with Eclipse and Maven

eclipse, java, java-home, macos, maven

Solution

The problem is that on Mac OSX, the environment variables defined in `.bashrc` or `.bash_profile` are only exported to terminal environments. A bundled GUI app like Eclipse does not see them, and consequently neither does any run configuration executed from Eclipse.

The solution is to create (if it does not exist) or edit a file `/etc/launchd.conf` and add the following line to it:

setenv JAVA_HOME /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home

Of course, modified to your actual `JAVA_HOME` value. (note that the trick commonly used in `.bash_profile` with `$(/usr/libexec/java_home)` does not work in `launchd.conf` - or at least I couldn't get it to work)

After you have done this, you will need to reboot the machine. After reboot the M2E Maven run configurations will be able to see the `JAVA_HOME` variable and execute correctly.

Edit: for a refinement of my answer, see also this answer: https://stackoverflow.com/a/23078977/451941

Problem

I've recently set up an OSX machine and i have trouble getting Maven to pickup JAVA_HOME when running inside Eclipse. I've done the following so far: - Set JAVA_HOME in ~/.bash_profile with `export JAVA_HOME=$(/usr/libexec/java_home)` - Specify the VM for Eclipse inside eclipse.ini to `-vm /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/bin/java` - Set JAVA_HOME in `/etc/mavenrc` with `echo JAVA_HOME=\`/usr/libexec/java_home -v 1.7` | sudo tee -a /etc/mavenrc` Working from the CLI everything seems as expected. `java -version` prints: ``` java version "1.7.0_45" Java(TM) SE Runtime Environment (build 1.7.0_45-b18) Java HotSpot(TM) 64-Bit Server VM (build 24.45-b08, mixed mode) ``` `echo $JAVA_HOME` prints: ``` /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home ``` `mvn -v` prints: ``` Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 17:22:22+0200) Maven home: /usr/local/Cellar/maven/3.1.1/libexec Java version: 1.7.0_45, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.7.0_45.jdk/Contents/Home/jre Default locale: en_US, platform encoding: UTF-8 OS name: "mac os x", version: "10.9", arch: "x86_64", family: "mac" ``` Running `mvn install` inside a project from the CLI works as well. However doing the same from within Eclipse fails with the following: ``` Failed to execute goal org.apache.maven.plugins:maven-javadoc-plugin:2.9.1:jar (attach-javadocs) on project suppress-warnings: MavenReportException: Error while creating archive: Unable to find javadoc command: The environment variable JAVA_HOME is not correctly set. ``` In `Eclipse > Preferences > Java > Installed JREs` i'm seeing that JDK 7 with the same location as specified in `JAVA_HOME` is set as default and also used for my project. Switching between the embedded Maven runtime or the external installation yields the same results. Where or how do i have to set `JAVA_HOME` so that a Maven process started from within Eclipse gets the right `JAVA_HOME` location?

Original source

Related problems