There are arguments for and against holding up marking these as stable in order to wait until the equivalent versions of Icedtea-bin are ready. I have no interest in partipating in those discussions and frankly consider them to be wasteful of time since the solution is so easy if you, like me, prefer to not have Oracle's Java loaded onto your systems.
- Step 1) - We need to know what the actual minimum version of virtual/jdk and virtual/jre we really need. The reason for this is to determine which level of Java 1.X we need to have installed. To do this, we run 'equery'. 'equery' is a portage tool included in 'app-portage/gentoolkit'. If you have not already install 'gentoolkit', then execute:Now execute:
Code: Select all
emerge app-portage/gentoolkitand also execute:Code: Select all
equery d virtual/jre * These packages depend on virtual/jre: app-eselect/eselect-java-0.1.0 (>=virtual/jre-1.5) app-office/libreoffice-4.4.2.2 (java ? >=virtual/jre-1.6) dev-java/jgoodies-looks-1.2.2-r2 (>=virtual/jre-1.5) dev-java/swt-3.7.2-r1 (>=virtual/jre-1.4) dev-lang/R-3.1.2 (java ? >=virtual/jre-1.5) dev-libs/protobuf-2.6.1-r3 (java ? >=virtual/jre-1.5) dev-vcs/subversion-1.8.13 (java ? >=virtual/jre-1.5) games-board/domination-1.1.1.5 (>=virtual/jre-1.5) kde-base/poxml-4.14.3 (extras ? >=virtual/jre-1.5) media-gfx/aoi-2.7.2 (>=virtual/jre-1.5) media-gfx/opcion-1.1.1-r2 (>=virtual/jre-1.4) media-libs/libbluray-0.7.0 (java ? >=virtual/jre-1.6) media-libs/libcaca-0.99_beta19 (java ? >=virtual/jre-1.5) media-libs/libjpeg-turbo-1.4.0 (java ? >=virtual/jre-1.5) media-libs/opencv-2.4.10 (java ? >=virtual/jre-1.6) media-video/bdsup2sub-4.0.0-r1 (>=virtual/jre-1.6) net-dns/libidn-1.30 (java ? >=virtual/jre-1.5) net-print/cups-2.0.2-r1 (java ? >=virtual/jre-1.6) sys-devel/gettext-0.19.4 (java ? >=virtual/jre-1.4) sys-libs/db-5.3.28-r2 (java ? >=virtual/jre-1.5) sys-libs/db-6.0.30-r1 (java ? >=virtual/jre-1.5)What 'equery' is doing here is listing all the packages that are already installed on your system which might require java and what the oldest version of java is that will work.Code: Select all
equery d virtual/jdk * These packages depend on virtual/jdk: app-office/libreoffice-4.4.2.2 (java ? >=virtual/jdk-1.6) dev-java/ant-core-1.9.2 (>=virtual/jdk-1.5) dev-java/ant-owanttask-1.3.2 (>=virtual/jdk-1.4) dev-java/asm-2.0-r1 (>=virtual/jdk-1.3) dev-java/bcel-6.0_rc3 (>=virtual/jdk-1.5) dev-java/gnu-regexp-1.1.4-r2 (>=virtual/jdk-1.4) dev-java/jarjar-0.9 (>=virtual/jdk-1.4) dev-java/java-getopt-1.0.14 (>=virtual/jdk-1.4) dev-java/javacup-0.11a_beta20060608 (>=virtual/jdk-1.4) dev-java/jgoodies-looks-1.2.2-r2 (>=virtual/jdk-1.5) dev-java/junit-3.8.2-r1 (>=virtual/jdk-1.4) dev-java/relaxng-datatype-1.0-r1 (>=virtual/jdk-1.4) dev-java/saxpath-1.0-r2 (>=virtual/jdk-1.4) dev-java/swt-3.7.2-r1 (>=virtual/jdk-1.4) dev-java/xalan-2.7.1 (>=virtual/jdk-1.4) dev-java/xalan-serializer-2.7.1 (>=virtual/jdk-1.4) dev-java/xerces-2.11.0 (>=virtual/jdk-1.4) dev-java/xjavac-20110814 (>=virtual/jdk-1.4) dev-java/xml-commons-external-1.3.04 (>=virtual/jdk-1.3) dev-java/xml-commons-external-1.4.01 (>=virtual/jdk-1.3) dev-java/xml-commons-resolver-1.2 (>=virtual/jdk-1.3) dev-java/xom-1.2.10 (>=virtual/jdk-1.4) dev-java/xpp2-2.1.10-r1 (>=virtual/jdk-1.3) dev-java/xpp3-1.1.4c-r1 (>=virtual/jdk-1.4) dev-lang/erlang-17.5 (java ? >=virtual/jdk-1.2) dev-libs/cyrus-sasl-2.1.26-r9 (java ? >=virtual/jdk-1.4) dev-libs/protobuf-2.6.1-r3 (java ? >=virtual/jdk-1.5) dev-util/android-sdk-update-manager-23 (>=virtual/jdk-1.5) dev-vcs/subversion-1.8.13 (java ? >=virtual/jdk-1.5) games-board/domination-1.1.1.5 (>=virtual/jdk-1.5) kde-base/krossjava-4.14.3 (>=virtual/jdk-1.5) kde-base/poxml-4.14.3 (extras ? >=virtual/jdk-1.5) media-gfx/graphviz-2.38.0 (java ? >=virtual/jdk-1.5) media-gfx/opcion-1.1.1-r2 (>=virtual/jdk-1.4) media-libs/libbluray-0.7.0 (java ? >=virtual/jdk-1.6) media-libs/libcaca-0.99_beta19 (java ? >=virtual/jdk-1.5) media-libs/libjpeg-turbo-1.4.0 (java ? >=virtual/jdk-1.5) media-libs/opencv-2.4.10 (java ? >=virtual/jdk-1.6) media-video/bdsup2sub-4.0.0-r1 (>=virtual/jdk-1.6) net-dns/libidn-1.30 (java ? >=virtual/jdk-1.5) sys-devel/gettext-0.19.4 (java ? >=virtual/jdk-1.4) sys-libs/db-5.3.28-r2 (java ? >=virtual/jdk-1.5) sys-libs/db-6.0.30-r1 (java ? >=virtual/jdk-1.5)
What you're looking for is the latest (highest numbered) version of virtual/jdk-jre. As you can see from this system, 1.6 Java is the oldest version of Java I can install which will work with all of my currently installed packages which list Java as a(n) (optional) dependency.
When checking what level of Java you need to have installed, ignore lines like these:Because how 'virtual' works, these packages are self-referential as dependencies.Code: Select all
virtual/jre-1.7.0 (=virtual/jdk-1.7.0*) virtual/jre-1.8.0 (=virtual/jdk-1.8.0*) - Step 2) - Once we determine what our oldest version of Java can be (which will work with all of our packages which need Java!), we're ready to inform portage that we don't want Oracle's Java to be considered.
I take advantage of portage's capability to have a directory of portage package mask files. My example here reflects that. Execute the following:Add the following lines:Code: Select all
nano -w /etc/portage/package.mask/oracleIf you have only the /etc/portage/package.mask file instead of the directory, then execute the following instead of my previous example:Code: Select all
dev-java/oracle-jdk-bin dev-java/oracle-jre-bin =virtual/jdk-1.8.0 =virtual/jre-1.8.0The first two lines mask all of Oracle's jdk and jre packages. For those of us running 'unstable', the second two lines block the virtual/jdk(jre) 1.8 versions which can only be sastisfied by Oracle's Java 1.8 at this time. This way, the Oracle Java packages are blocked and portage won't complain about not being able to upgrade the virtual packages until you/they are ready for the equivalent 1.8 Icedtea packages.Code: Select all
echo "dev-java/oracle-jdk-bin" >> /etc/portage/package.mask echo "dev-java/oracle-jre-bin" >> /etc/portage/package.mask echo "=virtual/jdk-1.8.0" >> /etc/portage/package.mask echo "=virtual/jre-1.8.0" >> /etc/portage/package.mask - Step 3) - If you're here because Oracle's Java is already installed as happened to me, we need to do a little cleanup. To get rid of any newly installed packages we don't want, execute the following:Now perform an @world emerge to let portage re-install the latest version of Icedtea (stable or unstable) which is suitable for your system. I use this command because I like to be sure the packages are pre-downloaded first:
Code: Select all
emerge -C dev-java/oracle-jdk-bin =virtual/jdk-1.8.0 =virtual/jre-1.8.0Be sure that the correct Java VM is selected for your environment:Code: Select all
date && time emerge -fuND --with-bdeps=y --keep-going @world && time emerge -uND --with-bdeps=y --keep-going @world && dateCode: Select all
pyrodyno ~ # java-config -L The following VMs are available for generation-2: 1) IcedTea JDK 7.2.5.3 [icedtea-bin-7] pyrodyno ~ # java-config -S 1 Now using icedtea-bin-7 as your generation-2 system JVM pyrodyno ~ # java-config -L The following VMs are available for generation-2: *) IcedTea JDK 7.2.5.3 [icedtea-bin-7]
edited to clarify what was actually happening. It was Oracle's version of Java 1.8 which was marked stable.





