Reputation: 1713
When trying to use the Linux version of Oracle's JDK on the latest Windows 10 build having support for bash, I am running into a problem with the prompt hanging whenever attempting to invoke the java
binary.
Typing even something as simple as java -version
hangs and I have to terminate the process to resume control.
Anyone got this working yet?
Upvotes: 92
Views: 109153
Reputation: 121
#!/bin/bash
set -ex
# UPDATE THESE URL
export JDK_URL=https://download.oracle.com/java/21/latest/jdk-21_linux-x64_bin.tar.gz
# Download Oracle Java 21 accepting the license
wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
${JDK_URL}
# Extract the archive
tar -xzvf jdk-*.tar.gz
# Clean up the tar
rm -fr jdk-*.tar.gz
# Make the jvm dir if it doesn't exist
sudo mkdir -p /usr/lib/jvm
# Move the JDK to the jvm directory
sudo mv jdk-21 /usr/lib/jvm/oracle_jdk21
# Set up alternatives for java and javac
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle_jdk21/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle_jdk21/bin/javac 2000
# Set environment variables
sudo echo "export J2SDKDIR=/usr/lib/jvm/oracle_jdk21
export J2REDIR=/usr/lib/jvm/oracle_jdk21/jre
export PATH=\$PATH:/usr/lib/jvm/oracle_jdk21/bin:/usr/lib/jvm/oracle_jdk21/db/bin:/usr/lib/jvm/oracle_jdk21/jre/bin
export JAVA_HOME=/usr/lib/jvm/oracle_jdk21
export DERBY_HOME=/usr/lib/jvm/oracle_jdk21/db" | sudo tee -a /etc/profile.d/oraclejdk.sh
# Reload profile to apply the changes
source /etc/profile.d/oraclejdk.sh
And now I can do the following
h___g@mars:~/Documents$ java --version
java 21.0.4 2024-07-16 LTS
Java(TM) SE Runtime Environment (build 21.0.4+8-LTS-274)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.4+8-LTS-274, mixed mode, sharing)
Updated version from Mr. fieldju. Credit goes to him
Upvotes: 0
Reputation: 2305
The steps I did for a fresh install of Oracle JDK 8 on my Bash (Windows 10):
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
Accept licenses
You're done! Check your java version using java -version
and expected output should be something like this:
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
P.S. At the time of writing this, stable version Oracle 9 JDK has been released, you could probably tweak step 4 above.
Upvotes: 6
Reputation: 492
This has referred to all above answers and comments and tries to put it together as a complete guidance.
It is straight forward to have jdk installed directly in WSL2 Linux therefore we skip this option here.
It is perfectly okay to use/share the Windows JDK with WSL2 Linux, you just need to setup two things, JAVA_HOME
and PATH
in your Linux shell profile, in my case, ~/.bashrc
.
By default it is installed in here (version can be different) C:\Program Files\Java\jdk1.8.0_321
WSL2 will be able to access to this Windows file location in such format /mnt/c/Program Files/Java/jdk1.8.0_321
Therefore,
Edit this file,
$ sudo nano ~/.bashrc
by adding following to its bottom
export JAVA_HOME="/mnt/c/Program Files/Java/jdk1.8.0_321"
export PATH=$JAVA_HOME/bin:$PATH
export alias java='java.exe'
export alias javac='javac.exe'
save it by Ctrl/CMD + O
then Enter
Exit nano editor by Ctrl/CMD + X
Refresh the profile to load added variables by
$ source ~/.bashrc
There you go. You can now verify it is working by
$ java -version
It will give you something similar to following,
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
You have done three things in total here,
to verify this:
$ echo $JAVA_HOME
/mnt/c/Program Files/Java/jdk1.8.0_321
to verify this:
$ echo $PATH
/mnt/c/Program Files/Java/jdk1.8.0_321/bin:...
java
instead of java.exe
to verify this:
$ java -version
java version "1.8.0_321"
Java(TM) SE Runtime Environment (build 1.8.0_321-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.321-b07, mixed mode)
Unfortunately this will make you do something like which java
. In order to do this as for native Linux software, you might want to follow further steps like in here (not verified): https://stackoverflow.com/a/64489793/3107052 You however really don't need this as this won't do anything more than telling you where is your java that was borrowed from Windows.
Upvotes: 2
Reputation: 106
I had the same problem but I solve it with one command:
sudo apt upgrade
then run these 3 commands:
sudo apt install default-jre
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless
Upvotes: -1
Reputation: 617
A lot of answers are recommending installing the Linux JDK even though they have a perfectly good Windows JDK. The beauty of WSL is preventing you from having to do things like this, as the file systems are interoperable. As long as you take the file extensions into account (outlined below), you would only have to install both for niche situations.
You can do this very simply by adding the following line of code to your .bashrc
file, assuming that your Windows Environment variables are set correctly and WSL is installed:
# Shared environment variables
export JAVA_HOME=/mnt/d/Java/jdk11.0.4_10
Just ensure that you change the directory to point to your JDK folder. In my case, it's in D:\Java\jdk11.0.4_10
which in WSL is /mnt/d/Java/jdk11.0.4_10
Also, since you're using Windows binaries, you must specify the file type when running from a WSL bash shell:
Calling Windows JDK from:
CMD
:
javac MyClass.java
java MyClass
WSL:
javac.exe MyClass.java
java.exe MyClass
Note WSL requires .exe
since it is a Windows binary. When using the Linux distro of the OpenJDK, no extension is required..
Upvotes: 6
Reputation: 9146
This worked for me. Though, I don't like adding these weird repositories. Linuxuprising? Would be great if Microsoft would fix that.
sudo add-apt-repository ppa:linuxuprising/java
sudo apt update
sudo apt install oracle-java10-installer
Upvotes: 2
Reputation: 9189
It seems in 2017 august the solution is simpler as suggested by @noah-david.
I was able to install Oracle JDK 8 from the “WebUpd8” team repository.
Instructions. To add the repository:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
To install:
sudo apt-get install oracle-java8-installer
sudo apt install oracle-java8-set-default
After install
costin@amanta-win:/mnt/c/work$ java -version
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
costin@amanta-win:/mnt/c/work$ which java
/usr/bin/java
costin@amanta-win:/mnt/c/work$ uname -a
Linux amanta-win 4.4.0-43-Microsoft #1-Microsoft Wed Dec 31 14:42:53 PST 2014
x86_64 x86_64 x86_64 GNU/Linux
Upvotes: 69
Reputation: 7568
I must be missing something... all I did was:
sudo apt-get update
sudo apt-get install default-jdk
java -version
output:
java version "1.7.0_131"
OpenJDK Runtime Environment (IcedTea 2.6.9) (7u131-2.6.9-0ubuntu0.14.04.2)
OpenJDK 64-Bit Server VM (build 24.131-b00, mixed mode)
Upvotes: 54
Reputation: 1482
I wanted to clarify that as of 9 December 2016, you most certainly can install Java 8 on Ubuntu Bash for Windows 10 and that @Karl Horton is correct.
You will need to install unzip sudo apt-get install unzip
Copy this script somewhere in your bash for windows session and make it executable (chmod +x filename). If you do not use a command line based editor such as vim then you will have windows line endings to deal with. you can use dos2unix or your preferred way of dealing with that. I just paste it into a file using vim.
#!/bin/bash
set -ex
# UPDATE THESE URLs
export JDK_URL=http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
export UNLIMITED_STRENGTH_URL=http://download.oracle.com/otn-pub/java/jce/8/jce_policy-8.zip
# Download Oracle Java 8 accepting the license
wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
${JDK_URL}
# Extract the archive
tar -xzvf jdk-*.tar.gz
# clean up the tar
rm -fr jdk-*.tar.gz
# mk the jvm dir
sudo mkdir -p /usr/lib/jvm
# move the server jre
sudo mv jdk1.8* /usr/lib/jvm/oracle_jdk8
# install unlimited strength policy
wget --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" \
${UNLIMITED_STRENGTH_URL}
unzip jce_policy-8.zip
mv UnlimitedJCEPolicyJDK8/local_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/
mv UnlimitedJCEPolicyJDK8/US_export_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle_jdk8/jre/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle_jdk8/bin/javac 2000
sudo echo "export J2SDKDIR=/usr/lib/jvm/oracle_jdk8
export J2REDIR=/usr/lib/jvm/oracle_jdk8/jre
export PATH=$PATH:/usr/lib/jvm/oracle_jdk8/bin:/usr/lib/jvm/oracle_jdk8/db/bin:/usr/lib/jvm/oracle_jdk8/jre/bin
export JAVA_HOME=/usr/lib/jvm/oracle_jdk8
export DERBY_HOME=/usr/lib/jvm/oracle_jdk8/db" | sudo tee -a /etc/profile.d/oraclejdk.sh
And now I can do the following
fieldju@DESKTOP-LTL6MIC:~$ java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
The links and versions in the above script are likely to be out of date by the time you read this, so just head over to http://www.oracle.com/technetwork/java/javase/downloads/index.html accept the license so that their js lets you copy the new URLs and you should be good to go.
Upvotes: 93
Reputation: 2821
I used the script given by @fieldju but he missed some things that the script depends on, and also copy/pasting the contents results in having windows line endings/carriage returns (/r
) which will need replacing to linux returns. Also, I found it a lot more straightforward to download the zips needed first and put them alongside the script. Here's a full list of what I did:
bash
, type sudo apt-get install zip unzip
to make sure unzip/zip is installed on your bash
consolebash
NOTE: don't change the file name to ensure it works with the scriptjava_install_predownloaded.sh
in the same folder alongside the zips:Script:
#!/bin/bash
# Extract the archive
tar -xzvf jdk-*.tar.gz
# mk the jvm dir
sudo mkdir -p /usr/lib/jvm
# move the server jre
sudo mv jdk1.8* /usr/lib/jvm/oracle_jdk8
# install unlimited strength policy
mv UnlimitedJCEPolicyJDK8/local_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/
mv UnlimitedJCEPolicyJDK8/US_export_policy.jar /usr/lib/jvm/oracle_jdk8/jre/lib/security/
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/oracle_jdk8/jre/bin/java 2000
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/oracle_jdk8/bin/javac 2000
sudo echo "export J2SDKDIR=/usr/lib/jvm/oracle_jdk8
export J2REDIR=/usr/lib/jvm/oracle_jdk8/jre
export PATH=$PATH:/usr/lib/jvm/oracle_jdk8/bin:/usr/lib/jvm/oracle_jdk8/db/bin:/usr/lib/jvm/oracle_jdk8/jre/bin
export JAVA_HOME=/usr/lib/jvm/oracle_jdk8
export DERBY_HOME=/usr/lib/jvm/oracle_jdk8/db" | sudo tee -a /etc/profile.d/oraclejdk.sh
This code is a modified version from @fieldju which assumes the zips are already downloaded and in the same folder as this .sh
file
because the file has the windows carriage returns you need to ensure they are replaced, so in bash
navigate to where you saved java_install_predownloaded.sh
and run the following command:
sed 's/^M$//' java_install_predownloaded.sh > java_install_predownloaded_unix.sh
I also then ran the following to ensure there are definitely no line endings from windows:
sed 's/\r$//' java_install_predownloaded_unix.sh > java_install_predownloaded_unix_final.sh
java_install_predownloaded_unix_final.sh
will be in the folder which is our 'cleaned' version without the windows line endings, so you just need to execute ./java_install_predownloaded_unix_final.sh
in bash
and watch the magic happen. Hey Presto you now have java installed on your bash instance on windows!Upvotes: 9
Reputation: 21
it may work for Insider Preview build 14905, but hangs on Windows 10 Pro build 14393. A good part of the problem is that Microsoft is using Ubuntu 14.0.4. 14.10 or later would probably better support Java 8.
Upvotes: 1
Reputation: 539
I'm confirming here that Oracle JDK Version 8u102, x64 for linux is installable ok on Windows 10 Insider Build 14905, released on 16th August 2016.
Downloadable from here after accepting license
C:\>systeminfo | findstr /B /C:"OS Name" /C:"OS Version"
OS Name: Microsoft Windows 10 Pro Insider Preview
OS Version: 10.0.14905 N/A Build 14905
I followed the instructions here: wikiHow Oracle Java Install
$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)
$ javac -version
javac 1.8.0_102
I've not yet had a chance to really stress this install, but this is better than the previous hangs.
Upvotes: 5
Reputation: 131
It seems that the problem occured with java oracle version, I have download the openJDK version and now it work
Upvotes: 0
Reputation: 1713
Seems installing JDK8 is not working at the moment on Build#14316 of WSL. But trying to install JDK7 worked fine for me. Exploring the limits of this installation at the moment and will keep posted. Idea came from here : https://github.com/Microsoft/BashOnWindows/issues/196
Upvotes: 5