We are planning to migrate our project from Oracle JDK to OpenJDK. I have some questions regarding the same.
After doing some analysis I found that OpenJDK will have a feature release every 6 months which is only supported until the next feature release.It's essentially a continuous stream of releases targeted to developers. Now my question is will it be a good idea to migrate to OpenJDK. Because if the
above statement is correct then we need to upgrade OpenJDK in our application every 6 months
Ref : Differences between Oracle JDK and OpenJDK
What are the basic changes required to do this migration. When I say basic changes, I mean I need to understand in very high level.One thing I know that is
Oracle JDK and Open JDK are having different jar licences. So do I need to replace all Oracle JDK jars with OpenJDK jars as its mentioned in
Migrating to OpenJDK from Oracle JDK ?
Currently we are using :
JDK 1.8
Tomcat 8
Windows Operating System for development. Services gets deployed in linux OS
Maven Build tool
Appreciate your help.
Thanks
Now my question is will it be a good idea to migrate to OpenJDK
For Java 11 you might want to, though by Java 11 they will be almost identical.
So do I need to replace all Oracle JDK jars with OpenJDK jars
I would install a version of OpenJDK and use the JARs which came with it. I wouldn't mix and match them.
JDK 1.8
I am not sure gain anything by migrating Java 8. Oracle Java 8 is still supported at least until Jan 2019. After that, you might not get any update, but you might not with OpenJDK either.
If your concern is getting support for Java 8, I suggest contacting a company which will give commercial support Java 8 such as Azul for what seemed like a reasonable price. https://www.azul.com/downloads/zulu/zulu-windows/
Related
I have a Spring Boot application and I'm trying to set the JDK to OpenJDK-17. I've downloaded it from Java, then I go to IDE and Project Settings > Project Structure > SDKs, and then I click on the '+' > Download JDK. Then when I set the version to 17, I don't see OpenJDK-17 anywhere...
I get the following options:
Amazon Corretto 17.0.6
Azul Zulu Community 17.0.6
BellSoft Liberica JDK 17.0.5
Eclipse Temurin (AdoptOpenJDK HotSpot) 17.0.5
GraalVM Community Edition 17
IBM Semeru (AdoptOpenJDK OpenJ9) 17.0.5
SAP SapMachine 17.0.5
---------Other Versions---------
Oracle OpenJDK 19.0.2
I don't know for sure the rational of the Intellij for (no longer?) including a link to a "vanilla" OpenJDK 17 download site. However my guess is that it is related to this notice on the https://jdk.java.net/17/ release page:
JDK 17 Releases
JDK 17 has been superseded. Please visit jdk.java.net for the current version.
Older releases, which do not include the most up to date security vulnerability fixes and are no longer recommended for use in production, remain available in the OpenJDK Archive.
Note that the OpenJDK team are no longer publishing new builds for OpenJDK 17. If you want the current Java 17 LTS build, you get it as an Oracle release or you get it from a 3rd-party vendor. These should all include the most recent security patches.
The Intellij team would be doing users a disservice if they provided an easy way for users to download an old and potentially insecure OpenJDK Java 17 build.
OpenJDK is basically a source only project (though they do release reference binaries for the first six months, which usually results in three releases, e.g. 17.0.0 - 17.0.2). After those three months, newer releases are only available through the vendors (e.g. for Java 17.0.5). All those listed are variants of OpenJDK 17 (except IBM Semeru, which is OpenJ9, which itself is a variant of OpenJDK). And bar vendor specific extras, or optional features like garbage collectors, they are basically the same, and have been tested for compliance with the Java specification.
In the Java world, you pick a vendor, and use its binaries instead of the binaries from OpenJDK itself (which generally don't go further then x.0.2, while vendor specific versions continue to receive updates if they are LTS versions). Personally, I usually use Eclipse Temurin builds.
I (as a non-Java kind of guy) am puzzled that my local JRE 10 installation required an update, but when updating, I get the JRE 8! This is even reported on https://java.com/en/download/more_info10.jsp:
Users who installed JRE 9 and/or JRE 10 (non Long-Term Support Releases) should remove those out-of-date versions of Java.
I would understand if JRE 11 would be the current version, but no, it's JRE 8:
If you still require Java on your computer download the latest release of JRE 8 available at java.com, which is the only currently supported major release of Java targeting desktop deployment.
How can this be?
The explanation is right there on that page you linked and quoted.
Relevant section highlighted.
"desktop deployment".
If you still require Java on your computer download the latest release
of JRE 8 available at java.com, which is the only currently supported
major release of Java targeting desktop deployment.
Short answer:
Java 9 and 10 are not a Long Term Support (LTS) release, and have expired.
Java 8 commercial supports end January 2019, public updates for personal use through December 2020 though.
Java 11 is the current and is also a LTS support release.
So todays choice is between java 8 and 11. But 11 removed applets and browser integration and other desktop technologies (JavaFX, java webstart etc). See list below and link to source. See also the Oracle white paper of 2018-03, Java Client Roadmap Update.
Further details:
Oracle has decided to stop releasing several variants of JRE on their own. As well as requiring a license for production use for newer releases. For example 32bit variants are no more, traditional desktop variants not available as there is no no java webstart and javafx is separated out since jdk 11+ etc, Oracle is more focusing on 64bit and server.
Put together with the fact that 9 and 10 are not Long term support releases (and they have expired) this leaves you with the choice of Java 8 for this particular use case for now.
JDK public updates for java 8 from oracle will end in January 2019 (and December 2020 for personal use) so at least until then is the current desktop java version of choice, from Oracle that is.
The current version of java 11, is only available as a 64bit JDK (development kit download) from oracle. No suitable desktop JRE (just the runtime).
Removed in JDK 11 release from Oracle:
Important Changes and Information
The following are some important changes in and information about this release. In some cases, additional details about the changes described below are provided in these Release Notes.
The deployment stack, required for Applets and Web Start Applications, was deprecated in JDK 9 and has been removed in JDK 11.
Without a deployment stack, the entire section of supported browsers has been removed from the list of supported configurations of
JDK 11.
Auto-update, which was available for JRE installations on Windows and macOS, is no longer available.
In Windows and macOS, installing the JDK in previous releases optionally installed a JRE. In JDK 11, this is no longer an option.
In this release, the JRE or Server JRE is no longer offered. Only the JDK is offered. Users can use jlink to create smaller custom
runtimes.
JavaFX is no longer included in the JDK. It is now available as a separate download from openjfx.io.
Source: https://www.oracle.com/technetwork/java/javase/11-relnote-issues-5012449.html
Simple: Oracle's own support roadmap lists Java 8 as having "premier" support until 2022.
Conversely, Java 9 and 10 have had their premier support lapse in March and September of 2018. Oracle's new update model ensures that non-LTS releases from Java 9 onwards are only officially supported until the new version of Java arrives.
"Current" is a bit of a strong word when it comes to Java; technically, the latest version of Java that should be used by end consumers is Java 11 (as of time of writing), since that is the current LTS. However, not all applications which use Java may be up-to-date, so it's safest to fall back to Java 8 until your application vendor informs you that it's safe to upgrade.
Perhaps that's because Java 11 deprecated modules which are present in Java 10 e.g. JAXB or Java FX. Latest Java 8 still has these modules so the software that worked on Java 10 can potentially work with Java 8.
I have Java 8 installed on my computer, before it was Java 7. But I need to work with version 6.
How can I install Java 6? On Oracle website, it is no longer possible to download the old versions.
How can I downgrade Java if it was not installed before?
Please be aware that Java 6 is no longer receiving public updates. You always should use the most updated Java version.
But you can find some historical Java releases on Oracle Java Archive. The page warns:
WARNING: These older versions of the JRE and JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production.
These are the links to download old versions of Java SE:
Java SE 8 Archive Downloads
Java SE 7 Archive Downloads
Java SE 6 Archive Downloads
Java SE 5 Archive Downloads
Java SE 1.4 Archive Downloads
Java SE 1.3 Archive Downloads
Java SE 1.2 Archive Downloads
Java SE 1.1 Archive Downloads
It's possible. A lot of notable software can be traced to the very first version (for testing or other purposes). You can actually find and download the first version of Firefox, Chrome, Netbeans, WordPress etc. The same with Java. They just make it a little bit more difficult to dig the old versions up, and they intentionally hide it for good reasons.
These older versions of the JRE and JDK are provided to help developers debug issues in older systems. They are not updated with the latest security patches and are not recommended for use in production.
and
Keeping old and unsupported versions of Java on your system presents a serious security risk.
(and Java is already not really reputable, security-wise)
You cannot "downgrade" a certain version of Java. You install different versions of Java you need, and set your project to be built with that specific version. On a system, there can be several Java versions installed together.
On my machine, yesterday, I had installed and configured 6 java versions:
JRE 6
JRE 7
JRE 8
JDK 6
JDK 7
JDK 8
I believe an update was installed last night and today, both JRE 6 and 7 are missing (in 7, the lib folder is still there, as jars from it might have been locked by running applications).
JDKs are perfectly fine, same is JRE 8.
After checking on a different machine (windows as well), the same thing happened: JRE 7 missing almost completely.
Did any else experience this? If yes, what is the cause? Is it an Oracle "feature" to remove older JREs?
I should mention that we have application which for various reasons need 6 or 7, and cannot be updated to 8 at this time.
Thanks.
Yes, it's a feature. In the Java 6 times it was not, and it ended up in a library hell with dozens of versions of the JRE installed at the same time - something that, in theory, should not be needed as those versions are supposed to be compatible with each other.
As the documentation says:
The Java auto-update mechanism is designed to keep Java users
up-to-date with the latest security fixes. To achieve this goal
Windows and OS X users that rely on Java’s auto-update mechanism will
have their JRE 7 replaced with JRE 8.
...
As we did when JRE 6 was replaced by JRE 7, we have auto-updated users of the older release to the newer version of Java.
If you need to support older environments, you can set your compiler's compliance level. You will not be able to use newer features of the language, but it should run just fine.
You can also keep multiple JDKs installed and use that to test - the JRE comes bundled with it, so you just have to browse to that folder on the command prompt and compile with javac and/or start your app with java.
Are Open JDK and JDK7 the same thing?
Open JDK is a free (but not certified) implementation of the JLS (java language specification) where JDK7 is the next version of Sun's JDK which is currently 1.6 (or just Java 6 as the marketing devision of Sun called it).
OpenJDK was initially based only on the JDK 7.0 version of the Java platform.
Since February 15, 2008, there are two separate OpenJDK projects:
The main OpenJDK project, which is based on the JDK 7.0 version of the Java platform
The JDK 6 project, which provides an Open-source version of Java 6.0.
I hope this clears the confusion a bit.
It appears to be a Solaris<-->OpenSolaris situation, viz. there's an open-source project with as much code as possible; the fixes get transferred back to the main software, which the vendor supports and sells. OpenJDK is a project. OpenJDK version 7 and JDK7 appear to be largely but not exactly the same (per here).