Firebase Tools and Java 11 - java

This question falls somewhere between Firebase Tools, MacOS and Java. Probably 75% Java, 20% Firebase Tools and 5% MacOS.
Starting with v10.5, firebase-tools started stating that 'Support for Java version <= 10 will be dropped soon in firebase-tools#11. Please upgrade to Java version 11 or above to continue using the emulators.'
I run macOS v11.6.5 on a Macbook Pro from mid-2014. When I go to Java's Downloads page, it recommends Java 'Version 8 Update 331'. Not Java 11.
Information on downloading Java 11 seems to be scarce. Oracle's page of certified configurations includes MacOS 11, but I can't find anywhere obvious where Java 11 can be readily downloaded.
A big part of the problem seems to be the terminology used. If I run java -version, I get:
java version "1.8.0_331"
Java(TM) SE Runtime Environment (build 1.8.0_331-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.331-b09, mixed mode)
Okay, I have build 1.8 of the Java Runtime Environment, aka the JRE if you are a Java enthusiast. That is apparently what is triggering the warning in Firebase Tools.
There is also a Java product out there called 'Java SE 11'. The product itself is ambiguous, but the checksums all say 'SDK'. (A Software Development Kit: a thing that enables developers to develop Java programs. The name doesn't imply a Runtime Environment: a thing that enables Java to run on an operating system.) There is an article out there which claims that, if you install Java SE 11 and run java -version, it will spit out java version "11.0.7". That will probably satisfy Firebase Tools.
But Oracle's release notes say: 'In Windows and macOS, installing the JDK in previous releases optionally installed a JRE. In JDK 11, this is no longer an option.' No longer an option... as in now you implicitly get JRE 11 with SDK 11? Or as in the SDK and JRE are now fully divorced, and the JRE must be ferreted out of its hiding like a wild beast?
UPDATE 6/5/22: Java's checksums page now says 'JDK', and I guess that is better than 'SDK' because it implies 'Java Development Kit', which this Wikipedia article claims to include both a JRE ('java') and SDK (most of the other files).

To install Java SE:
Go here.
Scroll down to find your product. I chose Java SE 11. (Oracle will probably list later versions as they are made available.)
Choose your operating system. I chose MacOS.
Choose your file set. I chose the DMG installer.
Download your chosen file set.
5. Do whatever is required by your platform to install Java SE using the downloaded file set from #5.
After installing Java SE 11, java -version now says "11.0.14" and Firebase Tools is now satisfied. My best guess is that JRE 11 was implicitly downloaded, and that developers need to start ignoring the main Download page used by everyone else. (Why didn't the main Download page recommend Java 11 from the start?) Hopefully someone will see this question and clarify whether in the future, the 'Java SE' product implicitly includes both the JRE and SDK, and that the numbering system will always encompass both. In other words, hopefully when someone says we need 'Java 11', it means that we need to download SE 11, containing JRE 11 and SDK 11.

This link has a JDK installer that solved my problem today. I needed to close and reopen all my VScode windows to get it to work.
https://www.oracle.com/java/technologies/downloads/

With latest versions this error appears: !! emulators: firebase-tools no longer supports Java version before 11. Please upgrade to Java version 11 or above to continue using the emulators.
You can download Java SE Development Kit 18 from this link. Just choose your operating system, download and install the file. When installation is complete you need to restart you terminal and voila it works now:
firebase emulators:start

But Oracle's release notes say: 'In Windows and macOS, installing the JDK in previous releases optionally installed a JRE. In JDK 11, this is no longer an option.' No longer an option... as in now you implicitly get JRE 11 with SDK 11? Or as in the SDK and JRE are now fully divorced, and the JRE must be ferreted out of its hiding like a wild beast?
With Java 8 and earlier, the end user of a Java application was responsible for providing a Java runtime environment for the application to run on. This is what the JRE was for. The user would have to install this runtime environment on their system in order to run Java applications. This is also why the https://www.java.com/en/download/ page recommends Java 8 (the JRE), which was the last version of Java where an end-user should concern themselves with installing a runtime environment.
Starting from Java 9, it is now the application distrubutor's responsibility to provide a Java runtime that can run the application. So, there are no more JREs.
The application developer should use jlink, which is a tool included in the SDK, to create a 'runtime image' (essentially a bespoke JRE to run a single application), that can be used to run the application, and bundle that runtime image with the application. The jpackage tool can also be used to create application images (including a runtime image), as well as installers.

Related

Java JDK, JRE, JVM [duplicate]

This question already has answers here:
How can I get Java 11 run-time environment working since there is no more JRE 11 for download?
(4 answers)
Closed 1 year ago.
I was trying to update my jave version and got confused a little bit. I have jdk 10, which I used, and also have Java Platform 8, which have "configure java" app, so what should I do now, if you go to java.com they're offering you to install java 8 only, do I need to delete old java 8 and jdk 10 and then install jdk 11 from oracle.com? Does it have jre in it? Can I run for example apps like Minecraft if I do that and write code too? Also what should I install: oracle jdk or open jdk then?
The Java JDK is Java Development Kit, which installs everything you need to write, compile, and run Java code and programs. It includes the Java JRE, which is the Java Runtime Environment. It only has what you need to run Java apps/programs. The download you're being offered when you go to java.com is the JRE. The JVM is the Java Virtual Machine, which is the engine for running Java programs and comes with both the JRE and JDK.
If you're looking to run and develop Java programs, all you need to do is install the JDK. I would suggest uninstalling any previous versions of Java you have for security reasons, as support could've been dropped for them. As for OpenJDK and Oracle JDK, OpenJDK is the open source implementation of Java, and other JDKs like Oracles are built on top of it. The OpenJDK does not require a license to use while others might, depending on your use case.

When JRE was completely discontinued as a separate offering?

Starting from Java 9 the module system was introduced, making provision of JRE separately redundant.
Through, it seems that it was still possible to download it. For example, from here now Java 9 archive
Also, here it's only stated that :
Restructure the JDK and JRE run-time images to draw a clear distinction between files that developers, deployers, and end-users can rely upon and, when appropriate, modify, in contrast to files that are internal to the implementation and subject to change without notice.
The new image structure eliminates this distinction: A JDK image is simply a run-time image that happens to contain the full set of development tools and other items historically found in the JDK.
So no talk about complete removal.
From : jdk-9
When you install jdk-9, public jre-9 also gets installed automatically.
Also, I was thinking that started from Java 9 the custom runtime should be always created using the jlink, but it seems it's enforced now only from Java 11.
From the release notes of Java 11 here Oracle JDK release notes:
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.
But then I can find a lot of discussions like those:
Where is Java 9 JRE?
Create jre from OpenJDK Windows
Why did Java 11 JRE not install with JDK and where is the download for just the Java 11 JRE?
Is there an openjdk-11-jre?
Is this the case and it is not possible to download JRE directly since Java 11? Or am I mixing implementations between (Oracle and OpenJDK)? Or were those discussions above misleading?
Edit: I don't need to download the jre, I could create it via jlink or use already avaialble solution, my question is more of a theoretic.
Is this the case and it is not possible to download JRE directly since Java 11? Or am I mixing implementations between (Oracle and OpenJDK)?
It is correct (mostly). From Java 11 onwards, neither Oracle JDK or OpenJDK JDK has a corresponding JRE available for public downloads.
However (and this is where you are incorrect) other distributors of Java do provide JRE downloads (or packages) as an option. Details may be found via the "Java is still free" link below.
When JRE was completely discontinued as a separate offering?
It was discontinued for the Oracle and OpenJDK distributions with Java 11. The Java 11 release notes state:
"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."
I have not been able to find any earlier public announcements from Oracle about the discontinuance of their JRE releases. (If someone finds one, please comment ...)
Please note: this is a specific answer to the specific questions asked by the OP. For more information on the status of Java vis-a-vis licenses, distributions, vendors, support, and whether or not Java is "free", I recommend that you read the following:
"Java is still free" written by the Java Champions community of independent Java leaders and experts.
It is a "live" document, and is likely to remain a good source of up-to-date information; i.e. more likely to be up-to-date than this Answer!
First of all, the question is incorrect. JRE was not discontinued. It was only discontinued by Oracle. For example, on Linux, JRE is still available*:
$ apt-cache search openjdk-11-jre
openjdk-11-jre - OpenJDK Java runtime, using Hotspot JIT
openjdk-11-jre-headless - OpenJDK Java runtime, using Hotspot JIT (headless)
openjdk-11-jre-zero - Alternative JVM for OpenJDK, using Zero
* requires repository ppa:openjdk-r/ppa
Some other JDK providers still offer JRE as well:
Azul Zulu offers JRE.
AdoptOpenJDK offers JRE.
Liberica JDK offers JRE.

Java JDK 11 - JRE not recognized by external application

I understand that the Oracle Java Development Kit 11 (JDK) does no longer include a public JRE (Java Runtime Environment). However the documentation says it includes a private one (I actually don't understand what that means).
I installed the JDK 11 on Windows 10 64x according to the documentation and set the path system variable accordingly. When I type
java -version
at the command line I get informed that there is indeed a runtime environment in place.
However, when I now try to install e.g. a Plugin (Zotero) for LibreOffice that needs a JRE, it is NOT recognized ...
Why does this happen? Do I really need to install the separate JRE from Oracle to get it work?
I read the manual and the migration guide - sorry if this is a stupid question, but I'm stuck.
Thank you!
Andi

What jre is required for an application written in java 1.7?

I have a project for school written with jdk 1.7. This application will be distributed to other groups and we want to document the necessary user system requirements. I'm assuming that the user will need the jre corresponding to jdk 1.7. Is this correct? Or what is the best recommendation for the user? The latest jre version?
JRE 1.7 + version will be good to use.
On a side note:-
It is nothing like that your Java 6 code will not run on Java 7 code. The difference is that the speed increases when running them on later runtimes. This is because Java is constantly evolving, not just the language but also the JVM (Java virtual machine). SO it would be an added advantage of speed if you choose to use the later versions.
Latest JRE version which will be 1.7+ is good.
JRE 1.7 version.
If you want to target, let's say, a Java 6 VM, then you can do that with the Java 7 SDK tools. You can specify which target VM you wish to support, but you have to know that a version 6 VM might not support all the features a version 7 VM will.
Note that if you use the -target and/or the -source options to javac, you may be able to compile with a recent JDK and run with an older JRE.

Java SE 6 vs. JRE 1.6 vs. JDK 1.6 - What do these mean?

I see many different Java terms floating around. I need to install the JDK 1.6. It was my understanding that Java 6 == Java 1.6. However, when I install Java SE 6, I get a JVM that reports as version 11.0! Who can solve the madness?
JDK - Java Development Kit
JRE - Java Runtime Environment
Java SE - Java Standard Edition
SE defines a set of capabilities and functionalities; there are more complex editions (Enterprise Edition – EE) and simpler ones (Micro Edition – ME – for mobile environments).
The JDK includes the compiler and other tools needed to develop Java applications; JRE does not. So, to run a Java application someone else provides, you need JRE; to develop a Java application, you need JDK.
Edited:
As Chris Marasti-Georg pointed out in a comment, you can find out lots of information at Sun's Java web site, and in particular from the Java SE section, (2nd option, Java SE Development Kit (JDK) 6 Update 10).
Edited 2011-04-06:
The world turns, and Java is now managed by Oracle, which bought Sun. Later this year, the sun.com domain is supposed to go dark. The new page (based on a redirect) is this Java page at the Oracle Tech Network. (See also java.com.)
Edited 2013-01-11: And the world keeps on turning (2012-12-21 notwithstanding), and lo and behold, JRE 6 is about to reach its end of support. Oracle says no more public updates to Java 6 after February 2013.
Within a given version of Java, this answer remains valid. JDK is the Java Development Kit, JRE is the Java Runtime Environment, Java SE is the standard edition, and so on. But the version 6 (1.6) is becoming antiquated.
Edited 2015-04-29: And with another couple of revolutions around the sun, the time has come for the end of support for Java SE 7, too. In April 2015, Oracle affirmed that it was no longer providing public updates to Java SE 7. The tentative end of public updates for Java SE 8 is March 2017, but that end date is subject to change (later, not earlier).
This might help someone:
I am installing the latest Java on my system for development, and currently it's Java SE 7. Now, let's dive into this "madness", as you put it...
All of these are the same (when developers are talking about Java for development):
Java SE 7
Java SE v1.7.0
Java SE Development Kit 7
Starting with Java v1.5:
v5 = v1.5.
v6 = v1.6.
v7 = v1.7.
And we can assume this will remain for future versions.
Next, for developers, download JDK, not JRE.
JDK will contain JRE. If you need JDK and JRE, get JDK. Both will be installed from the single JDK install, as you will see below.
As someone above mentioned:
JDK = Java Development Kit (developers need this, this is you if you code in Java)
JRE = Java Runtime Environment (users need this, this is every computer user today)
Java SE = Java Standard Edition
Here's the step by step links I followed (one step leads to the next, this is all for a single download) to download Java for development (JDK):
Visit "Java SE Downloads": http://www.oracle.com/technetwork/java/javase/downloads/index.html
Click "JDK Download" and visit "Java SE Development Kit 7 Downloads": http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html (note that following the link from step #1 will take you to a different link as JDK 1.7 updates, later versions, are now out)
Accept agreement :)
Click "Java SE Development Kit 7 (Windows x64)": http://download.oracle.com/otn-pub/java/jdk/7/jdk-7-windows-x64.exe (for my 64-bit Windows 7 system)
You are now downloading (hopefully the latest) JDK for your system! :)
Keep in mind the above links are for reference purposes only, to show you the step by step method of what it takes to download the JDK.
And install with default settings to:
“C:\Program Files\Java\jdk1.7.0\” (JDK)
“C:\Program Files\Java\jre7\” (JRE) <--- why did it ask a new install folder? it's JRE!
Remember from above that JDK contains JRE, which makes sense if you know what they both are. Again, see above.
After your install, double check “C:\Program Files\Java” to see both these folders. Now you know what they are and why they are there.
When you type "java -version", you see three version numbers - the java version (on mine, that's "1.6.0_07"), the Java SE Runtime Environment version ("build 1.6.0_07-b06"), and the HotSpot version (on mine, that's "build 10.0-b23, mixed mode"). I suspect the "11.0" you are seeing is the HotSpot version.
Update: HotSpot is (or used to be, now they seem to use it to mean the whole VM) the just-in-time compiler that is built in to the Java Virtual Machine. God only knows why Sun gives it a separate version number.
A Brief and Maybe Incorrect History of Java Versions
Java is a platform. It consists of two products - the software development kit, and the runtime environment.
When Java was first released, it was apparently just called Java. If you were a developer, you also knew the version, which was a normal "1.0" and later a "1.1". The two products that were part of the platform were also given names:
JDK - "Java Development Kit"
JRE - "Java Runtime Environment"
Apparently the changes in version 1.2 so significant that they started calling the platform as Java 2.
The default "distribution" of the platform was given the moniker "standard" to contrast it with its siblings. So you had three platforms:
"Java 2 Standard Edition (J2SE)"
"Java 2 Enterprise Edition (J2EE)"
"Java 2 Mobile Edition (J2ME)"
The JDK was officially renamed to "Java 2 Software Development Kit".
When version 1.5 came out, the suits decided that they needed to "rebrand" the product. So the Java platform got two versions - the product version "5" and the developer version "1.5" (Yes, the rule is explicitly mentioned -- "drop the '1.'). However, the "2" was retained in the name. So now the platform is officially called "Java 2 Platform Standard Edition 5.0 (J2SE 5.0)".
The suits also realized that the development community was not picking up their renaming of the JDK. But instead of reverting their change, they just decide to drop the "2" from the name of the individual products, which now get be "J2SE Development Kit 5.0 (JDK 5.0)" and "J2SE Runtime Environment 5.0 (JRE 5.0)".
When version 1.6 come out, someone realized that having two numbers in the name was weird. So they decide to completely drop the 2 (and the ".0" suffix), and we end up with the "Java Platform, Standard Edition 6 (Java SE 6)" containing the "Java SE Development Kit 6 (JDK 6)" and the "Java SE Runtime Environment 6 (JRE 6)".
Version 1.7 did not do anything stupid. If I had to guess, the next big change would be dropping the "SE", so that the cycle completes and the JDK again gets to be called the "Java Development Kit".
Notes
For simplicity, a bunch of trademark signs were omitted. So assume Java™, JDK™ and JRE™.
SO seems to have trouble rendering nested lists.
References
http://www.oracle.com/technetwork/java/javase/namechange-140185.html
Epilogue
Just drop the "1." from versions printed by javac -version and java -version and you're good to go.
With the release of Java 5, the product version was made distinct from the developer version as described here
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.
"Version 5.0" Used in Platform and Product Names
Version 5.0 is used in the platform and product names as given in this table:
Full Name
Abbreviation
Platform name
Java™ 2 Platform Standard Edition 5.0
J2SE™ 5.0
Products delivered under the platform
J2SE™ Development Kit 5.0
JDK™ 5.0
J2SE™ Runtime Environment 5.0
JRE 5.0
"Version 1.5.0" Used by Developers
J2SE also keeps the version number 1.5.0 (or 1.5) in some places that are visible only to developers, or where the version number is parsed by programs. As mentioned, 1.5.0 refers to exactly the same platform and products numbered 5.0. Version numbers 1.5.0 and 1.5 are used at:
java -version (among other info, returns java version "1.5.0")
java -fullversion (returns java full version "1.5.0-b64")
javac -source 1.5 (javac -source 5 also works)
java.version system property
java.vm.version system property
#since 1.5 tag values
jdk1.5.0 installation directory
jre1.5.0 installation directory
http://java.sun.com/j2se/1.5.0 website (http://java.sun.com/j2se/5.0
also works)
Java SE Runtime is for end user, so you need Java JRE version, the first version of Java was the 1, then 1.1 - 1.2 - 1.3 - 1.4 - 1.5 - 1.6 etc and usually each version is named by version so JRE 6 means Java jre 1.6, anyway there is the update version, for example 1.6 update 45, which is named java jre 6u45.
From what I know, they preferred to use the number 6 instead using 1.6 to better reflect the level of maturity, stability, scalability, security and more

Categories