#java #jar #executable-jar #java-11 #bluej
#java #jar #исполняемый файл-jar #java-11 #bluej
Вопрос:
Итак, по сути, каждый раз, когда я вижу, как задают этот вопрос, на него нет ответа, который я ищу, и именно поэтому я пытаюсь задать его себе.
По сути, я создал java-проект на BlueJ (к сожалению, требуется в школе. Но я могу экспортировать его в другое место, если это проблема (предпочтительно IntelliJ или Visual Studio Code)), но, по сути, я хочу сделать так, чтобы я мог просто дважды щелкнуть мой файл .jar export, и он откроет окно терминала и запустится. Однако, когда я пытаюсь это сделать, я получаю эту ошибку: первая ошибка
И когда я нажимаю Ok, появляется следующее: вторая ошибка
Теперь, если я хочу, чтобы jar запускался на терминале, все java -jar jarFileName.jar
работает идеально, но я хочу, чтобы это происходило, когда я дважды щелкаю файл jar; для его запуска и запуска с терминала.
Все другие ответы, которые я видел для этой проблемы, обвиняют компьютер пользователя и обычно говорят им установить какую-либо версию java или что-то еще, но это не проблема. У меня есть другие файлы jar, которые я могу отлично запускать, например, установщик Minecraft Forge или установщики Minecraft Spigot (извините, только примеры Minecraft, не так много использует Java). А также это было для проекта uni, и никто другой в моей области не знает, как сделать их jar исполняемым, и этот файл не работает ни для кого другого.
Так что да, я знаю, что это проблема с тем, как был скомпилирован jar или что-то в этом роде, а не с тем, какая Java установлена на моем компьютере.
Я просто хочу сделать его доступным для двойного щелчка для удобства, когда я отправляю его друзьям, но если кто-нибудь знает другой способ, которым я могу обойти эту проблему, тогда все в порядке. Например, я знаю, что мог бы создать файл Bash, который просто выполняет java -jar jarFileName.jar
для меня или что-то в этом роде, но я бы предпочел, чтобы все это было как один файл jar, поэтому я не знаю, можно ли это включить в файл, но да.
Также мне бы очень хотелось решение, которое не требует загрузки внешних программ или чего-то еще, поскольку все, что я хочу сделать, это отправить этот файл своим друзьям и попросить их просто дважды щелкнуть по нему для запуска.
TL; DR, что мне нужно сделать, чтобы сделать мой файл jar действительно исполняемым, дважды щелкнув по нему. Спасибо.
Ответ №1:
Чтобы сделать файл jar исполняемым, вы должны установить точку входа
Вы можете сделать это, передав e
параметр команде jar при создании файла jar, например:
jar cvfe myapp.jar com.mycompany.myapp.MyApp commycompanymyapp
Это добавит запись основного класса в манифест jar, указывающую на класс startup, который должен иметь метод main, например:
package com.mycompany.myapp;
public class MyApp {
public static void main(String[] args) {
// start up the application
}
}
Когда вы создаете файл JAR, он автоматически получает файл манифеста по умолчанию. В архиве может быть только один файл манифеста, и у него всегда есть путь
META-INF/MANIFEST.MF
Точка входа указывается основным классом, например:
Manifest-Version: 1.0
Created-By: 1.8.13_37 (Oracle Corporation)
Main-Class: com.mycompany.myapp.MyApp
Если вы хотите сделать существующий файл jar исполняемым, вы можете разархивировать его, изменить манифест и снова заархивировать (и переименовать его, чтобы он имел расширение .jar — jar — это просто zip).
Но я думаю, что ошибки, которые вы показываете, вызваны не тем, что jar не является исполняемым, а какой-то проблемой среды, из-за которой приложение Java не находит необходимые переменные или пути для обеспечения работы Java Native Integration (JNI). Чтобы решить эту проблему, вам нужно будет предоставить более подробную информацию о том, что вы пытаетесь сделать с помощью JNI.