#java #macos #jar
#java #macos #jar
Вопрос:
Недавно я переключился с Windows на Mac и попытался открыть исполняемый файл .jar на своем Mac, щелкнув значок в Finder. Каким-то образом оказалось, что mac не может выполнить файл .jar, кроме как с помощью терминала.
После некоторых исследований я узнал, что «javapackager» и «Jar Bundler» — это способы сделать его работоспособным, но я не смог найти никакой функциональной загрузки для этих программ.
Итак, есть ли какой-нибудь способ сделать эти программы работоспособными?
Ответ №1:
Модель распространения, заключающаяся в отправке jar
файла пользователю, а затем в ожидании, что он просто знает, что с ним делать, устарела — oracle более или менее признала, что подавляющее большинство настольных java-приложений сейчас и никогда не развертывались таким образом: они перестали поддерживать идею «JRE». Вот как это более или менее официально (поскольку продукты oracle явно поддерживали эту модель) работало:
- Разработчик приложений создает java-приложение, превращает его в набор файлов jar и отправляет в виде zip-файла или с помощью чрезвычайно простого установщика, который просто копирует их куда-нибудь.
- Пользователь приложения заключает контракт с Oracle на загрузку JRE; обслуживание этого JRE (потому что кому-то нужно это обновить или, по крайней мере, сообщить пользователю, что в нем есть утечка безопасности, если это произойдет) — это соглашение полностью между пользователем (или, возможно, сопровождающим ОС) и oracle; разработчик приложения не имеет никакого праваучаствуйте в этом и не контролируйте его.
- Если нет доступной JRE, пользователь должен позаботиться об этом, разработчик приложения не имеет реального контроля над этим.
- Разработчик приложений более или менее просто молится, чтобы их приложение хорошо работало на любом JRE, который используется при двойном щелчке по их jar. Если это неправильная версия, вы не можете включить устаревшее уведомление или что-то подобное или даже осмысленно указать в файле jar, с какими версиями java вы совместимы.
Это устарело, поскольку oracle перестала поставлять JRE и перестала хотеть быть «на крючке» для установления отношений с каждой системой конечного пользователя на планете для поддержки этих JRE.
Таким образом, вы работаете со старым механизмом развертывания. Если вы являетесь владельцем этого приложения, обновите его до новой модели (например, используя jlink
и jpackager
, чтобы создать .app
и отправить его в .dmg
обычные приложения для Mac, Кроме того, это позволяет вам подписывать его, Иметь красивый значок и т. Д.). Если нет, пришло время поговорить с разработчиком этого приложения и попросить их сделать это. До тех пор, вот как вы обходите это:
- Перейдите к https://adoptopenjdk.net и загрузите openjdk.
- Установите его.
- Включите в свою повестку дня повторяющуюся встречу: каждый месяц или около того посещайте adoptopenjdk.org и проверьте наличие обновлений. Удалите openjdk, который у вас был, и установите новый. Невыполнение этого требования означает, что ваша система может быть скомпрометирована. AdoptOpenJDK на самом деле не предназначен для такого рода вещей (на самом деле ничего нет, кроме Oracle JRE8, но [A] на данный момент ему 10 лет, и [B] oracle уже прекратил его поддержку или скоро прекратит, и в этот момент это также проблема безопасности), поэтому вам нужно приложить усилия.
- Дважды щелкните по jar.
Ответ №2:
На самом деле, я новичок в Mac, и я просто хочу попробовать, и это сработало. Что я делаю, так это создаю проект maven и добавляю некоторые плагины для создания исполняемого файла jar. Сторона плагинов Maven;
<build>
<finalName>myExecutableApp</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.1.2</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/libs
</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>libs/</classpathPrefix>
<mainClass>
com.rcelik.executable.ExecutableMavenJar
</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
И некоторый код swing, чтобы понять, запущен ли исполняемый файл jar.
public class ExecutableMavenJar {
public static void main(String[] args) {
JFrame f=new JFrame();
JButton b=new JButton("click");
b.setBounds(130,100,100, 40);
f.add(b);
f.setSize(400,500);
f.setLayout(null);
f.setVisible(true);
}
}
После части кода я просто упаковываю проект с помощью maven. И я мог бы запустить исполняемый файл jar, дважды щелкнув по нему. Не могли бы вы проверить этот способ создания исполняемого файла jar. Кстати, macOS открывает файл jar с JavaLauncher.app, который используется по умолчанию.