Как открыть файл jar на компьютере? Чем открыть jar? Программа для открытия файлов jar на компьютере.

Архив Java - это не просто набор классов

Для большинства Java-разработчиков JAR-файлы и их специализированные собратья WAR- и EAR-файлы - это просто конечный результат длительного процесса работы в Ant или Maven. Стандартная процедура ― скопировать JAR в нужное место на сервере (или, реже, в компьютере пользователя) и забыть о нем.

На самом деле, JAR-файлы годятся не только для того, чтобы хранить исходный код. Просто нужно знать их возможности и способы реализации этих возможностей. Советы, приведенные в этом выпуске Пяти секретов , помогут выжать максимум из файлов архива Java (а в некоторых случаях также и файлов WAR/EAR), особенно в процессе развертывания.

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

Об этом цикле статей

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

Я начну с краткого примера стандартной процедуры работы с файлами Java Archive, которая будет служить основой для последующих советов.

Сохранение в JAR

Как правило, JAR-файл создают после компиляции исходного кода, чтобы собрать Java-код (который отделен от пакета) в одну коллекцию с помощью утилиты командной строки jar или, чаще, задачи jar Ant. Этот процесс достаточно прост, так что я не буду демонстрировать его здесь, хотя позже мы вернемся к теме конструкции JAR-файлов. Пока же нам просто нужно заархивировать Hello , отдельную утилиту консоли, которая решает невероятно полезную задачу вывода сообщения на консоль, как показано в листинге 1.

Листинг 1. Архивирование утилиты консоли
package com.tedneward.jars; public class Hello { public static void main(String args) { System.out.println("Howdy!"); } }

Утилита Hello делает не много, но это полезный пример для изучения JAR-файлов, начиная с выполнения кода.

1. JAR-файлы исполняемы

Исторически языки типа.NET и C++ обладают преимуществом дружественного отношения к ОС: чтобы запустить приложение, достаточно просто набрать его имя в командной строке (helloWorld.exe) или дважды щелкнуть на соответствующий значок в оболочке графического интерфейса пользователя (GUI). В Java-программировании модуль запуска приложения — java — загружает в процесс JVM, и ему нужно передать аргумент командной строки (com.tedneward.Hello), указывающий класс, метод main() которого мы хотим запустить.

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

От этого можно уйти, сделав JAR-файл «исполняемым», так чтобы при его выполнении модуль запуска Java автоматически узнавал, какой класс нужно запустить. Для этого достаточно ввести в манифест JAR-файла (MANIFEST.MF в подкаталоге архива JAR META-INF) следующую запись.

Листинг 2. Указание точки входа
Main-Class: com.tedneward.jars.Hello

Манифест ― это просто набор пар имя/значение. Иногда манифест может придираться к символам пробела и возврата строки, так что простейший способ ― использовать для его создания Ant. В листинге 3 для определения манифеста применяется элемент manifest задачи Ant jar .

Листинг 3. Создание точки входа

Теперь, чтобы выполнить JAR-файл, пользователю достаточно ввести его имя в командную строку посредством команды java -jar outapp.jar . В некоторых GUI-оболочках это можно сделать и двойным щелчком на JAR-файле.

2. JAR-файлы могут включать сведения о зависимостях

С ростом популярности утилиты Hello возникла необходимость варьировать ее реализацию. Многими деталями этого процесса управляют контейнеры инъекции зависимостей (Dependency Injection - DI), такие как Spring или Guice, но есть одно "но": изменение кода для включения контейнера DI может привести к результатам, подобным тому, что приведен в листинге 4.

Листинг 4. Hello, мир Spring!
package com.tedneward.jars; import org.springframework.context.*; import org.springframework.context.support.*; public class Hello { public static void main(String args) { ApplicationContext appContext = new FileSystemXmlApplicationContext("./app.xml"); ISpeak speaker = (ISpeak) appContext.getBean("speaker"); System.out.println(speaker.sayHello()); } }

Параметр -jar модуля запуска отменяет все, что находиться в параметре -classpath командной строки, поэтому при запуске этого кода Spring должен присутствовать в CLASSPATH и в переменной окружения. К счастью, JAR-файлы допускают объявление в манифесте других JAR-зависимостей, которые неявно создают CLASSPATH без необходимости объявлять его, как показано в листинге 5.

Листинг 5. Hello, Spring CLASSPATH!

Обратите внимание, что атрибут Class-Path содержит относительную ссылку на JAR-файлы, от которых зависит приложение. Это можно написать в виде абсолютной ссылки или вообще без префикса, в предположении, что JAR-файлы находятся в том же каталоге, что и JAR приложения.

К сожалению, атрибут value Ant-атрибута Class-Path должен находиться в той же строке, поскольку манифест JAR не может работать с множественными атрибутами Class-Path . Так что все эти зависимости должны находиться в одной строке файла манифеста. Конечно, это некрасиво, но возможность написать java -jar outapp.jar того стоит!

3. На JAR-файлы можно ссылаться неявно

Когда есть несколько различных утилит командной строки (или других приложений), использующих среду Spring, удобно поместить JAR-файлы Spring в общую папку, посредством которой можно ссылаться на все эти утилиты. Это позволит избежать работы с несколькими копиями JAR-файлов, разбросанными по всей файловой системе. По умолчанию таким местом служит обычное местоположение среды выполнения Java для JAR-файлов, т.н. «каталог расширения», который находится в подкаталоге lib/ext каталога установки JRE.

Местоположение JRE можно изменять, но это делают так редко, так что для данной среды Java можно вполне безопасно предположить, что lib/ext - надежное место хранения JAR-файлов и что они будут неявно присутствовать в CLASSPATH среды Java.

4. Java 6 допускает подстановочные знаки в classpath

Во избежание громоздких переменных окружения CLASSPATH (от которых Java-разработчикам следовало бы отказаться много лет назад) и/или параметров командной строки -classpath в Java 6 введено понятие подстановочный знак classpath . Вместо того чтобы запускать каждый JAR-файл, явно указанный в аргументе, подстановочные знаки classpath позволяют написать lib/* , и в classpath попадут все JAR-файлы, перечисленные в этом каталоге (не рекурсивно).

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

5. JAR- файлы содержат не только код

Spring, как и многие другие составляющие экосистемы Java, зависит от файла конфигурации, определяющего организацию среды. А именно, Spring зависит от файла app.xml, который находится в том же каталоге, что и файл JAR — но разработчики часто забывают скопировать вместе с JAR-файлом файл конфигурации.

Некоторые файлы конфигурации редактируются системным администратором, но значительное их число (например, состав библиотеки Hibernate) находятся вне его ведения, что приводит к ошибкам при развертывании. Разумное решение ― упаковать файл конфигурации вместе с кодом — и это выполнимо, потому что JAR ― это в основном замаскированный ZIP. Просто при построении JAR включите файлы конфигурации в Ant-задачу или командную строку jar .

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

Листинг 6. Произвольный ответ
package com.tedneward.jars; import java.util.*; public class SpeakEnglish implements ISpeak { Properties responses = new Properties(); Random random = new Random(); public String sayHello() { // Выбор произвольного ответа int which = random.nextInt(5); return responses.getProperty("response." + which); } }

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

Однако как получить те свойства, которые хранятся в JAR-файле, назад? Если нужные данные расположены внутри одного и того же JAR-файла, как в предыдущем примере, не обязательно пытаться вспомнить местоположение этого JAR-файла и открывать его с помощью объекта JarFile . Вместо этого предоставьте ClassLoader данного класса найти его в качестве «ресурса» в составе JAR-файла, воспользовавшись методом ClassLoader getResourceAsStream() , как показано в листинге 7.

Листинг 7. ClassLoader находит ресурс
package com.tedneward.jars; import java.util.*; public class SpeakEnglish implements ISpeak { Properties responses = new Properties(); // ... public SpeakEnglish() { try { ClassLoader myCL = SpeakEnglish.class.getClassLoader(); responses.load(myCL.getResourceAsStream("com/tedneward/jars/responses.properties")); } catch (Exception x) { x.printStackTrace(); } } // ... }

Эта процедура работает с ресурсами любого рода: файлами конфигурации, аудиофайлами, графическими файлами и т.п. Файл практически любого типа можно поместить в JAR, полученный как InputStream (посредством ClassLoader), и использовать любым способом.

Заключение

Эта статья раскрывает пять секретов JAR-файлов, обычно скрытых от большинства Java-разработчиков — по крайней мере, если основаться на истории и случаях из жизни. Отметим, что все советы, относящиеся к JAR-файлам, в полной мере справедливы и для WAR-файлов. Некоторые из них (в частности, атрибуты Class-Path и Main-Class), в случае WAR-файлов не так полезны, потому что среда сервлетов сама собирает все содержимое каталога и имеет предопределенную точку входа. Тем не менее, взятые в совокупности, эти советы выводят нас за рамки парадигмы «Начнем с копирования всего в этот каталог...» При этом они значительно упрощают и процесс развертывания Java-приложений.

Следующая статья этого цикла: "Пять секретов контроля производительности Java-приложений".

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

Например, на данном рисунке выделен файл my-file.jar , далее необходимо щелкнуть правой кнопкой мыши по этому файлу, и в меню файла выбрать опцию «сканировать с помощью AVG» . При выборе данного параметра откроется AVG Antivirus, который выполнит проверку данного файла на наличие вирусов.


Иногда ошибка может возникнуть в результате неверной установки программного обеспечения , что может быть связано с проблемой, возникшей в процессе установки. Это может помешать вашей операционной системе связать ваш файл JAR с правильным прикладным программным средством , оказывая влияние на так называемые «ассоциации расширений файлов» .

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


Совет: Попробуйте обновить 7-Zip до последней версии, чтобы убедиться, что установлены последние исправления и обновления.


Это может показаться слишком очевидным, но зачастую непосредственно сам файл JAR может являться причиной проблемы . Если вы получили файл через вложение электронной почты или загрузили его с веб-сайта, и процесс загрузки был прерван (например, отключение питания или по другой причине), файл может повредиться . Если возможно, попробуйте получить новую копию файла JAR и попытайтесь открыть его снова.


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


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

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


Совет: Если при попытке открыть файл JAR вы получаете сообщение об ошибке, связанной с.SYS file , проблема, вероятно, может быть связана с поврежденными или устаревшими драйверами устройств , которые необходимо обновить. Данный процесс можно облегчить посредством использования программного обеспечения для обновления драйверов, такого как DriverDoc .


Если шаги не решили проблему , и у вас все еще возникают проблемы с открытием файлов JAR, это может быть связано с отсутствием доступных системных ресурсов . Для некоторых версий файлов JAR могут потребоваться значительный объем ресурсов (например, память/ОЗУ, вычислительная мощность) для надлежащего открытия на вашем компьютере. Такая проблема встречается достаточно часто, если вы используете достаточно старое компьютерное аппаратное обеспечение и одновременно гораздо более новую операционную систему.

Такая проблема может возникнуть, когда компьютеру трудно справиться с заданием, так как операционная система (и другие службы, работающие в фоновом режиме) могут потреблять слишком много ресурсов для открытия файла JAR . Попробуйте закрыть все приложения на вашем ПК, прежде чем открывать Java Archive File. Освободив все доступные ресурсы на вашем компьютере вы обеспечите налучшие условия для попытки открыть файл JAR.


Если вы выполнили все описанные выше шаги , а ваш файл JAR по-прежнему не открывается, может потребоваться выполнить обновление оборудования . В большинстве случаев, даже при использовании старых версий оборудования, вычислительная мощность может по-прежнему быть более чем достаточной для большинства пользовательских приложений (если вы не выполняете много ресурсоемкой работы процессора, такой как 3D-рендеринг, финансовое/научное моделирование или интенсивная мультимедийная работа). Таким образом, вполне вероятно, что вашему компьютеру не хватает необходимого объема памяти (чаще называемой «ОЗУ», или оперативной памятью) для выполнения задачи открытия файла.

Java-приложения и игры для мобильных телефонов пока ещё находят своих пользователей, хотя постепенно вытесняются продуктами, разработанными под популярные ОС Android или iOS. Java-мидлеты имеют расширение JAR или JAD и рассчитаны в первую очередь на запуск с телефона. Однако нередко пользователям необходимо запустить jar-файл сначала на компьютере. И для этого существует несколько утилит, выполняющих функцию J2ME эмуляции (Java 2 Mobile Edition, специальная модификация языка Java (Ява), адаптированная под мобильники) и запуск java-мидлетов.

Сразу отметим, что некоторые эмуляторы требуют наличия установленной в системе виртуальной Java-машины. Чтобы установить её, скачиваем версию Java SE JRE под Windows .

В простейшем случае достаточно кликнуть по JAR-файлу, чтобы увидеть результат выполнения Java-скрипта. Например, так мы увидим небольшое приложение Сапёр (Авт. Кенжебеков Марат), выполненное в виде :

У каждого серьёзного производителя мобильных телефонов существуют собственные комплекты ПО для разработчиков (SDK), в которые, как правило, входят и эмуляторы. Но сегодня мы рассмотрим универсальные эмуляторы, позволяющие запустить любые jar-файлы на компьютере.

Эмулятор Java-приложений MidpX

Эмулятор MidpX позволяет быстро запустить JAD- или JAR-файл на компьютере буквально одним кликом. Это может быть как java-игра, так и любое приложение для мобильного телефона. Пользующиеся браузером Internet Explorer могут воспользоваться контекстным меню и выбрать пункт Link MidpX .

Остальным же пользователям, предпочитающим другие браузеры, лучше сначала скачать jar-файл, а затем уже в контекстом меню Проводника выбрать пункт Открыть с помощью – Midp2Exe Compiler .

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

Сгенерированный EXE-файл, кстати, сохраняется программой в той же папке, где находится исходный JAR-файл. Отметим также возможность установки отдельной утилиты для конвертирования jar-файлов в exe под названием MIDP2EXE, однако работать с ней не очень удобно, так как все операции выполняются через командную строку. Имеется и графическая оболочка GUIMidp2Exe.exe. Она позволяет преобразовывать jar-файлы и целые каталоги, показывает полную информацию о выбранном jar-файле и иконку, умеет генерировать JAD-файл, запускает для проверки сгенерированный exe-файл, извлекает все ресурсы файла, включая картинки, текст и звуки во временную папку Test в папке с эмулятором (после закрытия все файлы удаляются), сохраняет скриншоты мобильных игр в JPG.

Характеристики:
Язык интерфейса: русский, английский и др.
Размер файла: 1,9 Мб
Лицензия: бесплатная
Ссылка на оф. сайт: kwyshell.myweb.hinet.net/Download/MidpX/MidpX.exe

Эмулятор Java-игр SJBoy

Мы позиционируем SJBoy именно как эмулятор игр. Обусловлено это высокой скоростью эмуляции и не менее хорошим качеством, позволяющим без проблем запускать java-игры. SJBoy предоставляет на наш выбор одну из четырёх моделей телефона: две Nokia, SonyEricsson и Motorola. В зависимости от выбранной модели меняется скин передней панельки мобильника. После установки не потребуется никаких лишних махинаций с jar-файлами. Достаточно выбрать файл в списке и двойным кликом запустить его. SJBoy подхватит файл и тут же начнёт эмуляцию java-приложения. В большинстве случаев наиболее удобным будет использование SJBoy-эмулятора.

Управление в меню выполняется как кликом по нарисованным клавишам телефона, так и управляющими и цифровыми клавишами компьютерной клавиатуры. Среди полезных функций можно отметить возможность создания скриншота (меню Tools – Snapshot ). Картинка при этом сохраняется в файл формата BMP.

Характеристики:
Язык интерфейса: английский
Размер файла: 1 Мб
Лицензия: бесплатная
Ссылка на оф. сайт: files.ddvhouse.ru/soft/96_sjboyemulator.rar

Как извлечь данные из jar-файла

В некоторых случаях пользователям необходимо не запускать jar-файл, а именно открыть его, чтобы увидеть содержимое. Многие знают, что jar-файл, хоть и имеет такое расширение, представляет собой фактически zip-архив. Соответственно, просмотреть содержимое jar-файла можно в любом архиваторе, поддерживающем формат ZIP. Просто открываем jar-файл, выбираем необходимые файлы и извлекаем их из архива. При наличии файлового менеджера Total Commander можно переименовать расширение jar-файла в zip, после чего войти как в архив и увидеть его содержимое, а позже и извлечь данные.

С помощью jar файлов осуществляется архивирование и распаковка. Одной из важных их особенностей является способность к сжатию, исключающая потери. Формат.jar обеспечивает эффективную сортировку и отправку документов. Прежде чем узнать, как открыть файл jar на компьютере, необходимо выполнить его установку и активацию, чтобы он стал исполняемым.

Своим именем jar формат обязан Java ARchive, от которого он происходит. Основным назначением его является разработка и распространение дополнений, предназначенных для программ, созданных компанией Mozilla.

Как открыть файл jar на компьютере?

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

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

В случае открытия файла jar в неверной программе требуется изменение настроек. Для этого необходимо, чтобы документ содержал файл MANIFEST.MF в каталоге META-INF с указанием главного класса программы, включающий метод main.

Для просмотра содержимого jar архива можно использовать любой архиватор со сжатием ZIP. Запуск такого файла можно осуществить, используя эмулятор Java-приложений MidpX. Еще один способ – метод его конвертирования в формат.EXE программой JAR2EXE Converter.

Возможности приложений

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

  • Firefox
  • Thunderbird
  • SeaMonkey
  • Sunbird

Широкое применение находят на практике дополнения, предназначенные для работы с браузером Firefox. Они обеспечивают значительное расширение функциональных возможностей браузера и его настройку с учетом личных потребностей, которые определяет для себя каждый пользователь.

Например, с помощью дополнений можно:

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

Приложение-календарь Mozilla Sunbird может расширять свои возможности при использовании дополнений. Это приложение предназначено для составления расписания дня и создания задач, назначением которых является оповещение в специально установленное время.

Thunderbird – это отличный помощник, обеспечивающий просмотр почтовых уведомлений, создание новых писем, фильтрование спама, обратное отправление почты и др. Дополнения способствуют лучшей совместимости Thunderbird с инструментами от Microsoft, обеспечивают более удобную работу с контактами, подписями для писем и др.

Зная полезную информацию, можно приступать к работе с jar файлом на компьютере.

JAR расшифровывается как Java ARchive — архив Java. Если не особо вдаваться в подробности (что в общем-то часто и происходит в реальности), то JAR-файл представляет собой обычный ZIP-файл с некоторыми дополнениями. Основная задача этого архива — хранить файлы с классами. Т.е. пакеты/каталоги (мы о них говорили в разделе Пакеты), внутри которых находятся class-файлы архивируются и JVM может их использовать уже в более удобном (компактном) виде.
Выгода очевидна — в реальных проектах вы вряд ли будете ограничиваться использованием библиотек классов только из JDK — скорее всего вы будете подключать сотни (если не тысячи) классов, которые были созданы для решения определенных задач. Если все это огромное количество лежало бы на диске в виде class-файлов, то несложно понять, насколько это неудобно и громоздко. Разработчики Java предложили вполне элегантное решение — вы можете подключать архивные файлы, в которых запакованы тысячи скомпилированных классов. Что конечно же удобнее, чем таскать за собой в каждый проект все директории со всеми файлами.
Для примера можете заглянуть в каталог JAVA_HOME/jre/lib — там находится очень важный архив — rt.jar . Эта библиотека содержит практически все классы, который мы рассматривали — String, JFrame, JButton, Date, Object. Открыть его вы можете с помощью любого архиватора.
Просматривая содержимое JAR-файла, вы рано или поздно обратите внимание на каталог META-INF . В нем содержится файл MANIFEST.MF . Я настоятельно рекомендую вам почитать информацию о нем в документе Working with Manifest Files: The Basics . Файл позволяет расширить функциональность — кроме обычного набора классов, JAR-файл может выполнять функции электронной подписи, поддержки версионности, подключения библиотек к самому архиву, определение класса для запуска (который содержит метод main ). В данной статье я не ставлю себе цель разборать эти возможности, так что отложим на будущее. Займемся базовыми вопросами использования JAR-файлов.

Создание JAR

Использование IDE

Практически все IDE умеют создавать JAR. Мы сделаем это на примере NetBeans, другие IDE вы можете рассмотреть самостоятельно. Что является не всегда интуитивно понятной задачей. В среде NetBeans создать JAR очень несложно. Для этого надо сделать следующие шаги:

В каталоге с проектом можно увидеть каталог dist в котором и будет находиться JAR-файл. Как я уже упоминал, в других типах IDE этот процесс может выглядеть иначе. Например, в Eclipse это делается через экспорт, а в IDEA — через создание артефактов. В данной цикле статей я не планирую пока останавливаться на этом подробно, хотя если получится — значит прямо здесь и добавлю.

Использование утилиты jar

Также JAR-файл может быть создан с использованием утилиты jar, которая находится в каталоге JAVA_HOME/bin. Достаточно подробно эта утилита разобрана здесь: Creating a JAR File .
В самом просто варианте вам надо создать классы в какой-либо директории, а потом вызвать эту утилиту с такой командой

jar cf <имя JAR-файла> <список входных файлов>

Например, если у меня есть класс edu/javacourse/jar/SayHello.class , то команда создания архивного файла с именем say.jar выглядела бы так:

jar cf say.jar edu/javacourse/jar/SayHello.class

jar cf say . jar edu / javacourse / jar / SayHello . class

Опции «cf» означают: «c» — создать, «f» — файл. Ну а дальше я думаю очевидно — имя файла архива и список файлов. Причем в списке можно указывать много файлов через пробел, а также можно использовать маску — знаки «*» и «?». Если вы не знакомы с такими знаками — наберите в поисковике «маски файлов использование» и наслаждайтесь новыми знаниями.
Чтобы посмотреть содержимое файла вы можете (как я уже говорил выше) использовать практически любой архиватор или тут же команду jar.exe вот в таком виде

jar tf say . jar

В обоих случаях (IDE или утилита jar ) в архиве будет создаваться файл MANIFEST.MF . Как я уже писал — есть смысл почитать о дополнительных свойствах JAR-файлов. Т.к. в документации все очень неплохо написано, не буду заниматься переводом. Так что перейдем к следующему пункту нашего путешествия по JAR-файлам.

Подключение готовых JAR-файлов

Командная строка

Итак, я сказал, что основная функция JAR — содержать набор классов в виде class-файлов. Теперь нам надо понять, как подключать JAR-файлы к запускаемому классу, чтобы запускаемый класс мог использовать классы из JAR-файла.
Как вы уже хорошо знаете, запуск программы на Java включает запуск JVM (для Windows это файл java.exe, для Unix — java) и передача ей из командной строки имени класса, который вы собираетесь запускать. Например, для запуска класса First в пакете edu.javacourse.test надо в каталоге, внутри которого находится каталог edu/javacourse/test набрать такую команду:

java edu.javacourse.test.First

java edu . javacourse . test . First

Как видите, в качестве аргумента мы передали полное имя класса, который собираемся запускать. JVM кроме имени класса принимает достаточно много параметров, которые позволяют конфигурировать те или иные свойства JVM. В этой статье мы разберем очень важный элемент — CLASSPATH — который как раз и используется для подключения JAR-файлов.
Сейчас мы проделаем полный цикл создания JAR-файла и его подключения без использования IDE — я очень трепетно отношусь к умению программиста пользоваться командной строкой. Во-первых, это показывает, что вы действительно понимаете суть, во-вторых — этот навык ну просто очень полезен. Например, в том же Unix/Linux очень большое количество работы гораздо удобнее делать в командной строке, да и некоторые продукты содержат утилиты, запускаемые из командной строки. Так что займемся.
Создадим каталог JavaLesson (в принципе мы его уже создавали в разделе Основные шаги . В этом каталоге создадим стуктуру каталогов JarLib/edu/javacourse/jar . С помощью текстового редактора создадим файл SayHello.java

package edu.javacourse.jar; public class SayHello { public void sayHello() { System.out.println("HELLO"); } }

Теперь время за командной строкой. Запускаем команду «cmd» (если не помните — смотрим раздел Основные шаги). Переходим в каталог JavaLesson/JarLib и в нем сначала компилируем наш файл SayHello.java вот такой командой

javac edu/javacourse/jar/SayHello.java

Если у вас все получилось, то в каталоге JavaLesson/JarLib должен появится файл say.jar .
Теперь напишем небольшой класс, который будет использовать наш класс SayHello . ВАЖНО!!! Для «чистоты эксперимента» создадим этот класс в каталоге JavaLesson . Предлагаю создать класс без использования пакетов (хотя это не должно быть правилом — в реальных проектах создавать классы без пакетов не надо). Вот наш файл UseHello.java , который будет находится в каталоге JavaLesson

import edu.javacourse.jar.SayHello; public class UseHello { public static void main(String args) { SayHello sh = new SayHello(); sh.sayHello(); } }

public class UseHello

public static void main (String args ) {

sh . sayHello () ;

Обратите внимание на первую строчку — в ней мы импортируем класс SayHello . В методе main мы создаем объект и вызываем его метод. Структура наших каталогов должна выглядеть вот так:

C\: JavaLesson JarLib edu javacourse jar SayHello.java UseHello.java

И мы получаем ошибку:

C:\JavaLesson>javac UseHello.java UseHello.java:1: error: package edu.javacourse.jar does not exist import edu.javacourse.jar.SayHello; ^ UseHello.java:6: error: cannot find symbol SayHello sh = new SayHello(); ^ symbol: class SayHello location: class UseHello UseHello.java:6: error: cannot find symbol SayHello sh = new SayHello(); ^ symbol: class SayHello location: class UseHello 3 errors

C : \ JavaLesson > javac UseHello . java

UseHello . java : 1 : error : package edu . javacourse . jar does not exist

import edu . javacourse . jar . SayHello ;

SayHello sh = new SayHello () ;

symbol : class SayHello

location : class UseHello

UseHello . java : 6 : error : cannot find symbol

SayHello sh = new SayHello () ;

symbol : class SayHello

location : class UseHello

3 errors

Сообщение в данном случае достаточно информативное — «UseHello.java:1: error: package edu.javacourse.jar does not exist» и «UseHello.java:6: error: cannot find symbol». Мы же не подключали наш класс SayHello — вот компилятор и не знает, откуда его брать и вообще откуда такой пакет/класс — edu.javacourse.jar.SayHello . Ну что же — перефразируя классику — «Ваше слово, товарищ CLASSPATH».
Очевидно, что нам надо компилятору подсказать, что он должен использовать не только те JAR-файлы, которые у него уже есть — тот же rt.jar — но и наш JAR-файл. Делается это с помощью специальной опции при запуске компилятора.

javac -cp JarLib/say.jar UseHello.java

javac - cp JarLib / say . jar UseHello . java

В этой команде мы добавили строку -cp JarLib/say.jar . Часть -cp говорит, что за ней должен идти список JAR-файлов, которые содержат нужные классы. Список может включать несколько файлов, разделенных для Windows знаком «;», для Unix/Linux — «:». Например, если мне надо указать два файла — say1.jar и say2.jar — находящихся в каталоге C:/Anton/Libraries , то команда (для Windows) выглядела бы так:

javac -cp C:/Anton/Libraries/say1.jar;C:/Anton/Libraries/say2.jar UseHello.java

javac - cp C : / Anton / Libraries / say1 . jar ; C : / Anton / Libraries / say2 . jar UseHello . java

Кстати, «-cp» — сокращенно от classpath — раньше надо было писать именно так, да и сейчас тоже можно.

javac -classpath C:/Anton/Libraries/say1.jar;C:/Anton/Libraries/say2.jar UseHello.java

javac - classpath C : / Anton / Libraries / say1 . jar ; C : / Anton / Libraries / say2 . jar UseHello . java

Также важно отметить, что в CLASSPATH можно включать не только JAR-файлы — туда можно включать путь до каталога с файлами.class (опять же — их может быть указано несколько штук). Если бы мы не создавали JAR-файл say.jar , а использовали скомпилированный файл SayHello.class из каталога JarLib , то команда выглядела бы вот так.



error: Content is protected !!