Manage Your Java Environment

In case you are familiar with Pyhon, I guess you also have heard of virtualenv. This is a tool to create isolated Python environments, which lets you easily create or switch projects between Python 2 and Python 3.

In Java, there are also different version out there. While version 7 or 8 are probably still most commonly used in production, even newer versions like 10 (current default of Ubuntu 18.04) or the preview of Java 11 (release expected in late September 2018) are available, too. Consequently, it can happen that you are working on several projects with different Java version requirements. The question is now: how can we switch between different installed JDKs?

There are of course multiple possible answers. Two of them are the following...

A. Setting the default Java version

In case you have multiple Java versions installed, you can change the default version using the update-alternatives tool:
$ sudo update-alternatives --config java
This command will list you all installed versions from which you can choose from:
There are 2 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      auto mode
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      manual mode
* 2            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press ENTER to keep the current choice[*], or type selection number: 
A more detailed explanation for how to install/uninstall/configure Java on Ubuntu 18.04 can be found here.

B. jEnv

jEnv is a command line tool to help you forget how to set the JAVA_HOME environment variable. It currently supports Linux and Mac OS X. The installation is short and described on the jEnv website. After installations, you can easily add JDK installations using the jenv add /path/to/java/home command:
Afterwards, you can either list the existing environments:
$ jenv versions
* oracle64- (set by /Users/hikage/.jenv/version)
Also, you can configure the used environments either globally, locally (per directory) within the shell instance:
$ jenv global oracle64-
$ jenv local oracle64-
$ jenv shell oracle64-

Bonus tip: Maven Enforcer plugin

In case you manage your project with Maven in a team, I can highly recommend to use the Enforcer plugin. It provides goals to control certain environmental constraints such as Maven version, JDK version or OS family along with many more built-in rules and user created rules.

As an example, we had the problem in our team that some integrations tests ran perfectly on our Jenkins, as well as on my colleague's machines, but not on mine in case I was running mvn install. However, these tests did not fail when running them using IntelliJ. It simply turned out that my default JDK was suddenly set to version 10, because I recently updated my machine from Ubuntu 17.10 to 18.04. I was completely unaware of this to that point of time.

In case this sounds useful for you current project, then simply read the Usage page of the plugin's project website.


  1. Nikmati Bonus Menarik Dari Bolavita Sekarang...
    -Nikmati Bous New member 10%
    -Nikmati Bonus Cashback Hingga 10%
    -Nikmati Juga Bonus jackpot Hingga Ratusan juta Rupiah Setiap harinya...

    Info Lengkap Hubungi:
    WA : 0812-2222-995
    Line : cs_bolavita
    Link :


  2. Alasan Kenapa Kamu Harus Bermain Judi Di Museumbola
    * Permainan Lengkap dari A sampai Z
    * Opsi Deposit Banyak Seperti Bank, E-Cash , PULSA
    * Semua Rekening Bank termasuk Bank Daerah Bisa Di Daftarkan
    * Bonus Banyak
    * Deposit 2 Menit
    * Withdraw 5 Menit Paling Lama
    * Cs Professional 24 Jam Online

    Daftar Museumbola
    Link Alternatif Museumbola
    Judi Bola Online
    Slot pulsa tanpa potongan
    Demo Slot Habanero


Post a Comment

Popular posts from this blog

UWPCore: A development acceleration framework for the Universal Windows Platform

How to setup an eGPU on Ubuntu for TensorFlow

Benchmarking Tensorflow Performance on eGPU