как использовать jdk без jre в java 11

<p>мы планируем перевести наш проект java 8 на использование java 11. но я заметил, что в java 11 нет папки jre. </p><p>в java 9 и java 10 структура папок изменяется, т.е. <code>java\jdk1.x</code> или <code>java\jre1.x</code>, где <code>x</code> - это java 9 или 10.</p><p>но в java 11 я получаю только одну папку, то есть <code>java\jdk-11</code>. как мой клиент будет использовать мое приложение без jre?</p><p>что я понял, так это то, что java 11 обеспечивает модульность нашего приложения, и использование jlink необходимо для создания нашего собственного jre для запуска приложения в клиенте.</p><p>правильно ли мое понимание?</p>

<p>в течение 20 лет jdk поставлялся с jre, который являлся лишь подмножеством его функциональных возможностей, установленным в другом каталоге вашей системы.</p><p>на самом деле, он поставляется с двуми одинаковыми jre, один установленный внутри установочного каталога jdk, а другой снаружи.</p><p>это всегда озадачивало меня, так как сопровождающие тратят на это полную отдачу, а также полную трату дискового пространства на компьютере, на котором вы его устанавливаете, поскольку jre просто дублирует некоторые вещи, которые jdk может делай уже.</p><p>наконец, с java 11 oracle и команда openjdk решили покончить с этой глупостью и просто распространить одну вещь, jdk . этот jdk, когда он установлен, на самом деле меньше на вашем жестком диске, чем старый jre, что раньше, удаляя даже несколько обоснованный аргумент, что вы хотели бы иметь отдельную jre для устройств с ограниченным дисковым пространством, аргумент, который никогда не объяснял, почему 2 jre будут устанавливаться с одним jdk, но был сделан, чтобы оправдать необходимость jre как урезанная среда выполнения для jdk.</p><p>поэтому нет необходимости в отдельном jre, и он давно не существовал, не говоря уже о том, чтобы включать и принудительно устанавливать его как часть установки jdk.</p><p>и нет, вам не нужно создавать свою собственную jre. просто установите openjdk на клиентских компьютерах и убедитесь, что вы добавляете $ java\_home/bin в системный путь, так же, как вы делали это со старыми jre.</p><p>и, о, удалите дерево каталогов windows из любых файлов java * .exe, которые обычно помещались там в некоторых версиях старого установщика jre, а также системный путь, в который также были добавлены некоторые странные записи, добавленные некоторыми установщиками jre.</p>

<p>посетите веб-сайт проекта adoptopenjdk, чтобы загрузить последнюю версию jre и jdk <a href="https://github.com/adoptopenjdk/openjdk-jdk11">https://github.com/adoptopenjdk/openjdk-jdk11</a> </p><p>я использовал их ночные сборки, чтобы обойти проблему отсутствия jre в пакете jdk <a href="https://adoptopenjdk.net/releases.html?variant=openjdk11#x64\_linux">https://adoptopenjdk.net/releases.html?variant=openjdk11#x64\_linux</a> </p><p>просто распакуйте jre в папку jdk и все будет.</p><p> <a href="https://i.stack.imgur.com/bgtz0.png"> <img src="https://i.stack.imgur.com/bgtz0.png" alt="enter image description here"> </a> </p>

<h1>тл; др</h1><blockquote> <p>как мой клиент будет использовать мое приложение без jre?</p> </blockquote><p>implementation объедините реализацию java в приложении на основе java. </p><p>узнать о:</p><ul> <li> <a href="https://en.wikipedia.org/wiki/java\_platform\_module\_system"><em>модульная система платформы java</em></a> </li> <li><em>jlink</em> ( <a href="https://openjdk.java.net/jeps/282">jep 282</a> )</li> <li><em>jpackage</em> ( <a href="https://openjdk.java.net/jeps/343">jep 343</a> )</li> </ul><h1>подробности</h1><blockquote> <p>я понял, что java 11 обеспечивает модульность нашего приложения.</p> </blockquote><p>нет, строго говоря, модульность не требуется. большинство существующих приложений могут работать как есть на java 11. вы можете продолжить разработку на java 11 без модуляции кода. но в вашем случае для настольного или мобильного приложения с графическим интерфейсом вам необходимо упаковать jvm в ваше приложение. модуляризация и использование инструментов <em>jlink</em>, вероятно, лучший способ сделать это. в отличие от этого, серверное приложение на основе сервлетов или сервер microservices еще не нуждаются в модульности, хотя, вероятно, это хорошая идея в конечном итоге.</p><blockquote> <p>я заметил, что в java 11 нет папки jre.</p> </blockquote><p>oracle больше не предполагает, что конечные пользователи будут устанавливать jre или jdk. <a href="https://en.wikipedia.org/wiki/java\_applet">java-апплеты</a> в браузере и <a href="https://en.wikipedia.org/wiki/java\_web\_start">java web start</a> доставка приложений прекращается, и у конечного пользователя нет необходимости в jre. ожидается, что приложения на основе java будут включать собственную реализацию java. единственными, кто сознательно устанавливает jdk, будут разработчики и системные администраторы на стороне сервера.</p><p>важный:</p><ul> <li>четко понять природу <a href="http://openjdk.java.net">openjdk</a> проекта, как <a href="https://en.wikipedia.org/wiki/openjdk">объяснено в википедии</a> </li> <li>прочтите этот документ oracle от 2018-03, <a href="https://www.oracle.com/technetwork/java/javase/javaclientroadmapupdate2018mar-4414431.pdf"><em>обновление дорожной карты клиента java</em></a> </li> <li>прочтите технический документ <a href="https://stackoverflow.com/a/53112096/642706"><em>java все еще бесплатен</em></a> , автором которого являются ключевые члены сообщества java.</li> </ul><p>вот блок-схема, которая может помочь вам найти и принять решение среди различных поставщиков, предоставляющих реализацию java 11.</p><p> <a href="https://i.stack.imgur.com/9ffel.jpg"> <img src="https://i.stack.imgur.com/9ffel.jpg" alt="flowchart diagram to aid in finding and choosing an implementation of java 11 from various vendors."> </a> </p>