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.
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.
In your opinion, what is the best version of OpenJFX (JavaFX) and Scene Builder should I use with Amazon Corretto 11 (OpenJDK)?
Currently, until the date of this post, there are 2 versions of OpenJFX (JavaFX) and 2 versions of Scene Builder:
Gluon's JavaFX versions:
JavaFX 11 LTS
JavaFX 16 Latest Release
Gluon's Scene Builder versions:
Scene Builder 16
Scene Builder 8.5.0
For me, who prefer to develop my projects with an LTS version, which options should I use? Is there any kind of incompatibility? Should I be concerned about using such tools with different versions? Is there any kind of configuration to be done to work with these tools using Amazon Corretto 11 (OpenJDK)?
Grateful in advance!
I am not an expert on JavaFX, but I have seen that every release of OpenJFX arrives shortly after the same number version of Java (OpenJDK).
Current versions
If you want to stay current with the latest and greatest, use Java 16 with JavaFX/OpenJFX 16. And later this year in September, versions 17 of both.
By the way, Java version 17 may be designated LTS though not yet confirmed.
If you are releasing updates more often than the six to eight months cadence of the short-term supported Java & JavaFX, say quarterly, then you could always be deploying on the current versions (16, 17, 18, …) while they are supported.
Keep in mind that JavaFX/OpenJFX has been under rapid development in recent years. I expect you will find many significant changes between versions 11 and 16. I suggest you study the matter, starting with the various Release Notes documents.
LTS versions
If you want to stick to deploying LTS only, for Java 11 I might stick with JavaFX/OpenJFX 11 for maximum compatibility and maximum support opportunities.
However, the Release Notes for OpenJFX 16 says:
JavaFX 16 requires JDK 11 or later.
So you might choose to use the latest version of JavaFX 16 with Java 11.
The main issue I can imagine is with support. I cannot find any official statement on the OpenJFX.io site about length of support, and about short-term versus LTS versions. However, given that OpenJFX is part of the OpenJDK project, I am guessing the same support cadence applies: 11 is the LTS, 16 only supported until shortly after 17 is out, and 17 may be the next LTS.
If you have purchased support plans from any vendor such as Gluon, Azul Systems, BellSoft, Oracle, etc., I suggest you confer with them to learn about their version policies.
If you choose the LTS route, it may be wise to regularly compile, run, test, and debug your app on the current version (16 now). This ensures that when you eventually move on to the next LTS, you will not face a bunch of surprises.
Questions
You asked:
For me, who prefer to develop my projects with an LTS version, which options should I use?
Stick with Java 11 & JavaFX/OpenJFX 11 for LTS deployment, if my guess is right about JavaFX/OpenJFX 16 support being short-term only.
You asked:
Is there any kind of incompatibility?
JavaFX/OpenJFX 16 is intended for Java 11 through 16, per the Release Notes.
So, no, you should not see incompatibilities with using JavaFX/OpenJFX 16 on Java 11.
You asked:
Is there any kind of configuration to be done to work with these tools using Amazon Corretto 11 (OpenJDK)?
While I do not use Corretto, my understanding is that it is built from the OpenJDK codebase, plus whatever fixes or tweaks the Amazon team may have added without waiting for their contributions to OpenJDK to be incorporated.
So, no, you should not have any special configuration needed for Corretto beyond what you would do for any other Java implementation such as a JDK from Pivotal, Oracle, Azul Systems, BellSoft, SAP, Adoptium/AdoptOpenJDK, Red Hat/IBM, etc.
Of course, for any of those JDK products, you would need to bundle with your app the necessary OpenJFX libraries, with some exceptions. At least two vendors provide implementations of Java that include the OpenJFX libraries: LibericaFX from BellSoft, and the "JDK FX" edition of Azul Platform Core (formerly ZuluFX) from Azul Systems.
I'm having problems understanding Java versioning. I'm seeing lots of versions like 1.4.2, 1.5 and 1.6, but I also stumble upon 5.0 and 6.0. I don't understand this versioning or the progression.
I'm pretty new to Java, and I've read a bit about OpenJDK vs Sun, and I think I understand it. Are these versions the difference between OpenJDK and Sun? For example, OpenJDK's latest is 1.6 and Sun's is 6.0?
All these versions are pretty confusing to someone new to Java.
The versioning is simply a mess:
Java 1.0 and 1.1 were normal
Then came Java 1.2, but you were supposed to call it "Java 2, JDK 1.2"
This continued until 1.4 (There were also minor releases like 1.4.2)
The next version was then supposedly "Java 5.0", but there was still "1.5" all over the place in the file names and URLs.
Starting with Java 6, they've dropped the minor version and mostly (but not completely, see output of java -version) eliminated the traces of the old versioning scheme, but people have gotten used to it and continue to use it colloquially.
Starting with Java 9 or 10, the 1.X notation also disappeared from the output of java -version (which caused some code that depended on parsing it to break), and people have pretty much stopped using it. We now have Java 15, Java 16, Java 17, etc.
Note also that when this question was asked, Sun JDK and OpenJDK were separate codebases (whith a large overlap), and Sun JDK was the official reference implementation.
In the more than 10 years since then, Java was sold to Oracle, OpenJDK became the official Java reference implementation, and Oracle stopped maintaining the Oracle JDK as a separate codebase. Instead, they just provide OpenJDK builds and provide commercial long term support for them with bugfixes and security patches. But you can also get builds for free from AdoptOpenJDK (which recently rebranded as "Adoptium"), they just aren't supported as long.
This is explained (cough) in Java SE Naming and Versions:
The current release is Java Platform,
Standard Edition 6 (Java SE 6). The
previous release was Java 2 Platform,
Standard Edition 5.0 (J2SE 5.0).
Sun Microsystems simplified the
platform name in 2006 to better
reflect the level of maturity,
stability, scalability, and security
built into the Java platform. Sun
dropped the "2" from the name and
deleted the "dot number" (the number
following the period). Any updates to
Java platforms will simply be noted as
updates rather than adding a "dot
number" at the end of the platform
name.
Due to significant popularity within
the Java developer community, the
development kit has reverted back to
the name "JDK" from "Java 2 SDK" (or
"J2SDK"). The runtime environment has
reverted back to "JRE" from "J2RE."
(Note that "JDK" stands for "J2SE
Development Kit" in version 5.0.)
For more information on platform names
and version numbers, see the following
pages:
Java SE 6 Platform Name and Version Numbers
J2SE Version 1.5.0 or 5.0?
J2SE SDK/JRE Version String Naming Convention
And quoting Java SE 6 Platform Name and Version Numbers:
At this release, the platform name has changed from J2SETM to JavaTM SE. The official name is JavaTM Platform, Standard Edition 6.
Both version numbers (1.6.0 and 6) are used to identify this release of the Java Platform. Version 6 is the product version, while 1.6.0 is the developer version. The number 6 is used to reflect the evolving level of maturity, stability, scalability and security of Java SE.
And J2SE Version 1.5.0 or 5.0?:
Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.
The number "5.0" was arrived at by dropping the leading "1." from "1.5.0". Where you might have expected to see 1.5.0, it is now 5.0 (and where it was 1.5, it is now 5).
So, to summarize, the whole naming is a mess but this is finally over and the current platform name is JavaTM Platform, Standard Edition 6 (abbrev. JavaTM SE 6). Two Products are delivered under the platform: the JDKTM 6 and the JRETM 6.
OpenJDK 6 is an open-source implementation of the Java SE 6 Platform, it's different from Sun's JDK.
Java 1.5.x is the same as Java 5.x
Java 1.6.x is the same as Java 6.x
Basically throw away the 1. part of the version number.
Both 1.6 and 6 are used to refer to the same version (and similarly for 1.5 and 5).
The only difference is the single digit numbers are usually used in conjunction with Java SE 5 and Java EE 6.
The 1.5 and 1.6 versions are what the Java compiler says using java -version and sometimes 'the minor release' is used as a version string, like SunOS 5.8 was called Solaris 8 as a product name.
Guide to java versions is the best blog for any new person to understand java versioningSince 2019, Java releases new version every 6 months, i.e. March and September. It's October 2021, and Java 17 is already released. Here is the link to download OpenJDKCouple of noteworthy points
you can use always use the latest version of java, it will execute the code written using previous versions
previously JRE and JDK were separately distributed, now there is a trend to only distribute JDK
There are two distributions: OpenJDK (free) and OracleJDK (paid)
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/
I'm having problems understanding Java versioning. I'm seeing lots of versions like 1.4.2, 1.5 and 1.6, but I also stumble upon 5.0 and 6.0. I don't understand this versioning or the progression.
I'm pretty new to Java, and I've read a bit about OpenJDK vs Sun, and I think I understand it. Are these versions the difference between OpenJDK and Sun? For example, OpenJDK's latest is 1.6 and Sun's is 6.0?
All these versions are pretty confusing to someone new to Java.
The versioning is simply a mess:
Java 1.0 and 1.1 were normal
Then came Java 1.2, but you were supposed to call it "Java 2, JDK 1.2"
This continued until 1.4 (There were also minor releases like 1.4.2)
The next version was then supposedly "Java 5.0", but there was still "1.5" all over the place in the file names and URLs.
Starting with Java 6, they've dropped the minor version and mostly (but not completely, see output of java -version) eliminated the traces of the old versioning scheme, but people have gotten used to it and continue to use it colloquially.
Starting with Java 9 or 10, the 1.X notation also disappeared from the output of java -version (which caused some code that depended on parsing it to break), and people have pretty much stopped using it. We now have Java 15, Java 16, Java 17, etc.
Note also that when this question was asked, Sun JDK and OpenJDK were separate codebases (whith a large overlap), and Sun JDK was the official reference implementation.
In the more than 10 years since then, Java was sold to Oracle, OpenJDK became the official Java reference implementation, and Oracle stopped maintaining the Oracle JDK as a separate codebase. Instead, they just provide OpenJDK builds and provide commercial long term support for them with bugfixes and security patches. But you can also get builds for free from AdoptOpenJDK (which recently rebranded as "Adoptium"), they just aren't supported as long.
This is explained (cough) in Java SE Naming and Versions:
The current release is Java Platform,
Standard Edition 6 (Java SE 6). The
previous release was Java 2 Platform,
Standard Edition 5.0 (J2SE 5.0).
Sun Microsystems simplified the
platform name in 2006 to better
reflect the level of maturity,
stability, scalability, and security
built into the Java platform. Sun
dropped the "2" from the name and
deleted the "dot number" (the number
following the period). Any updates to
Java platforms will simply be noted as
updates rather than adding a "dot
number" at the end of the platform
name.
Due to significant popularity within
the Java developer community, the
development kit has reverted back to
the name "JDK" from "Java 2 SDK" (or
"J2SDK"). The runtime environment has
reverted back to "JRE" from "J2RE."
(Note that "JDK" stands for "J2SE
Development Kit" in version 5.0.)
For more information on platform names
and version numbers, see the following
pages:
Java SE 6 Platform Name and Version Numbers
J2SE Version 1.5.0 or 5.0?
J2SE SDK/JRE Version String Naming Convention
And quoting Java SE 6 Platform Name and Version Numbers:
At this release, the platform name has changed from J2SETM to JavaTM SE. The official name is JavaTM Platform, Standard Edition 6.
Both version numbers (1.6.0 and 6) are used to identify this release of the Java Platform. Version 6 is the product version, while 1.6.0 is the developer version. The number 6 is used to reflect the evolving level of maturity, stability, scalability and security of Java SE.
And J2SE Version 1.5.0 or 5.0?:
Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.
The number "5.0" was arrived at by dropping the leading "1." from "1.5.0". Where you might have expected to see 1.5.0, it is now 5.0 (and where it was 1.5, it is now 5).
So, to summarize, the whole naming is a mess but this is finally over and the current platform name is JavaTM Platform, Standard Edition 6 (abbrev. JavaTM SE 6). Two Products are delivered under the platform: the JDKTM 6 and the JRETM 6.
OpenJDK 6 is an open-source implementation of the Java SE 6 Platform, it's different from Sun's JDK.
Java 1.5.x is the same as Java 5.x
Java 1.6.x is the same as Java 6.x
Basically throw away the 1. part of the version number.
Both 1.6 and 6 are used to refer to the same version (and similarly for 1.5 and 5).
The only difference is the single digit numbers are usually used in conjunction with Java SE 5 and Java EE 6.
The 1.5 and 1.6 versions are what the Java compiler says using java -version and sometimes 'the minor release' is used as a version string, like SunOS 5.8 was called Solaris 8 as a product name.
Guide to java versions is the best blog for any new person to understand java versioningSince 2019, Java releases new version every 6 months, i.e. March and September. It's October 2021, and Java 17 is already released. Here is the link to download OpenJDKCouple of noteworthy points
you can use always use the latest version of java, it will execute the code written using previous versions
previously JRE and JDK were separately distributed, now there is a trend to only distribute JDK
There are two distributions: OpenJDK (free) and OracleJDK (paid)