Wilson Mar bio photo

Wilson Mar

Hello. Hire me!

Email me Calendar Skype call 310 320-7878

LinkedIn Twitter Gitter Google+ Instagram Youtube

Github Stackoverflow Pinterest

Because programmers can’t get enough caffeine


Overview

There are several ways to install Java. This is the one that worked for me.

Different Javas

Several organizations work on OpenSDK specs from AdoptOpenJDK and certified for Java SE TCK compliance on x64 reference architecture systems

Its zulu8.30.0.1-jdk8.0.172-macosx_x64 from zip April 18, 2018 is 179.2 MB expanded

  • Oracle and http://jdk.java.net/

  • IBM OpenJDK with Eclipse OpenJ9

  • Red Hat

  • https://en.wikipedia.org/wiki/List_of_Java_virtual_machines

Which Java You Got?

On a Terminal open to any folder:

  1. The $JAVA_HOME environment variable is used by Groovy, Grails, Spring Boot, and others:

    echo $JAVA_HOME

    Sample response:

    /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    

    PROTIP: This command is my preferred way to see what a machine has because if you invoke java or javac, if it’s not installed, MacOS prompts you to install the JDK. Clever. But don’t do it if you want other version of Java.

    Apple Java

    PROTIP: The version that comes installed on Apple Macs is obsolete and thus not have the latest security patches. But do not delete the default version.

    But if you did, to re-install Java 6 for OS X 2014-001, it can be obtained from https://support.apple.com/kb/DL1572?locale=en_US

  2. To see what Java VM you have already installed:

    
    java -version
    

    A sample response:

    java version "1.8.0_162"
    Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
    Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)
    
  3. PROTIP: Developers use the JDK rather than the JRE (Runtime Environment), see what version of the Java Compiler is installed:

    
    javac -version
    

    A sample response:

    javac 1.8.0_162
    
  4. If you do see the MacOS prompt to install Java, click More Info….

    
    /usr/libexec/java_home -V
    

    That’s a capital V.

    The response on my machine on Sierra:

    Matching Java Virtual Machines (4):
    1.8.0_45, x86_64:	"Java SE 8"	/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
    1.7.0_65, x86_64:	"Java SE 7"	/Library/Java/JavaVirtualMachines/jdk1.7.0_65.jdk/Contents/Home
    1.6.0_65-b14-466.1, x86_64:	"Java SE 6"	/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    1.6.0_65-b14-466.1, i386:	"Java SE 6"	/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home
    /Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home
    

    PROTIP: In OSX, all known JVM’s are located at:

    /Library/Java/JavaVirtualMachines/
    

    NOTE: This directory is at the root for the machine, not a particular user home folder.

    Maven

  5. See what derivative program such as Maven uses:

    mvn -version

    The sample response:

    Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-24T12:49:05-07:00)
    Maven home: /usr/local/Cellar/maven/3.5.3/libexec
    Java version: 1.8.0_162, vendor: Oracle Corporation
    Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/jre
    Default locale: en_US, platform encoding: utf-8
    OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac"
    
  6. Where is the Java executable?

    command -v java

    You should see this:

    /usr/bin/java
    

    PROTIP: java in the above path is a binary file.

    Latest Version of Oracle Java

  7. PROTIP: Hold off downloading the java .dmg installer file as described at https://java.com/en/download/help/mac_install.xml

    WARNING: Oracle installs an annoying Ask Toolbar, without asking.

    Oracles docs on installing the JDK:
    https://docs.oracle.com/javase/8/docs/technotes/guides/install/mac_jdk.html

  8. Use an internet browser to
    http://www.oracle.com/technetwork/java/javase/downloads/index.html

  9. Click the “Download” button for the JDK (not the JRE).

    NOTE: Downloads of the JDK contains the JRE.

    Install Jenv to manage multiple Versions of Java

    PROTIP: If you’re a developer, you’ll likely need to manage different versions of Java needed by different apps. Much like NPM for Node and rbenv for Ruby.

    http://hanxue-it.blogspot.com/2014/05/installing-java-8-managing-multiple.html?q=java
    describes the steps.

  10. Install Jenv by specifying the location URL: https://raw.githubusercontent.com/entrypass/jenv/homebrew/homebrew/jenv.rb

    brew install jenv

    The response:

    ==> Downloading https://github.com/gcuisinier/jenv/archive/0.4.4.tar.gz
    ==> Downloading from https://codeload.github.com/gcuisinier/jenv/tar.gz/0.4.4
    ######################################################################## 100.0%
    🍺  /usr/local/Cellar/jenv/0.4.4: 78 files, 65.5KB, built in 8 seconds
    
  11. To see if jenv can run, list its version and commands:

    jenv

    The response is like this (at time of writing Oct 15, 2018):

    jenv 0.4.4
    Usage: jenv  []
     
    Some useful jenv commands are:
    commands    List all available jenv commands
    local       Set or show the local application-specific Java version
    global      Set or show the global Java version
    shell       Set or show the shell-specific Java version
    rehash      Rehash jenv shims (run this after installing executables)
    version     Show the current Java version and its origin
    versions    List all Java versions available to jenv
    which       Display the full path to an executable
    whence      List all Java versions that contain the given executable
     
    See `jenv help ' for information on a specific command.
    For full documentation, see: https://github.com/hikage/jenv#readme
    </pre>
    
    
  12. See where it was installed:

    which jenv

    My response:

    /usr/local/bin/jenv

    NOTE: The file jenv is a binary executable.

  13. Use Homebrew’s directories rather than ~/.jenv add to the bottom of your bash_profile file:

    export JENV_ROOT=/usr/local/var/jenv

  14. To enable shims and autocompletion add to the botton of your bash_profile file:

    
    if which jenv > /dev/null; then eval "$(jenv init -)"; fi
    

    Jenv for several Java versions

  15. Get info:

    
    jenv info java
    

    Sample response:

    Jenv will exec : /usr/bin/java
    Exported variables :
      JAVA_HOME=/Users/wilsonmar/.jenv/versions/system
    
  16. List installers available for use by jenv:

    
    ls -al /Library/Java/JavaVirtualMachines/
    

    The response:

    total 0
    drwxr-xr-x  5 root  wheel  160 Mar 30  2018 .
    drwxr-xr-x  5 root  wheel  160 Mar 30  2018 ..
    drwxr-xr-x  2 root  wheel   64 Mar 30  2018 jdk-10.jdk
    drwxr-xr-x  2 root  wheel   64 Mar 30  2018 jdk1.8.0_144.jdk
    drwxr-xr-x  3 root  wheel   96 Mar 30  2018 jdk1.8.0_162.jdk
    

    If you don’t see any, you need to first download a JVM installer containing folders bin, lib, jre, include, bundle, db, man.

    The path to a particular version is constructed by adding “/Contents/Home” to the end of the path.

  17. The point of jenv is to add additional versions, such as back version JDK 7.

    
    jenv add /Library/Java/JavaVirtualMachines/jdk1.7.0_65.jdk/Contents/Home
    

    The response:

    oracle64-1.7.0.65 added
    
  18. Add JDK 8:

    
    jenv add /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home
    

    http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jdk-8u162-macosx-x64.dmg

    The response:

    oracle64-1.8.0.45 added
    

    The above provide a handle for jenv provide other apps to use.

  19. List the Java versions jenv knows about:

    jenv versions

    The response if none if brew cask was not installed:

    * system (set by /usr/local/var/jenv/version)
    
  20. To configure global version for all apps to use:

    
    jenv global oracle64-1.8.0.45
    

    Example response:

    system
    oracle64-1.7.0.65
    * oracle64-1.8.0.45 (set by /Users/wilsonmar/.jenv/version)
    

Open JDK

Open JDK is the open-sourced implementation of the JRE spec, at http://openjdk.java.net

But some say it is not ready for “prime time” on MacOS because its installation is a dirty affair:

  • https://wiki.openjdk.java.net/display/MacOSXPort/Mac+OS+X+Port+Project+Status

Open JDK’s install page at http://openjdk.java.net/install/ shows apt-get (for Debian, Ubuntu) and yum (for Red Hat, CentOS, Oracle Linus, Fedora).

  • http://blog.shelan.org/2015/03/how-to-build-open-jdk-9-on-mac-osx.html on Yosemite

  • http://hanxue-it.blogspot.com/2014/05/installing-java-8-managing-multiple.html

For OSX, this page recommends using Make to compile from source.

  1. Download source using Mercurial to a new folder “openjdk9”:

    hg clone http://hg.openjdk.java.net/jdk9/jdk9 openjdk9 cd ./openjdk9

    Note JDK 9 is under active development.

    http://hg.openjdk.java.net/jdk8/jdk8 work stopped at 2014-03-04.

  2. Install XQuartz for X Window System that runs on OSX:

    brew install Caskroom/cask/xquartz
    brew cask list

    NOTE: Downloaded /Library/Caches/Homebrew/xquartz-2.7.9.dmg was 7.9K

    xquartz staged at ‘/opt/homebrew-cask/Caskroom/xquartz/2.7.9’ (73M)

  3. cd to the .tar.gz directory containing the configure file for Make to use.
  4. XQuartz fixes an error in this command:

    bash ./configure

  5. Install apple-gcc42 the Apple C compiler.

    Mihail recommends:

  6. Install ccache (compiler cache):

    brew install ccache

  7. Make a symlink /usr/bin/gcc -> /usr/local/Cellar/apple-gcc42/4.2.1-5666.3/bin/gcc-4.2 (same for g++)

Test JDK Build

https://mihail.stoynov.com/2015/01/29/building-openjdk-9-on-a-osx-or-any-linux/ shows JDK 9 install using ccache, mercurial (hg), jtreg “testing harness”, and Webrev to diff code

Update Java

https://java.com/en/download/help/mac_java_update.xml

NOTE: Others include cheatsheet, google-chrome, google-drive, google-hangouts, dropbox, etc. listed in Sourabh Bajaj’s venerable Mac OSX Setup Guide, developed and distributed as a GitBook.

Kotlin

Kotlin is a language that makes use of the JVM. Invented by JetBrains (IntelliJ).

More on OSX

This is one of a series on Mac OSX: