Как запустить jar файл с параметром

Обновлено: 03.07.2024

У меня есть файл JAR с именем файл HelloWorld.Джар. Чтобы запустить его, я выполняю следующую команду в окне командной строки:

это работает нормально, но как я могу выполнить его с двойным щелчком мыши вместо этого? Нужно ли устанавливать какое-либо программное обеспечение?

самый простой маршрут, вероятно, обновление или повторная установка среды выполнения Java (JRE).

в Windows Vista или Windows 7,ручной редактор ассоциаций файлов удалено.

самый простой способ-запустить Jarfix, крошечный, но мощный инструмент, бесплатная. Просто запустите его, и ваши Java-приложения вернутся. дважды щелкните снова.

Если вам нужно распространить ваши .jar-файл и сделать его работоспособным на компьютерах Windows других людей, вы можете сделать простой .bat файл как это в командной строке:

и место .файл bat в том же каталоге, что и ваш.файл jar.

если у вас есть файл jar с именем Example.jar, следуйте этим правилам:

  1. открыть notepad.exe
  2. пишем : java -jar Example.jar
  3. сохранить его с расширением .bat
  4. скопируйте его в каталог, который имеет
  5. дважды щелкните его, чтобы запустить свой

интересный побочный эффект этого вызывает проблему при запуске запускаемых файлов jar в командной строке.

Если вы попробуете (в командной строке)

нет радости, потому что это переводится на следующее (Это не работает):

javaw, который.exe-jar jarfile.параметр банку

однако следующая команда работает:

java.exe-jar файла jarfile.параметр банку

Если вы измените ассоциацию в файловом менеджере, как описано выше, на:

"C:\Program файлы\Java\j2re1.4.2_04\bin\java.exe "- jar "%1"%*

затем вы можете ввести:

в командной строке, и теперь он будет работать! EDIT: (однако затем вы получаете черное окно консоли при запуске Java-приложения на основе формы (не консоли), поэтому это не идеальный вариант решение)

Если вы запустите эти файлы jar, дважды щелкнув их в windows, никакие параметры не будут переданы, поэтому ваш код Java должен обрабатывать исключение переполнения стека и включать функцию "нажмите клавишу" в конце или окно просто исчезнет.

чтобы передать параметр в windows, вам нужно создать ярлык для файла jar, который включает параметр в целевую строку (щелкните правой кнопкой мыши на ярлыке и выберите Свойства) , вы не можете добавить параметры в сам значок файла jar таким образом.

здесь нет единого согласованного решения, но у вас будет такая же проблема с любым другим консольным приложением.

существует бесплатное приложение для windows под названием "bat to exe", которое вы можете использовать для создания exe-файла из.файл bat с командной строкой apropriate в нем. вы также можете встроить файл jar в exe с помощью этого приложения и очистить его, когда он закончит работу, так что это может быть больше элегантное решение.

Иначе теряется весь смысл "Executable Jar File".
Простого юзера не заставишь что-то там набирать в "какой-то там консоли". Ну вы меня понимаете.

Как вариант - глобально задать выделение памяти 110m, но как?
Какой set . .

Спасибо за внимание.

А что, исполняемые jar-файлы только для этого и нудны??
А я думал, что для того, чтобы не париться и не искать конкретный класс, который надо запустить и т.п.

ИМХО, для того, чтобы пользователь не парился и мог запустить java-программу надо писать файлики phone.sh или phone.bat - по ситуации.

А что, исполняемые jar-файлы только для этого и нудны?? Конечно же нет.
А из батника получаешь на долю секунды "моргание" консоли. Но так разумеется можно решить задачку.
Если обычную прогу легко запускаешь из jar, я надеялся, что и с параметром это тоже возможно.

sh скрипт - это всего лишь средство. наиболее простое ИМХО.

Можно ведь и на C++, например то же самое написать, тогда не будет "моргания". Правда сам не пробовал, но теоретически - должно работать.

Например, запостить такой вопросец в "Решите мне задачку" или на sourceforge.net посмотреть - наверняка кто-нибудь подобный "лаунчер" уже писал

Есть такой "лаунчер"
Вместе с JDK/JRE идёт. javaw.exe называется.

"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC

Однако это не решает упомянутой проблемы.

А "лаунчером" я назвал не java.exe или javaw.exe, а программу, которая как раз его запустит %)

Можно это сделать легко - через sh и bat, или посложнее - исполнив программу из другой .exe программы-лаунчера.

К слову сказать, быть может проблемка разрешается при помощи соответствующего набора параметров в META-INF/manifest.mf в исполняемом jar-файле

при помощи соответствующего набора параметров в META-INF/manifest.mf в исполняемом jar-файле

Какие нужны параметры ? Кроме Main-Class: в моем случае там ничего нет

И повторюсь по поводу глобального выделения памяти для java программы - кто-то в курсе как это сделать? Тогда все должно решиться

есть роскошный способ. Ассоциировать в win32 клик на jar с открытием javaw с параметрами

"Особое внимание начинающих аквариумистов хотим обратить на то, что рыбки никогда не спят на спинке!" (c)

viel spass, DeeJayC

Oleg_S писал(а): Вопрос:
Как запустить jar с этим параметром (-Xmx110m) через double click ?

Я бы посоветовал постараться пересмотреть саму программу и переписать ее так, что бы дополнительная память не требовалась бы. Все параметры -Х - это нестандартные параметры JVM, и нет никакой гарантии, что в следующих версиях Java они будут поддерживаться. Скорее всего, именно из-за этого и нет другого способа (а может просто я не знаю) установить эти параметры, без использования командной строки.

На самом деле, есть всевозможные лаунчеры (например InstallAnywhere), которые умеют создавать для проекта .exe файлы, управляемые с помощью конфигурационных файлов, где можно установить все нужные параметры для JVM - будет работать.


Сейчас уже никто не создает программы в консоли. Используя любимую IDE, разработчик чувствует себя неуютно за чужим компьютером, где её нет.
Решив разобраться в работе Ant и Maven, я поймал себя на том, что не смогу собрать приложение без них в консоли.
В данной статье я постарался уместить все этапы проектирования демонстрационного приложения, чтобы не искать справку по каждой команде на просторах Интернета.

От простого к .

Каждая программа обычно содержится в отдельном каталоге. Я придерживаюсь правила создавать в этом каталоге по крайней мере две папки: src и bin. В первой содержатся исходные коды, во второй — результат компиляции. В данных папках будет структура каталогов, зависящая от пакетов.

Один файл

Можно сделать и без лишних папок.
Берем сам файл HelloWorld.java.
Переходим в каталог, где лежит данный файл, и выполняем команды.
В данной папке появится файл HelloWorld.class. Значит программа скомпилирована. Чтобы запустить

Отделяем бинарные файлы от исходников

Теперь сделаем тоже самое, но с каталогами. Создадим каталог HelloWorld и в нем две папки src и bin.
Компилируем
Здесь мы указали, что бинарные файлы будут сохраняться в отдельную папку bin и не путаться с исходниками.

Используем пакеты

А то, вдруг, программа перестанет быть просто HelloWorld-ом. Пакетам лучше давать понятное и уникальное имя. Это позволит добавить данную программу в другой проект без конфликта имен. Прочитав некоторые статьи, можно подумать, что для имени пакета обязательно нужен домен. Это не так. Домены — это удобный способ добиться уникальности. Если своего домена нет, воспользуйтесь аккаунтом на сайте (например, ru.habrahabr.mylogin). Он будет уникальным. Учтите, что имена пакетов должны быть в нижнем регистре. И избегайте использования спецсимволов. Проблемы возникают из-за разных платформ и файловых систем.

Поместим наш класс в пакет с именем com.qwertovsky.helloworld. Для этого добавим в начало файла строчку
В каталоге src создадим дополнительные каталоги, чтобы путь к файлу выглядел так: src/com/qwertovsky/helloworld/HelloWorld.java.
Компилируем
В каталоге bin автоматически создастся структура каталогов как и в src.

Если в программе несколько файлов

HelloWorld.java
Adder.java

Ошибка возникла из-за того, что для компиляции нужны файлы с исходными кодами классов, которые используются (класс Calculator). Надо указать компилятору каталог с файлами с помощью ключа -sourcepath.
Компилируем

Если удивляет результат

Есть возможность запустить отладчик. Для этого существует jdb.
Сначала компилируем с ключом -g, чтобы у отладчика была информация.

Отладчик запускает свой внутренний терминал для ввода команд. Справку по последним можно вывести с помощью команды help.
Указываем точку прерывания на 9 строке в классе Calculator

Запускаем на выполнение.

Чтобы соориентироваться можно вывести кусок исходного кода, где в данный момент находится курссор.

Узнаем, что из себя представляет переменная а.

Выполним код в текущей строке и увидим, что sum стала равняться 2.

Поднимемся из класса Adder в вызвавший его класс Calculator.

Удаляем точку прерывания

Можно избежать захода в методы, используя команду next.

Проверяем значение выражения и завершаем выполнение.

Хорошо бы протестировать

Запускаем. В качестве разделителя нескольких путей в classpath в Windows используется ';', в Linux — ':'. В консоли Cygwin не работают оба разделителя. Возможно, должен работать ';', но он воспринимается как разделитель команд.

Создадим библиотеку

Класс Calculator оказался полезным и может быть использован во многих проектах. Перенесем всё, что касается класса Calculator в отдельный проект.

Измените также назавания пакетов в исходных текстах. В HelloWorld.java нужно будет добавить строку

Делаем архив jar

С помощью ключа -C мы запустили программу в каталоге bin.

Надо узнать, что у библиотеки внутри

Можно распаковать архив zip-распаковщиком и посмотреть, какие классы есть в библиотеке.
Информацию о любом классе можно получить с помощью дизассемблера javap.

Из результата видно, что класс содержит кроме пустого конструктора, ещё один метод sum, внутри которого в цикле вызывается метод add класса Adder. По завершении метода sum, вызывается Adder.getSum().
Без ключа -c программа выдаст только список переменных и методов (если использовать -private, то всех).

Лучше снабдить библиотеку документацией

Изменим для этого класс калькулятора.

Документацию можно создать следующей командой. При ошибке программа выдаст список возможных опций.

image

В результате получиться следующее

Можно подписать jar-архив

Если требуется подписать свою библиотеку цифровой подписью, на помощь придут keytool и jarsigner.
Генерируем подпись.

Генерируем Certificate Signing Request (CSR)

Содержимое полученного файла отправляем в центр сертификации. От центра сертификации получаем сертификат. Сохраняем его в файле (например, qwertokey.cer) и импортируем в хранилище

Файл qwertokey.cer отправляем всем, кто хочет проверить архив. Проверяется он так

Использование библиотеки

Есть программа HelloWorld, которая использует библиотечный класс Calculator. Чтобы скомпилировать и запустить программу, нужно присоединить библиотеку.
Компилируем

Собираем программу

Это можно сделать по-разному.

Первый способ

Здесь есть тонкости.
В строке

не должно быть пробелов в конце.
Вторая тонкость описана в [3]: в этой же строке должен стоять перенос на следующую строку. Это если манифест помещается в архив сторонним архиватором.
Программа jar не включит в манифест последнюю строку из манифеста, если в конце не стоит перенос строки.
Ещё момент: в манифесте не должно быть пустых строк между строками. Будет выдана ошибка «java.io.IOException: invalid manifest format».

При использовании команды echo надо следить только за пробелом в конце строки с main-class.

Второй способ

В данном способе избегаем ошибки с пробелом в main-class.

Третий способ

Включили код нужной библиотеки в исполняемый файл.

Запуск исполняемого jar-файла

Файл calculator.jar исполняемым не является. А вот helloworld.jar можно запустить.
Если архив был создан первыми двумя способами, то рядом с ним в одном каталоге должна находится папка lib с файлом calculator.jar. Такие ограничения из-за того, что в манифесте в class-path указан путь относительно исполняемого файла.

При использовании третьего способа нужные библиотеки включаются в исполняемый файл. Держать рядом нужные библиотеки не требуется. Запускается аналогично.

Как быть с приложениями JavaEE

Аналогично. Только библиотеки для компиляции нужно брать у сервера приложений, который используется. Если я использую JBoss, то для компиляции сервлета мне нужно будет выполнить примерно следующее

Структура архива JavaEE-приложения должна соответствовать определенному формату. Например

Способы запуска приложения на самом сервере с помощью командной строки для каждого сервера различны.

Надеюсь, данная статья станет для кого-нибудь шпаргалкой для работы с Java в командной строке. Данные навыки помогут понять содержание и смысл Ant-скриптов и ответить на собеседовании на более каверзные вопросы, чем «Какая IDE Вам больше нравится?».

На этом шаге мы поговорим про Jar-файлы

Приложение обычно упаковывается для того, чтобы предоставить в распоряжение пользователя единственный файл, а не целую структуру каталогов, заполненную файлами классов. Специально для этой цели был разработан формат архивный файлов Java Archive (здесь и далее JAR-файл). Файл формата JAR может содержать, помимо файлов классов, файлы других типов, в том числе файлы изображений и звуковые файлы. Более того, JAR-файлы уплотняются по широко известному алгоритму сжатия данных в формате ZIP.

Для создания JAR-файлов служит утилита jar. Новый JAR-файл создается с помощью следующего синтаксиса командной строки:

В таблице 1 перечислены все параметры утилиты jar.

Таблица 1. Параметры утилиты jar Параметр Описание c Создает новый или пустой архив и добавляет в него файлы. Если в качестве имени файла указано имя каталога, утилита jar обрабатывает его рекурсивно C Временно изменяет каталог. Например, следующая команда направляет файлы в подкаталог classes:

Помимо файлов классов, изображений и прочих ресурсов, каждый JAR-файл содержит также файл манифеста, описывающий особые характеристики данного архива. Файл манифеста называется MANIFEST.MF и находится в специальном подкаталоге META-INF. Ниже приведен минимально допустимый манифест:

Сложные манифесты содержат много больше элементов описания, группируемых по разделам. Первый раздел манифеста называется главным. Он относится ко всему JAR-файлу. Остальные элементы описания относятся к отдельным файлам, пакетам или URL. Эти элементы должны начинаться со слова Name. Разделы отделяются друг от друга пустыми строками. Приведем ниже пример манифеста.

Заметим, что последняя строка в манифесте должна оканчиваться символом перевода строки. В противном случае манифест не будет прочитан правильно.

Для того чтобы отредактировать этот манифест, достаточно ввести в него нужные строки, сохранив их в обычном текстовом файле, а затем выполнить следующую команду:

Например, для того чтобы создать новый JAR-файл с манифестом, нужно вызвать утилиту jar из командной строки следующим образом:

Чтобы добавить манифест в существующий JAR-файл, достаточно выполнить следующую команду:

С помощью параметра e утилиты jar можно указывать точку входа в прикладную программу, то есть класс, который будет обычно указываться при запуске программы по команде java.

Также, в манифесте можно указать главный класс прикладной программы, включая оператор в следующей форме:

Заметим, что не нужно добавлять расширение .class к имени главного класса. Независимо от способа указания точки входа в прикладную программу ее пользователи могут запустить ее на выполнение, введя следующую команду:

В зависимости от конфигурации операционной системы приложения можно запускать двойным щелчком на пиктограмме JAR-файла. Приведем ниже особенности запуска приложений из JAR-файлов в разных операционных системах:

  • В Windows установщик исполняющей системы Java образует сопоставление файлов с расширением .jar для запуска подобных файлов по команде javaw -jar (отличие команды javaw от java в том, что команда javaw не открывает окно командной оболочки).
  • В Solaris операционная система распознает "магическое число" (то есть системный код) JAR-файла и запускает его по команде java -jar.
  • В Mac OS операционная система распознает расширение файла .jar и выполняет программу на Java после двойного щелчка на JAR-файле.

Но программа на Java, находящаяся в JAR-файле, имеет тот же вид, что и собственное приложение операционной системы. В Windows можно использовать утилиты-оболочки сторонних производителей, превращающие JAR-файлы в исполняемые файлы Windows. Такая оболочка представляет собой программу для Windows с расширением .exe, которая запускает виртуальную машину Java (JVM) или же сообщает пользователю, что делать, если эта машина не найдена.

На платформе Mac OS дело обстоит немного проще. Утилита Jar Bundler, входящая в состав ИСР XCode, позволяет превратить JAR-файл в первоклассное приложение для Mac OS.

Классы, применяемые в аплетах и приложениях, часто ассоциируются с файлами данных. Это могут быть:

В Java все эти файлы называются ресурсами.

Предположим, что вы написали программу для учета книг в вашей домашней библиотеки. Вы решили купить новое издание уже имеющейся у вас книги. Безусловно, название описание и год выпуска книги изменятся. Для того чтобы легко отслеживать такие изменения, текст описания книги следует разместить в отдельном файле, а не встраивать его в программу в виде символьной строки. Разумеется, этот файл нужно разместить вместе с остальными файлами программы, например в JAR-файле.

Загрузчику классов известно, где находятся файлы классов, если они содержатся в каталогах, указанных в переменной окружения CLASSPATH, в архиве или на веб-сервере. Механизм ресурсов представляет аналогичные удобства и при обращении с файлами, которые не являются файлами классов. Для этого необходимо выполнить описанные ниже действия:

  1. Получить объект типа Class, имеющий ресурс, например AboutPanel.class.
  2. Если ресурс представляет собой графический или звуковой файл, вызвать метод getResource(имя файла), чтобы определить местонахождения ресурса в виде URL. Затем прочитать его непосредственно с помощью метода getImage() или getAudioClip().
  3. Если ресурс не является графическим или звуковым файлом, вызвать метод getResourceAsStream(), чтобы прочитать данные из файла.

Загрузчик помнит, где располагается класс, и может обнаружить там же файлы ресурсов. Приведем ниже пример:

Ресурсы совсем не обязательно размещать в одном каталоге с файлом классов. Можно задавать относительные пути:

Это относительное имя ресурса, поэтому оно определяется относительно пакета, которому принадлежит класс, загружающий этот ресурс. Обратим внимание на то, что в этом имени всегда нужно использовать разделитель /, независимо от тех разделителей, которые применяются в операционной системе. Например, на платформе Windows загрузчик ресурсов автоматически преобразует символ / в разделитель \.

Несмотря на то что ресурс загружается автоматически, стандартных методов интерпретации содержимого файла ресурсов не существует. В каждой прикладной программе приходится по-своему интерпретировать данные, находящиеся в подобных файлах.

Пакет, написанный на Java, можно герметизировать, чтобы в него больше нельзя было добавлять новые классы. Разработчики обычно применяют герметизацию в том случае, если они используют классы, методы и поля, имеющие область действия, ограниченную пакетом.

Так, если герметизируется пакет com.mycompany.util, то ни один из классов, находящихся за пределами герметизированного архива, нельзя будет определить с помощью следующего оператора:

Для этого все классы из пакета размещаются в JAR-файле. По умолчанию пакеты в JAR-файле не герметизированы. Изменить глобальные установки по умолчанию можно, введя в главный раздел файла манифеста следующую строку:

Для каждого пакета можно отдельно указать, следует ли его герметизировать, добавив в файл манифеста новый раздел, как показано ниже:

Для того чтобы герметизировать пакет, необходимо выполнить следующую команду:

Читайте также: