Развертывание JAR с Java 9 и выше (в данном случае JDK11) (путаница JLink?) - PullRequest
1 голос
/ 10 мая 2019

Я ветеран Java, но я давно использую JDK8. Я решил, что наконец хочу обновить, поэтому я использую Java11. Я наслаждаюсь новыми функциями, но я достиг того момента, когда мне нужно развернуть свое программное обеспечение.

Раньше я экспортировал работающий JAR из Eclipse и связывал его с соответствующим JRE. Затем я использовал бы оба для запуска программного обеспечения из определенной для ОС программы (например, EXE-файл, который запускает связанный JRE с данным JAR). Конечно, сейчас это не совсем вариант, потому что JRE остались в прошлом. Предположительно, новая система на ее месте намного легче и прямолинейнее, единственная проблема в том, что я не могу понять, как ее использовать.

Я читал о том, как развертывать программы с JDK9 и выше, и видел, как люди упоминали JLink и ссылались на него, но я не могу найти прямой ответ о том, как просто экспортировать работающий JAR. Дело в том, что мне не нужна вся поддержка модуля, и я не хочу его настраивать. Есть ли инструмент для простого экспорта того, что я могу запустить? Как это делается сейчас?

Извините, если это тупой вопрос, я просто искренне запутался в том, как все это работает, и не могу найти в Интернете ничего, что ясно и кратко излагает. На JLink есть много документации и что она делает, но я не нашел ничего, что объясняло бы основную цель всего этого.

TL; DR; Как экспортировать рабочие программы Java с JDK9 и выше, используя Eclipse (последняя версия)?

Спасибо, что уделили время!

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Я потратил буквально месяцы, пытаясь выяснить, как создать один исполняемый файл с возможностью нажатия, использующий Java 9+. Теперь я делаю вывод, что это невозможно. Независимо от того, используете ли вы непосредственно ссылку jlink или косвенно через Maven или Gradle, в результате jlink создает полную структуру каталогов, которую вы можете «распространять среди своих пользователей» (как-то, как мне кажется, волшебным образом, поскольку в Java 9+ вам ничего не сказано) что-нибудь о том, как вы должны это сделать). Затем, когда ваш пользователь (каким-то образом) имеет этот каталог на своей машине, он вынужден вызвать runtime-image-directory / bin / your-program-name. Как будто ваш пользователь - программист, который с радостью должен установить структуру каталогов и выполнить детализацию, чтобы вызвать определенное имя файла, которое похоронено в каталоге с множеством других файлов, а не пользователь, который использовал, чтобы иметь возможность просто дважды щелкните файл .jar, чтобы запустить его. Это заставляет меня задуматься, не задумывался ли кто-нибудь об этой «пользовательской программе». Тот факт, что в Java 9+ НЕТ ПУТИ, чтобы просто доставить ОДИН файл (например, .jar) пользователям, вместе с тем фактом, что просто СОЗДАНИЕ этого «образа времени выполнения» является фантастически сложным, означает, что разработчики собираются отказаться от Java в массовом порядке. Мне действительно кажется, что умники в Oracle просто не продумали это. Они создали смертельный колокол для Java, заставив разработчиков создавать и распространять что-то обременительное, а пользователей - обременительно. Я не понимаю, как можно позволить этой ситуации остаться без того, чтобы в конечном итоге Java не угасла. Кто-нибудь, пожалуйста, поправьте меня, если я что-то здесь упускаю, но я потратил месяцы, пытаясь выяснить, как создать исполняемый jar в Java 9+, ИСПОЛЬЗУЯ МОДУЛИ, и, похоже, нет способа сделать это.

1 голос
/ 10 мая 2019

... как просто экспортировать работающий JAR.

Что ж, если вы не планируете использовать модули для своих классов приложений, часть JAR должна быть такой жекак прежде.Вам просто нужно создать свой собственный JRE, используя jlink, например:

jlink --add-modules java.se --output jre

Это создаст папку jre с образом выполнения, который включает все модули java.se.

Затем вы можете связать это с вашим JAR, как и раньше.


Интересная часть здесь заключается в том, что вы можете выбирать, какие модули входят в этот образ времени выполнения.java.se - это агрегаторный модуль, который транзитивно включает в себя множество других модулей.Но вы также можете указать свой собственный список модулей, исключив некоторые из них, которые вам не нужны, и сделать окончательный образ времени выполнения меньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...