Skip to content

Instantly share code, notes, and snippets.

@RayWithAnA
Created March 10, 2018 00:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save RayWithAnA/f5ce4e673d947761d31e99006fadb813 to your computer and use it in GitHub Desktop.
Save RayWithAnA/f5ce4e673d947761d31e99006fadb813 to your computer and use it in GitHub Desktop.
If you want to install Oracle JDK 9
java-package doesn't support Oracle Java 9, but here are some steps to get things working.
Tested on Debian in Vagrant, might be useful if you want to build a VM or Docker image.
The patch will allow you to build a package that adds the Oracle Java 9 JDK and updates alternatives.
# Watch the mailing list:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=876426
# Download Java 9:
http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html
# Apply the patch to java-package:
git clone https://anonscm.debian.org/git/pkg-java/java-package.git
cd java-package
git apply java-package.oracle-jdk-9.patch
# Build java-package
sudo apt-get install dpkg-dev debhelper
dpkg-buildpackage -us -uc
# Build the jdk package
sudo apt-get install libasound2 libfontconfig1 libgl1-mesa-glx libgtk-3-0 libgtk2.0-0 libx11-6 libxslt1.1 libxtst6 libxxf86vm1 unzip
sudo dpkg -i ../java-package_0.63_all.deb
make-jpkg ../jdk-9.0.4_linux-x64_bin.tar.gz
# Install the jdk
sudo apt-get install java-common
sudo dpkg -i oracle-java9-jdk_9.0.4_amd64.deb
# Some notes:
* https://github.com/Debian/java-package
* https://askubuntu.com/a/844551
* https://github.com/dnschneid/crouton/wiki/Installing-Oracle-JDK
* http://www.oracle.com/technetwork/java/javase/downloads/jdk9-downloads-3848520.html
diff --git a/debian/README.Debian b/debian/README.Debian
index c09ca39..b73090b 100644
--- a/debian/README.Debian
+++ b/debian/README.Debian
@@ -15,7 +15,7 @@ Typical usage consists in
Supported java binary distributions currently include:
* Oracle (http://www.oracle.com/technetwork/java/javase/downloads) :
- - The J2SE Development Kit (JDK), version 6, 7 and 8
+ - The J2SE Development Kit (JDK), version 6, 7, 8 and 9
- The J2SE Runtime Environment (JRE), version 6, 7 and 8
- The J2SE API Javadoc, version 6, 7 and 8
(Choose tar.gz archives or self-extracting archives, do _not_ choose the RPM!)
diff --git a/debian/changelog b/debian/changelog
index 15ae206..db3516c 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,5 +1,6 @@
java-package (0.63) UNRELEASED; urgency=medium
+ * Add support for JDK 9 (#876426)
* Team upload.
* Suggest openjdk-8-jre instead of openjdk-7-jre
diff --git a/debian/control b/debian/control
index 52dadab..2e04213 100644
--- a/debian/control
+++ b/debian/control
@@ -17,6 +17,7 @@ Depends: debhelper (>= 9),
libasound2,
libfontconfig1,
libgl1-mesa-glx,
+ libgtk-3-0,
libgtk2.0-0,
libx11-6,
libxslt1.1,
@@ -32,7 +33,7 @@ Description: Utility for creating Java Debian packages
.
Supported java binary distributions currently include:
* Oracle (http://www.oracle.com/technetwork/java/javase/downloads) :
- - The Java Development Kit (JDK), version 6, 7 and 8
+ - The Java Development Kit (JDK), version 6, 7, 8 and 9
- The Java Runtime Environment (JRE), version 6, 7 and 8
- The Java API Javadoc, version 6, 7 and 8
Choose tar.gz archives or self-extracting archives (_not_ RPM).
diff --git a/lib/oracle-jdk.sh b/lib/oracle-jdk.sh
index 23ce971..821e7a4 100644
--- a/lib/oracle-jdk.sh
+++ b/lib/oracle-jdk.sh
@@ -3,7 +3,25 @@ j2se_detect_oracle_j2sdk=oracle_j2sdk_detect
oracle_j2sdk_detect() {
j2se_release=0
- # Update or GA release (jdk-7u15-linux-i586.tar.gz)
+ # 9: Update or GA release (jdk-9.0.4_linux-x64_bin.tar.gz)
+ if [[ $archive_name =~ jdk-([0-9]+)(\.(([0-9]+)\.([0-9]+)))?_linux-(x64)_bin\.(tar\.gz) ]]
+ then
+ j2se_release=${BASH_REMATCH[1]}
+ j2se_update=${BASH_REMATCH[3]}
+ j2se_minor_version=${BASH_REMATCH[4]}
+ j2se_revision_version=${BASH_REMATCH[5]}
+ j2se_arch=${BASH_REMATCH[6]}
+ if [[ $j2se_update != "" ]]
+ then
+ j2se_version_name="$j2se_release Update $j2se_update"
+ j2se_version=${j2se_release}.${j2se_update}${revision}
+ else
+ js2e_version_name="$js2e_release GA"
+ js2e_version=${js2e_release}${revision}
+ fi
+ fi
+
+ # Pre 9: Update or GA release (jdk-7u15-linux-i586.tar.gz)
if [[ $archive_name =~ jdk-([0-9]+)(u([0-9]+))?-linux-(i586|x64|amd64|arm-vfp-hflt)\.(bin|tar\.gz) ]]
then
j2se_release=${BASH_REMATCH[1]}
@@ -106,6 +124,24 @@ EOF
fi
oracle_jre_lib_hl="jexec"
oracle_bin_jdk="appletviewer extcheck idlj jar jarsigner javac javadoc javah javap jcmd jconsole jdb jdeps jhat jinfo jmap jmc jps jrunscript jsadebugd jstack jstat jstatd jvisualvm native2ascii rmic schemagen serialver wsgen wsimport xjc"
+
+ # changes for oracle java 9 (only one arch)
+ if [[ $j2se_release == 9 ]]
+ then
+ oracle_jre_bin_hl=""
+ oracle_jre_bin_jre=""
+ oracle_no_man_jre_bin_jre=""
+ oracle_jre_lib_hl=""
+ oracle_bin_jdk=""
+
+ # the man pages say: 'a list of alternatives of the form jre|jdk <name> <path>.'
+ oracle_no_man_lib_jdk="jexec"
+ oracle_no_man_bin_jdk="java javaws jcontrol keytool orbd pack200 policytool rmid rmiregistry servertool tnameserv unpack200 appletviewer extcheck idlj jaotc jar jarsigner javac javadoc javah javap javapackager jcmd jconsole jcontrol jdb jdeprscan jdeps jhat jhsdb ji jimage jinfo jjs jlink jmap jmc jmod jps jrunscript jsadebugd jshell jstack jstat jstatd jvisualvm jweblauncher native2ascii nfo policytool rmic schemagen serialver wsgen wsimport xjc"
+ else
+ oracle_no_man_lib_jdk=""
+ oracle_no_man_bin_jdk=""
+ fi
+
j2se_package="$j2se_vendor-java$j2se_release-jdk"
j2se_run
fi
@@ -125,10 +161,16 @@ if [ -n "$oracle_no_man_jre_bin_jre" ]; then
fi
install_no_man_alternatives $jvm_base$j2se_name/jre/lib $oracle_jre_lib_hl
install_alternatives $jvm_base$j2se_name/bin $oracle_bin_jdk
+install_no_man_alternatives $jvm_base$j2se_name/lib $oracle_no_man_lib_jdk
+install_no_man_alternatives $jvm_base$j2se_name/bin $oracle_no_man_bin_jdk
# No plugin for ARM architecture yet
if [ "${DEB_BUILD_ARCH:0:3}" != "arm" ]; then
plugin_dir="$jvm_base$j2se_name/jre/lib/$DEB_BUILD_ARCH"
+# 9 has no arch dir
+if [[ $j2se_release == 9 ]]; then
+plugin_dir="$jvm_base$j2se_name/lib"
+fi
for b in $browser_plugin_dirs;do
install_browser_plugin "/usr/lib/\$b/plugins" "libjavaplugin.so" "\$b-javaplugin.so" "\$plugin_dir/libnpjp2.so"
done
@@ -149,10 +191,16 @@ if [ -n "$oracle_no_man_jre_bin_jre" ]; then
fi
remove_alternatives $jvm_base$j2se_name/jre/lib $oracle_jre_lib_hl
remove_alternatives $jvm_base$j2se_name/bin $oracle_bin_jdk
+remove_alternatives $jvm_base$j2se_name/lib $oracle_no_man_lib_jdk
+remove_alternatives $jvm_base$j2se_name/bin $oracle_no_man_bin_jdk
# No plugin for ARM architecture yet
if [ "${DEB_BUILD_ARCH:0:3}" != "arm" ]; then
plugin_dir="$jvm_base$j2se_name/jre/lib/$DEB_BUILD_ARCH"
+# 9 has no arch dir
+if [[ $j2se_release == 9 ]]; then
+plugin_dir="$jvm_base$j2se_name/lib"
+fi
for b in $browser_plugin_dirs;do
remove_browser_plugin "\$b-javaplugin.so" "\$plugin_dir/libnpjp2.so"
done
@@ -173,15 +221,22 @@ EOF
fi
jinfos "hl" $jvm_base$j2se_name/jre/lib/ $oracle_jre_lib_hl
jinfos "jdk" $jvm_base$j2se_name/bin/ $oracle_bin_jdk
+ jinfos "jdk" $jvm_base$j2se_name/lib/ $oracle_no_man_lib_jdk
+ jinfos "jdk" $jvm_base$j2se_name/bin/ $oracle_no_man_bin_jdk
+
if [ "${DEB_BUILD_ARCH:0:3}" != "arm" ]; then
for b in $browser_plugin_dirs;do
- echo "plugin iceweasel-javaplugin.so $jvm_base$j2se_name/jre/lib/$DEB_BUILD_ARCH/libnpjp2.so"
+ if [[ $j2se_release != 9 ]]; then
+ echo "plugin iceweasel-javaplugin.so $jvm_base$j2se_name/jre/lib/$DEB_BUILD_ARCH/libnpjp2.so"
+ else
+ echo "plugin iceweasel-javaplugin.so $jvm_base$j2se_name/lib/libnpjp2.so"
+ fi
done
fi
}
oracle_j2sdk_control() {
- build_depends="libasound2, libgl1-mesa-glx, libgtk2.0-0, libxslt1.1, libxtst6, libxxf86vm1"
+ build_depends="libasound2, libgl1-mesa-glx, libgtk2.0-0, libgtk-3-0, libxslt1.1, libxtst6, libxxf86vm1"
j2se_control
java_browser_plugin="java-browser-plugin, "
depends="\${shlibs:Depends}"
diff --git a/make-jpkg b/make-jpkg
index 3db992c..84e6bf5 100755
--- a/make-jpkg
+++ b/make-jpkg
@@ -73,7 +73,7 @@ $program_name builds a Debian package from the given Java binary distribution FI
Supported java binary distributions currently include:
* Oracle (http://www.oracle.com/technetwork/java/javase/downloads) :
- - The Java Development Kit (JDK), version 6, 7 and 8
+ - The Java Development Kit (JDK), version 6, 7, 8 and 9
- The Java Runtime Environment (JRE), version 6, 7 and 8
- The Java API Javadoc, version 6, 7 and 8
(Choose tar.gz archives or self-extracting archives, do _not_ choose the RPM!)
diff --git a/make-jpkg.1 b/make-jpkg.1
index 34a5462..50f5b63 100644
--- a/make-jpkg.1
+++ b/make-jpkg.1
@@ -30,7 +30,7 @@ distribution FILE.
.PP
Supported java binary distributions currently include:
* Oracle (http://www.oracle.com/technetwork/java/javase/downloads) :
- - The Java Development Kit (JDK), version 6, 7 and 8
+ - The Java Development Kit (JDK), version 6, 7, 8 and 9
- The Java Runtime Environment (JRE), version 6, 7 and 8
- The Java API Javadoc, version 6, 7 and 8
(Choose tar.gz archives or self-extracting archives, do _not_ choose the RPM!)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment