Setup Java Development Environment in Remote Ubuntu Desktop on Oracle Cloud

In this blog post we will setup Java development environment in Remote Desktop created based on Ubuntu server on Oracle Cloud.

In my previous blog posts ( part-i, part-ii), I have shown you how to setup the free Ubuntu based remote desktop on Oracle cloud using Ampere A1 processor. Now we will install JDK, Java IDEs , VS Code , Node JS and Docker software which enables us to develop Java and JavaScript based applications.

Since Ampere A1 processor is ARM architecture based we need to install ARM architecture supported software only.

For installing Java and Maven software we will use software called SDKMAN.

With SDKMAN, we can easily install JDK’s from different vendors and switch between versions and vendors. SDKMAN will take care of installing Java based on your processor architecture.

Using SDKMAN you can install lot of other libraries. Please check the complete list here

Installing SDKMAN

Open your terminal and enter following command to download.

curl -s "https://get.sdkman.io" | bash
Code language: Java (java)

... Set version to 5.16.0 ... Set native version to 0.0.15 ... Attempt update of interactive bash profile on regular UNIX... Attempt update of zsh profile... All done! You are subscribed to the STABLE channel. Please open a new terminal, or run the following in the existing one: source "/home/suresh/.sdkman/bin/sdkman-init.sh" Then issue the following command: sdk help Enjoy!!!
Code language: Java (java)

Follow the on-screen instructions to complete the installation.

source "/home/suresh/.sdkman/bin/sdkman-init.sh"
Code language: Java (java)

You can verify the installation of sdkman with following command.

sdk version
Code language: Java (java)

If the installation was successful, the version should be displayed. Something like:

sdkman 5.16.0
Code language: Java (java)

Installing Java

Next let’s install Java

Following command lists all the JDK’s that can be installed

sdk list java
Code language: Java (java)

The above command show lists like below.

================================================================================ Available Java Versions for Linux ARM 64bit ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- AdoptOpenJDK | | 8.0.275+1.hs | adpt | | 8.0.275+1.hs-adpt | | 8.0.252.hs | adpt | | 8.0.252.hs-adpt Corretto | | 19 | amzn | | 19-amzn | | 19.0.1 | amzn | | 19.0.1-amzn | | 17.0.5 | amzn | | 17.0.5-amzn | | 17.0.4 | amzn | | 17.0.4-amzn | | 11.0.17 | amzn | | 11.0.17-amzn | | 11.0.16 | amzn | | 11.0.16-amzn | | 8.0.352 | amzn | | 8.0.352-amzn | | 8.0.342 | amzn | | 8.0.342-amzn Dragonwell | | 17.0.5 | albba | | 17.0.5-albba | | 17.0.4 | albba | | 17.0.4-albba | | 11.0.17 | albba | | 11.0.17-albba | | 11.0.16 | albba | | 11.0.16-albba | | 8.0.352 | albba | | 8.0.352-albba | | 8.0.345 | albba | | 8.0.345-albba GraalVM | | 22.3.r19 | grl | | 22.3.r19-grl | | 22.3.r17 | grl | | 22.3.r17-grl | | 22.3.r11 | grl | | 22.3.r11-grl | | 22.2.r17 | grl | | 22.2.r17-grl | | 22.2.r11 | grl | | 22.2.r11-grl | | 22.1.0.r17 | grl | | 22.1.0.r17-grl | | 22.1.0.r11 | grl | | 22.1.0.r11-grl | | 22.0.0.2.r17 | grl | | 22.0.0.2.r17-grl | | 22.0.0.2.r11 | grl | | 22.0.0.2.r11-grl | | 21.3.3.r17 | grl | | 21.3.3.r17-grl | | 21.3.3.r11 | grl | | 21.3.3.r11-grl | | 21.3.3.1.r17 | grl | | 21.3.3.1.r17-grl | | 21.3.3.1.r11 | grl | | 21.3.3.1.r11-grl | | 21.3.2.r17 | grl | | 21.3.2.r17-grl | | 21.3.2.r11 | grl | | 21.3.2.r11-grl Java.net | | 20.ea.26 | open | | 20.ea.26-open | | 20.ea.25 | open | | 20.ea.25-open | | 20.ea.24 | open | | 20.ea.24-open | | 20.ea.23 | open | | 20.ea.23-open | | 20.ea.22 | open | | 20.ea.22-open | | 19 | open | | 19-open | | 19.0.1 | open | | 19.0.1-open | | 11.0.12 | open | | 11.0.12-open | | 8.0.302 | open | | 8.0.302-open Liberica | | 19.fx | librca | | 19.fx-librca | | 19.0.1.fx | librca | | 19.0.1.fx-librca | | 19.0.1 | librca | | 19.0.1-librca .....
Code language: Java (java)

Using identifier shown in above table, we can install the required JDK’s

The generic command to install java is

sdk install java <identifier>
Code language: Java (java)

Let’s install the GraalVM Java 17 and 11 versions

sdk install java 22.3.r17-gr
Code language: Java (java)
Downloading: java 22.3.r17-grl In progress... #####################################################################
Code language: Java (java)

You can verify the installed Java versions by running the below command .

The status column indicates the installed status

sdk list java
Code language: Java (java)
================================================================================ Available Java Versions for Linux ARM 64bit ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- AdoptOpenJDK | | 8.0.275+1.hs | adpt | | 8.0.275+1.hs-adpt | | 8.0.252.hs | adpt | | 8.0.252.hs-adpt Corretto | | 19 | amzn | | 19-amzn | | 19.0.1 | amzn | | 19.0.1-amzn | | 17.0.5 | amzn | | 17.0.5-amzn | | 17.0.4 | amzn | | 17.0.4-amzn | | 11.0.17 | amzn | | 11.0.17-amzn | | 11.0.16 | amzn | | 11.0.16-amzn | | 8.0.352 | amzn | | 8.0.352-amzn | | 8.0.342 | amzn | | 8.0.342-amzn Dragonwell | | 17.0.5 | albba | | 17.0.5-albba | | 17.0.4 | albba | | 17.0.4-albba | | 11.0.17 | albba | | 11.0.17-albba | | 11.0.16 | albba | | 11.0.16-albba | | 8.0.352 | albba | | 8.0.352-albba | | 8.0.345 | albba | | 8.0.345-albba GraalVM | | 22.3.r19 | grl | | 22.3.r19-grl | >>> | 22.3.r17 | grl | installed | 22.3.r17-grl | | 22.3.r11 | grl | installed | 22.3.r11-grl | | 22.2.r17 | grl | | 22.2.r17-grl | | 22.2.r11 | grl | | 22.2.r11-grl | | 22.1.0.r17 | grl | | 22.1.0.r17-grl | | 22.1.0.r11 | grl | | 22.1.0.r11-grl | | 22.0.0.2.r17 | grl | | 22.0.0.2.r17-grl | | 22.0.0.2.r11 | grl | | 22.0.0.2.r11-grl | | 21.3.3.r17 | grl | | 21.3.3.r17-grl | | 21.3.3.r11 | grl | | 21.3.3.r11-grl | | 21.3.3.1.r17 | grl | | 21.3.3.1.r17-grl | | 21.3.3.1.r11 | grl | | 21.3.3.1.r11-grl | | 21.3.2.r17 | grl | | 21.3.2.r17-grl | | 21.3.2.r11 | grl | | 21.3.2.r11-grl Java.net | | 20.ea.26 | open | | 20.ea.26-open | | 20.ea.25 | open | | 20.ea.25-open | | 20.ea.24 | open | | 20.ea.24-open | | 20.ea.23 | open | | 20.ea.23-open | | 20.ea.22 | open | | 20.ea.22-open | | 19 | open | | 19-open | | 19.0.1 | open | | 19.0.1-open | | 11.0.12 | open | | 11.0.12-open | | 8.0.302 | open | | 8.0.302-open Liberica | | 19.fx | librca | | 19.fx-librca | | 19.0.1.fx | librca | | 19.0.1.fx-librca | | 19.0.1 | librca | | 19.0.1-librca | | 19 | librca | | 19-librca | | 17.0.5.fx | librca | | 17.0.5.fx-librca | | 17.0.5 | librca | | 17.0.5-librca
Code language: Java (java)

Knowing current version of Java

sdk current java
Code language: Java (java)
Using java version 22.3.r17-grl
Code language: Java (java)

Switching default version of Java

sdk default java 22.3.r11-grl
Code language: Java (java)
Default java version set to 22.3.r11-grl
Code language: Java (java)

Checking the current version of Java after changing default java version

sdk current java
Code language: Java (java)
Default java version set to 22.3.r11-grl
Code language: Java (java)

Installing the Maven

You can list available Maven version with following command

sdk list maven
Code language: Java (java)
================================================================================ Available Maven Versions ================================================================================ 3.8.6 3.3.3 3.8.5 3.3.1 3.8.4 3.2.5 3.8.3 3.2.3 3.8.2 3.2.2 3.8.1 3.2.1 3.6.3 3.1.1 3.6.2 3.1.0 3.6.1 3.0.5 3.6.0 3.0.4 3.5.4 3.5.3 3.5.2 3.5.0 3.3.9 ================================================================================ + - local version * - installed > - currently in use
Code language: Java (java)

Install required Maven version

sdk install maven 3.8.6
Code language: Java (java)

Check the Maven installation

mvn --version
Code language: Java (java)

If you see the error message like below

Command 'mvn' not found, but can be installed with: sudo apt install maven
Code language: Java (java)

Run the command to make installed maven, default version

sdk default maven 3.8.6
Code language: Java (java)

Installing IntelliJ Idea

Next we will install IntelliJ Idea Community Edition IDE to develop Java applications

Go to IntelliJ Idea download page and download aarch64 tar file

Extract the tar file

sudo tar -xvf ideaIC-2022.3-aarch64.tar -C /opt/
Code language: Java (java)

rename the folder

sudo mv /opt/idea-IC-223.7571.182/ /opt/idea
Code language: Java (java)

IntelliJ Idea Linux arm version does not support creating shortcut to program on Desktop

If you want to start the IDE

Open your terminal and run the following command.

/opt/idea/bin/idea.sh
Code language: Java (java)

To create desktop shortcut you need to create launcher file manually.

Right click on the desktop and click on “Create Launcher” menu option.

In “Create Launcher” window enter following details and click “Ok” button to create desktop shortcut.

  • Name : IntelliJ Idea
  • Description : IntelliJ Idea
  • Command : /opt/idea/bin/idea.sh
  • Icon : /opt/idea/bin/idea.png
  • Terminal : No
  • Type : Application

You can also create launcher by creating “IntelliJIdea.desktop” file and enter following text into it.

[Desktop Entry] Name=IntelliJ Idea GenericName=IntelliJ Idea Comment= Exec=/opt/idea/bin/idea.sh Type=Application Icon=/opt/idea/bin/idea.png Terminal=false
Code language: Java (java)

Installing Eclipse

If you prefer Eclipse to IntelliJ Idea

Go to https://www.eclipse.org/downloads/ page and download the AArch64 version of the tar of tar file.

Unpack the installer

sudo tar -xvf eclipse-inst-jre-linux-aarch64.tar.gz
Code language: Java (java)

Go to the extracted “eclipse-installed” folder and click on the “eclipse-inst” file to open the installer.

From the installer choose one of below options

Eclipse IDE for Java Developer

or

Eclipse IDE for Enterprise Java Developer

Click on the “Install” button

Installing VS Code

Go to https://code.visualstudio.com/Download# and download the arm64 deb package.

Install VS Code with following command.

sudo dpkg -i code_1.74.0-1670258379_arm64.deb
Code language: Java (java)

Installing Docker

Before you install Docker Engine for the first time on a new host machine, you need to set up the Docker repository. Afterward, you can install and update Docker from the repository.

sudo apt update
Code language: Java (java)
sudo apt install \ ca-certificates \ curl \ gnupg \ lsb-release
Code language: Java (java)
sudo mkdir -p /etc/apt/keyrings
Code language: Java (java)
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
Code language: Java (java)
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Code language: Java (java)

Grant read permission for the Docker public key file before updating the package

sudo chmod a+r /etc/apt/keyrings/docker.gpg sudo apt-get update
Code language: Java (java)

Install Docker Engine

To install the latest version, run following command

sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
Code language: Java (java)

The Docker daemon always runs as the root user . other users can access only access it using “sudo”

If you don’t want to preface the docker command with sudo, create a Unix group called docker and add users to it. When the Docker daemon starts, it creates a Unix socket accessible by members of the docker group. 

Create docker group

sudo groupadd docker
Code language: Java (java)

Add your user to the docker group.

sudo usermod -aG docker $USER
Code language: Java (java)

You can run the following command to activate the changes to groups

newgrp docker
Code language: Java (java)

You can also Log out and log back in so that your group membership is re-evaluated.

Verify that you can run docker commands without sudo.

docker run hello-world
Code language: Java (java)

Installing Docker compose

sudo curl -L "https://github.com/docker/compose/releases/download/v2.14.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
Code language: Java (java)

Apply executable permissions to docker-compose binary

sudo chmod +x /usr/local/bin/docker-compose
Code language: Java (java)

Test with by running

docker-compose --help
Code language: Java (java)

Starting the docker service on system startup

sudo systemctl enable docker.service sudo systemctl enable containerd.service
Code language: Java (java)

Installing NVM

NVM is used to install and switch between different versions of Node JS

From Terminal  run nvm installer script

curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
Code language: Java (java)

The nvm installer script creates an environment entry to the login script of the current user. You can either log out and log in again to load the environment or execute the below command to do the same.

source ~/.bashrc
Code language: Java (java)

check the installation with following command

nvm -v
Code language: Java (java)

Installing Node using NVM

Open your terminal and use following commands to install the Node JS.

You can list all available Node JS version with nvm

nvm list-remote
Code language: Java (java)

install the latest lts version

nvm install --lts
Code language: Java (java)

install specific version

nvm install <version-number>
Code language: Java (java)

Switching between Node versions

To use the latest version of LTS

nvm use --lts
Code language: Java (java)

To use specific version of Node

nvm use <version-number>
Code language: Java (java)

Now the remote desktop is ready for the Java and JavaScript related application development.

You might also interested in

Similar Posts