This application requires a java runtime environment 11 что делать
Привет, Хабр! Представляю вашему вниманию перевод статьи «Do not fall into Oracle's Java 11 trap» автора Stephen Colebourne.
Java 11 была официально выпущена. Это мажорный релиз, имеющий долгосрочную поддержку (LTS — long-term support). Однако Oracle приготовила ловушку (намеренно или случайно).
Ловушка
В течение 23 лёт разработчики привыкли загружать JDK с сайта Oracle и использовать его бесплатно. Введите «JDK» в свою любимую поисковую систему, и верхняя ссылка будет вести на страницу загрузки Oracle Java SE (я намеренно не предоставляю ссылку). Но этот запрос и эта ссылка теперь являются ловушкой.
Oracle JDK, на который ссылаются почти все поисковые запросы, теперь является коммерческим, и не является бесплатным.
Ключевая часть обновлённого лицензионного соглашения заключается в следующем:
You may not: use the Programs for any data processing or any commercial, production, or internal business purposes other than developing, testing, prototyping, and demonstrating your Application;
Вы не можете использовать программы для любой обработки данных или для любых коммерческих, производственных или внутренних бизнес-целей, кроме разработки, тестирования, прототипирования и демонстрации вашего приложения;
Ловушка выглядит следующим образом:
- Загрузите Oracle JDK (потому что это то, что вы всегда делали, и это то, куда с большой вероятностью выведет вас поисковая система).
- Используйте его в продакшен среде (потому что вы не понимали и/или не знали, что лицензия изменена)
- Получите неприятный телефонный звонок от команды по защите прав Oracle, требующей много денег.
Является ли эта ловушка злонамеренным поведением со стороны Oracle? У читателей будет свое мнение. Стоит иметь в виду, что Oracle вкладывает огромные суммы в разработку Java, поэтому разумно иметь коммерческий план для тех, кто этого хочет. Однако, Oracle также они предоставляет бесплатную альтернативу.
seanGammage commented Jul 22, 2020
@shanewaz-abbas What are the steps you took to downgrade to 0.64.1? My company and most are reliant on Java 8, not 11 so this change is messing a lot of programmers up.
bshaffer commented May 4, 2020 •
@xJoeWoo can you get an error message/stack trace?
I believe we have two different errors here, one is for Windows users, the other is for all users on Java < 11
xJoeWoo commented May 24, 2020 •
This is coming from the jar launcher. The way it finds the system JRE is really strange. It uses registry settings, not JAVA_HOME or PATH.
I tried to add registry settings manually, then everything worked fine!
AdoptOpenJDK (or other JDKs) are not installed by installer like Oracal JDK , registry values are not configured correctly. Maybe that's the reason of this problem?
Change both 11 to 1.7 if JDK 1.7 is installed.
vadlit commented Apr 30, 2020
The same issue on my windows
jdneo commented Jul 23, 2020 •
Would you mind to share the content of this file .settings/org.eclipse.jdt.core.prefs
fbricon commented Jul 22, 2020
Not recommended workaround (not future-proof):
One workaround is to downgrade the extension "Language Support for Java(TM) by Red Hat" from the most recent version 0.65.0. back to
vscode-java version 0.64.1.
(This is not recommended unless you have restrictions on the JDK version, it is just possible, see the remarks at the bottom. If you can, use the accepted answer of this thread instead.).
This should be relevant only for those who cannot install JDK 11 or higher:
- Due to a 32-bit system (and who by the same time are forced to use an Oracle JDK 8 as their last Oracle version for 32 bit, so that they are not allowed to use the recommended OpenJDK 14 - see JDK Requirements → click at the top at the Java Development Kit link → jump to https://adoptopenjdk.net/)
- Due to restrictions on a 64-bit system:
- One plausible reason is that you are not allowed to update Gradle and you have a Gradle version below 4.7, see the github discussion again.
- One "not that plausible" restriction could be some efficient laziness. You might simply not want to install a new JDK and change the Visual Studio Code settings back to your old JDK only because of a version change of the Java extension :).
You should not do this if you have no important restrictions. The most plausible restriction is that you use Windows 32 bit, which should be relevant only for those who have an old netbook lying around.
In the usual case: upgrade, and then you can still go back to using an older Java version by changing the settings according to JDK Requirements:
Do I need to migrate my projects to Java 11?
"NO, you don't! Well, you should, be we're not here to judge. It is still possible to compile/run Java applications from Java 1.5 to 14, provided the proper java.configuration.runtimes are configured in the user's settings.json."
--> This means you can upgrade the extension, install at least Java 11 (JDK 11), and use the Java runtime of your choice
Скачал вчера свежую JDK 11 и поставил, но возникает ошибка.
Error: A JNI error has occurred, please check your installation and try again Exception in thread "main" java.lang.UnsupportedClassVersionError: hel has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0
Как я понял, это из-за того что JDK 11, и код скомпилирован на нём, а но моём компьютере версия джавы другая (восьмая), но вопрос в том, где я могу скачать JRE 11? Официальный сайт Оракла предлает только восьмую версию. Не бейте только за этот вопрос, я пытаюсь научиться, а вчера 11 Java вышла вот я её и скачал.
fbricon commented Jul 22, 2020
seanGammage commented Jul 22, 2020
fbricon commented Jul 22, 2020
@akaroml @jdneo @testforstephen @Eskibear can you make sure the Java extension pack JDK requirements align with vscode-java?
fbricon commented Jul 22, 2020
Wiki page says it all:
jamesward commented May 24, 2020
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
I don't understand why today I'm getting this error. Managed to temporarily solve this by downgrading Language Support for Java(TM) by Red Hat to 0.64.1.
Environment
- Operating System: Windows_NT x64 10.0.20161 (remote ssh to ubuntu 18)
- JDK version: Open jdk 8
- Visual Studio Code version: 1.47.2 (user setup)
- Java extension version: 0.9.1
- Java Debugger extension version: 0.27.1
The text was updated successfully, but these errors were encountered:
jamesward commented May 4, 2020
This is coming from the jar launcher. The way it finds the system JRE is really strange. It uses registry settings, not JAVA_HOME or PATH.
11 Answers 11
and keep the rest of the settings as is.
For future readers. If you are using the extension "Spring Boot Tools" you may get a similar error to this. I had my JAVA_HOME set to java 8 but required java 11 to use the Spring Boot Tools Language Server. It seems that Spring Boot Tools uses whatever your JAVA_HOME environment variable is or in the PATH environment variable, Spring Project Issue. To override your JAVA_HOME variable you'll need to modify the spring-boot.ls.java.home setting.
- Open Visual Studio Code
- CRTL + , to open the settings
- Search spring-boot.ls.java.home
- Select 'Edit in settings.json'
- Your Java 11 installation → "spring-boot.ls.java.home": "C:\\Program Files\\Java\\jdk-11.0.10"
- Save and restart VS Code
Prereq: Have a Java 11 installation
"java.home" and env "JAVA_HOME" settings were ignored by boot tool. "spring-boot.ls.java.home" setting works.
this is called answer thanks man. and hi how did you know this solution? I want to have kind of this sight too
Do I need to migrate my projects to Java 11?
Решение
Используйте сборку OpenJDK.
В данный момент, OpenJDK сборка от Oracle является единственно доступной. Однако, в скором времени будет доступно больше, например, от AdoptOpenJDK (вероятно, на этой неделе). А также сборки OpenJDK, от других, отличных от Oracle, участников комьюнити, которые будут использоваться для долгосрочной поддержки Java 11. (прим. переводчика: про разницу между OpenJDK и AdoptOpenJDK можно прочитать этот ответ на SO)
thiscantbeserious commented Jul 23, 2020 •
I noticed the new version tries to detect the language version used by the project (JavaSE-1.5) - how do I manage these? Any config? All these projects are not Maven/Gradle but are old Eclipse projects using IVY, so I can't just go ahead and modify them mindlessly. What I found out that there were some old Eclipse extension-settings stored with source-level set to 1.5 - I adjusted them to 1.8 (like the projects now require). But in the status bar there was still the JavaSE-1.8 mentioned . in the old version everything worked in that regard, there weren't any issues with the projects.
For now I also downgraded, until I get to understand how the runtime-configs work and how I can assign them to my Eclipse legacy-projects. I tried to config it like this:
A bit off-topic but while we're at it: The Eclipse-Importer seems to ignore the "java.import.exclusions" config completely.
xJoeWoo commented May 5, 2020
@bshaffer Here's trace messages:
I tried to add org.gradle.java.home property but still not woking.
thiscantbeserious commented Jul 23, 2020
That's the file(s) that previously had source-level set to 1.5 - I've adjusted these for the other projects and it happened to work fine judging from the code-completion for example with lambdas. From my quick test the new version didn't happen to catch it up in the status-bar . I can't update to the new version right now since I need to finish a task but I'll try it later and will report back if there's any issues or if it was just a hiccup. Indeed I'm using the above config running the extension with OpenJDK 11 for now . and it seems to work fine on 0.64.1, so at least that shouldn't be a blocker for me.
Ловушка
В течение 23 лёт разработчики привыкли загружать JDK с сайта Oracle и использовать его бесплатно. Введите «JDK» в свою любимую поисковую систему, и верхняя ссылка будет вести на страницу загрузки Oracle Java SE (я намеренно не предоставляю ссылку). Но этот запрос и эта ссылка теперь являются ловушкой.
Oracle JDK, на который ссылаются почти все поисковые запросы, теперь является коммерческим, и не является бесплатным.
Ключевая часть обновлённого лицензионного соглашения заключается в следующем:You may not: use the Programs for any data processing or any commercial, production, or internal business purposes other than developing, testing, prototyping, and demonstrating your Application;
Вы не можете использовать программы для любой обработки данных или для любых коммерческих, производственных или внутренних бизнес-целей, кроме разработки, тестирования, прототипирования и демонстрации вашего приложения;
Ловушка выглядит следующим образом:
- Загрузите Oracle JDK (потому что это то, что вы всегда делали, и это то, куда с большой вероятностью выведет вас поисковая система).
- Используйте его в продакшен среде (потому что вы не понимали и/или не знали, что лицензия изменена)
- Получите неприятный телефонный звонок от команды по защите прав Oracle, требующей много денег.
Является ли эта ловушка злонамеренным поведением со стороны Oracle? У читателей будет свое мнение. Стоит иметь в виду, что Oracle вкладывает огромные суммы в разработку Java, поэтому разумно иметь коммерческий план для тех, кто этого хочет. Однако, Oracle также они предоставляет бесплатную альтернативу.
4 ответа 4
В Java 11 нет JRE. Если вы разработчик, вы можете запускать свою программу при помощи JDK 11. Если вы хотите делать это из командной строки, вы должны позаботиться о том, чтобы путь к java или к java.exe из JDK11 стоял, в переменной окружения PATH , раньше пути к java или к java.exe более старых JRE. При этом вы должны учесть, что в Windows установщики старых Public JRE копировали java.exe в директорию C:\Windows\System32 , которая так же прописана в PATH . Лучше всего просто удалить старую Public JRE. Старый JDK удалять не обязательно, он не помешает.
Если же вы хотите послать свою программу конечному пользователю, у которого теперь нет подходящего JRE и который не хочет устанавливать JDK, вы должны создать рантайм среду (некое подобие старого JRE), которая будет включать лишь необходимые Java модули, включая модуль вашей программы.
Для примера разберём простой Hello world. Пусть ваша программа состоит из одного класса com.example.MainClass и является модулем tryout , то есть кроме com/example/MainClass.java у вас есть и module-info.java (в default пакете, то есть над com ) с описанием модуля. Например с таким минимальным:
Кстати, в IntelliJ IDEA добавление модуля является отдельной операцией от добавления класса в меню New . Создать module-info.java тем же способом, которым вы создаёте обычный класс вы не сможете.
После сборки вашего проекта, например при помощи Maven, у вас получится некий jar файл, точное название которого совершенно неважно. Это jar файл и будет вашим модулем, описание которого будет у него внутри в module-info.class . Для создания рантайм среды вы должны запустить примерно такую комманду:
jlink --module-path . --add-modules tryout --launcher start=tryout/com.example.MainClass --output tryoutapp
Описание используемых параметров:
--module-path . говорит о том, где искать модули, кроме модулей JDK. В данном случае в текущей директории . .
--add-modules tryout говорит о том, какие модули включить, кроме модулей, включаемых по-умолчанию из JDK.
--launcher start=tryout/com.example.MainClass говорит о том, что нужно создать скрипты запуска start (UNIX Shell script) и start.bat (Batch script) которые будут запускать модуль tryout , запуская класс com.example.MainClass в этом модуле. Указание класса опционально и в моём случае понадобилось потому, что я поленился указать его в MANIFEST.MF внутри jar файла.
--output tryoutapp говорит о том, в какой директории создавать рантайм среду. При этом если такая директория уже существует и даже если она пустая, будет ошибка: "Error: directory already exists: tryoutapp".
В конечном итоге вы получите директорию tryoutapp внутри которой будет всё необходимое для запуска вашей программы (вашего модуля). При этом ваш jar файл вы там не найдёте. Ваш модуль (а значит и класс com.example.MainClass ), вмести с остальными модулями, будет находиться в файле tryoutapp/lib/modules . В моём случае размер этого файла 23 мегабайта. Стартовые скрипты start и start.bat будут находиться в директории tryoutapp/bin .
Более детальное описание утилиты jlink вы можете получить запустив jlink --help .
The text was updated successfully, but these errors were encountered:
Резюме
НЕ загружайте и не используйте Oracle JDK, если вы не намерены платить за него.
С настоящего момента и впредь, для использования Java 11 загружайте и используйте сборку OpenJDK.
Today Visual Studio Code started showing me a pop-up saying:
Java 11 or more recent is required to run. Please download and install a recent JDK.
I need to use the JDK 8 (working on Apache Beam and that's the last supported version). I have been working on that and haven't had any issues until this came up.
I have read through this article and implemented the points mentioned there.
Here is my workspace settings on Visual Studio Code (I have double-checked the paths)
Other helpful information:
This started happening today even though I have been running JDK 8 on Visual Studio Code successfully for a while now. I don't remember updating Visual Studio Code, so I'm not sure as to why this is being displayed now since apparently the pop-up has been displayed since mid-April (asked on the vscode-java Gitter channel).
Please see this post - Java 11 is now a requirement. It looks like you simply have to move everything about running VSCode to Java 11. Note that you can still code for a lower version of Java.
xJoeWoo commented May 2, 2020
Same issue, even on latest openjdk 11 environment.
xJoeWoo commented May 23, 2020 •
After upgrade to 0.1.2, generateProto tasks(or run the exe directly) still not working with same dialog popped out, but requires JRE 1.7
jamesward commented May 19, 2020
This is fixed with 0.1.2
shanewaz-abbas commented Jul 22, 2020
Hey @seanGammage it seems like you can point to jdk 11 and it wouldn't impact running the project, though I haven't tried it as I am busy at the moment, and the downgrade was sufficient for me. To downgrade, you just have to go the java extension page and install another version and then reload.
shanewaz-abbas commented Jul 22, 2020
So I can still run my project without making changes, I just have to use jdk 11? Or did I misunderstand?
Читайте также: