Creating a JAR File
The basic format of the command for creating a JAR file is:
The options and arguments used in this command are:
- The c option indicates that you want to create a JAR file.
- The f option indicates that you want the output to go to a file rather than to stdout.
- jar-file is the name that you want the resulting JAR file to have. You can use any filename for a JAR file. By convention, JAR filenames are given a .jar extension, though this is not required.
- The input-file(s) argument is a space-separated list of one or more files that you want to include in your JAR file. The input-file(s) argument can contain the wildcard * symbol. If any of the "input-files" are directories, the contents of those directories are added to the JAR archive recursively.
The c and f options can appear in either order, but there must not be any space between them.
This command will generate a compressed JAR file and place it in the current directory. The command will also generate a default manifest file for the JAR archive.
The metadata in the JAR file, such as the entry names, comments, and contents of the manifest, must be encoded in UTF8.
You can add any of these additional options to the cf options of the basic command:
When you create a JAR file, the time of creation is stored in the JAR file. Therefore, even if the contents of the JAR file do not change, when you create a JAR file multiple times, the resulting files are not exactly identical. You should be aware of this when you are using JAR files in a build environment. It is recommended that you use versioning information in the manifest file, rather than creation time, to control versions of a JAR file. See the Setting Package Version Information section.
An Example
Let us look at an example. A simple TicTacToe applet. You can see the source code of this applet by downloading the JDK Demos and Samples bundle from Java SE Downloads. This demo contains class files, audio files, and images having this structure:
TicTacToe folder Hierarchy
The audio and images subdirectories contain sound files and GIF images used by the applet.
You can obtain all these files from jar/examples directory when you download the entire Tutorial online. To package this demo into a single JAR file named TicTacToe.jar, you would run this command from inside the TicTacToe directory:
The audio and images arguments represent directories, so the Jar tool will recursively place them and their contents in the JAR file. The generated JAR file TicTacToe.jar will be placed in the current directory. Because the command used the v option for verbose output, you would see something similar to this output when you run the command:
You can see from this output that the JAR file TicTacToe.jar is compressed. The Jar tool compresses files by default. You can turn off the compression feature by using the 0 (zero) option, so that the command would look like:
You might want to avoid compression, for example, to increase the speed with which a JAR file could be loaded by a browser. Uncompressed JAR files can generally be loaded more quickly than compressed files because the need to decompress the files during loading is eliminated. However, there is a tradeoff in that download time over a network may be longer for larger, uncompressed files.
The Jar tool will accept arguments that use the wildcard * symbol. As long as there weren't any unwanted files in the TicTacToe directory, you could have used this alternative command to construct the JAR file:
Though the verbose output doesn't indicate it, the Jar tool automatically adds a manifest file to the JAR archive with path name META-INF/MANIFEST.MF. See the Working with Manifest Files: The Basics section for information about manifest files.
In the above example, the files in the archive retained their relative path names and directory structure. The Jar tool provides the -C option that you can use to create a JAR file in which the relative paths of the archived files are not preserved. It's modeled after TAR's -C option.
As an example, suppose you wanted to put audio files and gif images used by the TicTacToe demo into a JAR file, and that you wanted all the files to be on the top level, with no directory hierarchy. You could accomplish that by issuing this command from the parent directory of the images and audio directories:
The -C images part of this command directs the Jar tool to go to the images directory, and the . following -C images directs the Jar tool to archive all the contents of that directory. The -C audio . part of the command then does the same with the audio directory. The resulting JAR file would have this table of contents:
By contrast, suppose that you used a command that did not employ the -C option:
Пакетирование и распространение настольных приложений Java
Многие начинающие программисты сталкиваются с таким вопросом: «Я создал свое приложение в среде IDE, как теперь заставить его работать из командной строки вне среды IDE?». Может возникнуть и такой вопрос: «Как мне распространить это приложение среди других пользователей, не передавая им заодно всю среду IDE?».
Ответы на эти вопросы относительно просты, но не всегда очевидны. В данном документе даны ответы на них путем демонстрации основ использования среды IDE для подготовки приложений к распространению и развертыванию. Кроме того, в данном документе предоставлены сведения, которые могут быть необходимы для настройки системы программиста (или которые нужно будет передать пользователям приложения). Мы покажем несколько различных подходов к развертыванию приложения, позволяющих пользователям получать доступ к нему посредством:
Двойного щелчка файла архива Java (JAR) приложения.
Вызова приложения из командной строки.
Вызова приложения из файла сценария.
Использования Java Web Start.

Для работы с этим учебным курсом требуются программное обеспечение и материалы, перечисленные в таблице ниже.
Создание исполняемого файла JAR
В данной части учебного курса показано, как можно создать предназначенное для распространения приложение в среде IDE и затем запустить это приложение вне среды IDE. Мы пакетируем это приложение в исполняемый файл JAR.
Файл JAR – это файл архива, в который могут быть вложены файлы и папки. Файлы JAR подобны файлам ZIP, но файлы JAR могут иметь дополнительные атрибуты, полезные при распространении приложений Java. В число этих атрибутов входят цифровая подпись файлов JAR, дополнительное сжатие, совместимость с различными платформами и т. д.
В этом упражнении мы создаем проект среды IDE и затем помещаем в этот проект два заранее написанных файла исходного кода Java. Затем мы скомпилируем классы и создадим исполняемый файл JAR. После этого мы посмотрим, как запускать файлы JAR вне среды IDE.
Классы, используемые в данном руководстве, реализуют функции служебной программы GNU grep, которую можно использовать для поиска текста или шаблонов регулярных выражений в текстовых файлах. Данный проект содержит как версию приложения для командной строки, так и версию, использующую графический интерфейс, что позволит взглянуть на различные способы запуска приложения.
Создание проекта с помощью существующих файлов исходного кода
Загрузите файл DeploymentTutorial.zip и извлеките его содержимое. Данный архив ZIP содержит файлы исходного кода для приложения, а также несколько других файлов, которые будут использованы в этом руководстве.
В IDE NetBeans выберите ‘Файл’ > ‘Создать проект’.
На странице Choose Category («Выбор категории») выберите Java Project With Existing Sources («Проект Java с существующим исходным кодом») в категории Java и нажмите кнопку Next («Далее»).
На странице Name and Location («Имя и местоположение») мастера введите AnotherGrep в поле имени проекта и укажите местоположение проекта. Нажмите кнопку «Далее».
Местоположение папки проекта не обязательно должно совпадать с местоположением исходных файлов, импортируемых в проект.
На странице мастера Existing Sources («Существующие исходные файлы») укажите файлы исходного кода, которые будут включены в проект. Нажмите кнопку Add Folder («Добавить папку») справа от поля Source Package Folders («Папки пакетов исходного кода»). Перейдите к папке DeploymentTutorial , которую только что разархивировали, разверните папку, выберите папку src и нажмите кнопку Open («Открыть»). Папка src будет добавлена к полю Source Package Folders («Папки пакетов исходного кода»).
Нажмите кнопку «Завершить».
Примечание. Если, например, необходимо исключить определенные исходные файлы из операции импорта в проект, щелкните ‘Далее’, чтобы открыть последнее окно ‘Включает & Исключает’. В этом случае необходимо использовать все исходные файлы в папке src поэтому нажимается кнопка ‘Готово’, чтобы завершить работу в мастере создания проектов.
Проект откроется в среде IDE и отобразится в окне «Проекты». Изучить содержание проекта можно, развернув его узел пакетов исходного кода, в котором можно будет увидеть классы Grep и xGrep . Grep.java – файл консольной версии приложения. xGrep.java – файл версии приложения с графическим интерфейсом, использующей методы, определенные в Grep.java .
Настройка проекта
Для настройки проекта необходимо выполнить несколько действий:
Выберите платформу Java, которая будет использована для компиляции файлов исходного кода.
Назначьте главный класс проекта. Это позволит гарантировать, что файл JAR, создаваемый при построении проекта, будет исполняемым.
Проверка платформы Java
Наш проект должен быть скомпилирован и выполнен на платформе Java 7 или Java 8. Поэтому нам необходимо убедиться, что платформа Java 7 или Java 8 соответственно используется в качестве платформы для данного проекта.
Правой кнопкой мыши щелкните узел проекта и выберите элемент «Свойства».
На вкладке «Библиотеки» в качестве платформы Java должна быть указана версия JDK 1.7 (или JDK 1.8).
На вкладке Sources («Источники») выберите JDK 7 (или JDK 8) как формат двоичных файлов/файлов исходного кода.
Нажмите кнопку «OК», чтобы закрыть окно Project («Свойства»).
Назначение главного класса
Чтобы пользователь мог без труда запустить создаваемый файл JAR (дважды щелкнув его или введя java -jar AnotherGrep.jar в командной строке), необходимо указать главный класс внутри файла манифеста manifest в архиве JAR. (Файл манифеста является стандартной частью архива JAR, содержащей информацию о файле JAR, которая будет полезна для средства запуска java при запуске приложения.) Главный класс служит точкой входа, из которой средство запуска java запускает приложение.
При сборке проекта среда IDE создает файл JAR и включает в него манифест. При назначении главного класса проекта мы убеждаемся, что главный класс указан в манифесте.
Для назначения главного класса проекта выполните следующие действия:
Правой кнопкой мыши щелкните узел проекта и выберите элемент «Свойства».
Выберите категорию Выполнение и введите anothergrep.xGrep в поле ‘Основной класс’.
Нажмите кнопку «ОК» для закрытия диалогового окна «Свойства проекта».
При сборке проекта ниже в этом руководстве будет создан манифест, включающий в себя следующую запись:
Построение проекта и создание файла JAR
Теперь, когда файлы исходного кода готовы и параметры проекта настроены, пора выполнить сборку проекта.
Выберите «Выполнение» > «Собрать проект» (AnotherGrep). В качестве альтернативы щелкните правой кнопкой мыши узел проекта в окне ‘Проекты’ и выберите ‘Сборка’.
При сборке проекта происходит следующее.
К папке проекта (далее именуемой «папка PROJECT_HOME«) добавляются папки build и dist .
Все исходные файлы компилируются в файлы .class , которые помещаются в папку PROJECT_HOME/build .
В папке PROJECT_HOME/dist создается архив JAR, содержащий проект.
Если для проекта указаны какие-либо библиотеки (кроме JDK), в папке dist создается папка lib . Библиотеки копируются в папку dist/lib .
Файл манифеста manifest в архиве JAR обновляется за счет включения записей, указывающих главный класс и все библиотеки, которые находятся в пути классов проекта.
Примечание. Содержимое Manifest можно просмотреть в окне ‘Файлы’ IDE. После построения проекта переключитесь на окно Files («Файлы») и перейдите к dist/AnotherGrep.jar . Разверните узел файла JAR, разверните папку META-INF и дважды щелкните MANIFEST.MF , чтобы отобразить Manifest в редакторе исходного кода.
(Дополнительные сведения о файлах манифеста приведены в этом разделе в учебном курсе по Java).
Запуск и распространение файла JAR
Запуск приложения в среде IDE
При разработке приложений в среде IDE их обычно следует протестировать и обновить перед распространением. Для тестирования приложения, над которым вы работаете, нужно просто запустить его из среды IDE.
Для запуска проекта AnotherGrep в IDE, щелкните правой кнопкой мыши узел проекта в окне ‘Проекты’ и выберите ‘Выполнить’.
Должно открыться окно xGrep. Можно нажать кнопку Browse («Обзор») для выбора файла, в котором следует выполнить поиск текстового шаблона. В поле Search Pattern («Шаблон поиска») введите шаблон в виде текста или регулярного выражения, совпадения с которым следует искать, и нажмите кнопку Search («Поиск»). Все совпадения появятся в области Output («Выходные данные») окна xGrep.
Сведения о регулярных выражениях, которые можно использовать в приложении, доступны здесь и во многих других местах.
Запуск приложения вне среды IDE
По завершении работы над приложением и перед его распространением желательно убедиться, что оно также будет работать вне среды IDE.
Запустить приложение вне среды IDE можно выполнив следующие действия:
В диспетчере файлов системы (например, в окне «Мой компьютер» на системах Windows XР) перейдите к PROJECT_HOME/dist и дважды щелкните файл AnotherGrep.jar .
Если окно xGrep открылось, приложение запущено успешно.
Если окно xGrep не открывается, то, скорее всего, отсутствует сопоставление между файлами JAR и средой выполнения Java. См. Устранение проблем с сопоставлениями файлов JAR ниже.
Распространение приложения другим пользователям
Теперь, когда подтверждено, что приложение работает вне среды IDE, можно перейти к его распространению.
Отправьте файл JAR приложения всем, кто будет использовать приложение. Пользователи приложения смогут запускать его, дважды щелкнув файл JAR. Если у них это не получится, покажите им информацию в разделе Устранение проблем с сопоставлениями файлов JAR, приведенную.
Примечание. Если работа приложения зависит от дополнительных библиотек, помимо включенных в JDK, необходимо включить их в распространение (не относится к этому примеру). Относительные пути к этим библиотекам добавляются в запись classpath файла манифеста JAR при разработке приложения в среде IDE. Если эти дополнительные библиотеки не будут найдены по указанному пути класса (т.е. относительному пути) при запуске, приложение не запустится. Создайте архив ZIP, содержащий файл JAR и библиотеку, после чего отправьте этот файл ZIP пользователям. Проинструктируйте пользователей распаковать этот архив ZIP так, чтобы файл JAR и файлы JAR библиотек были в одной папке. Запустите файл JAR приложения.
Запуск приложения Java
Цель этого упражнения состоит в демонстрации некоторых из способов запуска приложения из командной строки.
В данном упражнении показано, как можно запустить приложение Java следующими двумя способами:
Выполнение команды java из командной строки.
Использование сценария для вызова класса в файле JAR.
Запуск приложений из командной строки
Приложение можно запустить из командной строки, используя команду java . Если нужно выполнить исполняемый файл JAR, используйте параметр -jar команды.
Например, для запуска приложения AnotherGrep надо выполнить следующие действия:
Открыть окно терминала. На системах Microsoft Windows это делается путем нажатия кнопки «Пуск» и выбора «Выполнить…», ввода cmd в поле «Открыть:» и нажатия кнопки «OК».
Перейдите в каталог PROJECT_HOME/dist (используя команду cd ).
Введите следующую строку для запуска главного класса приложения:
Если эти инструкции выполнены, а приложение не запускается, вероятно, следует выполнить одно из следующих действий:
Включить полный путь к двоичному файлу java в третий этап данной процедуры. Например, необходимо будет ввести путь наподобие следующего, в зависимости от расположения файла JDK или JRE:
Добавить двоичные файлы Java к переменной среды PATH, чтобы отпала необходимость указывать путь к двоичному файлу java из командной строки. См. Установка переменной среды PATH
Запуск приложений из сценария
Если приложение, которое необходимо распространить, является консольным приложением, может оказаться, что его удобнее запускать из сценария, особенно если для запуска приложения требуются длинные и сложные аргументы. В этом разделе мы используем консольную версию Grep, в которой необходимо передать аргументы (шаблон поиска и список файлов) файлу JAR, вызываемому в нашем сценарии. Для сокращения объема, вводимого в командную строку, мы используем простой сценарий, подходящий для запуска тестового приложения.
В первую очередь необходимо изменить главный класс в приложении на консольную версию класса и построить файл JAR заново:
В окне ‘Проекты’ в IDE щелкните правой кнопкой мыши узел проекта ( AnotherGrep ) и выберите ‘Свойства’.
Выберите узел Run («Запуск») и измените свойство Main Class («Главный класс») на anothergrep.Grep (с anothergrep.xGrep ). Нажмите кнопку «ОК», чтобы закрыть окно Project Properties («Свойства проекта»).
Снова щелкните правой кнопкой мыши узел проекта и выберите Clean and Build Project («Очистка и сборка проекта»).
По завершении этих действий файл JAR будет собран заново, а атрибут Main-Class в манифесте файла JAR будет указывать на anothergrep.Grep .
Сценарий bash – для компьютеров под управлением UNIX и Linux
В папке, куда было извлечено содержимое файла DeploymentTutorial.zip, можно найти сценарий bash с именем grep.sh . Давайте посмотрим на него:
Первая строка указывает, какой интерпретатор команд следует использовать для интерпретации этого сценария. Вторая исполняет файл JAR, созданный средой IDE в папке PROJECT_HOME/dist . $@ просто копирует все переданные сценарию аргументы, заключая каждый в кавычки.
Данный сценарий подразумевает, что двоичные файлы Java являются частью переменной среды PATH. Если данный сценарий не работает на вашем компьютере, см. Установка переменной среды PATH.
Дополнительные сведения о написании сценариев для интерпретатора bash можно найти здесь.
Сценарий .bat для компьютеров Windows
На компьютерах Microsoft Windows пакетным файлам можно одновременно передавать не более девяти аргументов. При наличии более девяти аргументов файл JAR будет необходимо исполнить несколько раз.
Сценарий для этого может выглядеть следующим образом:
Данный сценарий можно найти под названием grep.bat в папке, куда было извлечено содержимое архива DeploymentTutorial.zip, если необходимо увидеть его в действии.
Девять аргументов представлены внутри пакетного файла как %<ARG_NUMBER> , где <ARG_NUMBER> должен иметь значение в пределах <0-9> . %0 зарезервировано для имени сценария.
Можно увидеть, что за раз (в одном цикле) программе передаются только девять аргументов. Оператор for просто смещает аргументы на девять, чтобы подготовить их к следующему циклу. Цикл завершается по обнаружении пустого аргумента файла оператором if (это указывает на отсутствие новых файлов для обработки).
Дополнительные сведения о пакетных сценариях можно найти на этой странице.
Пакетирование приложения для Java Web Start
Java Web Start представляет собой технологию, используемую для запуска приложений Java из веб-браузера одним щелчком мыши. Подробные сведения об упаковке приложений для развертывания с помощью Java Web Start см. в разделе Включение Java Web Start в IDE NetBeans. Здесь мы приводим только краткое описание действий, необходимых, чтобы сделать приложение развертываемым с помощью Java Web Start.
Щелкните правой кнопкой мыши узел проекта в окне Projects («Проекты») и выберите Properties («Свойства»).
На вкладке Web Start окна Project Properties («Свойства проекта») установите флажок Enable Web Start («Активировать Web Start»).
Выберите Local Execution («Локальное исполнение») из раскрывающегося списка Codebase («Кодовая база»), поскольку мы будем тестировать только локальное исполнение.
Нажмите кнопку ‘Настроить’, чтобы подписать приложение, указав сведения в диалоговом окне ‘Подписание’.
Примечание. Начиная с обновления Java SE 7 Update 21, выпущенного в апреле 2013 г., рекомендуется использование подписанных доверенных сертификатов для всех Java-аплетов и приложений Web Start Для получения дополнительной информации см. Апплеты Java и Web Start — подпись кода.
Сохраните все прочие параметры по умолчанию и нажмите кнопку «OК».
Щелкните правой кнопкой мыши узел проекта и выберите Clean and Build Project («Очистка и сборка проекта»). Данная команда среды IDE удалит все ранее скомпилированные файлы и результаты сборок, скомпилирует приложение заново и соберет проект с новыми параметрами.
Вне среды IDE откройте папку PROJECT_HOME/dist , после чего откройте файл launch.html в своем браузере. Появится тестовая страница HTML с кнопкой Launch («Запуск»).
Нажмите кнопку Launch, чтобы открыть приложение. Можно будет увидеть, что Java загружена и приложение запускается.
Примечание. Некоторые браузеры сначала перенаправляют пользователей на страницу загрузок Java.
Советы по устранению проблем
Указание сопоставлений файлов JAR
На большинстве компьютеров исполняемый файл JAR можно исполнить, просто дважды щелкнув его. Если при двойном щелчке файла JAR ничего не происходит, это может быть вызвано одной из двух следующих причин:
Тип файлов JAR не сопоставлен со средой выполнения Java (JRE) на этом компьютере.
Если тип файлов JAR сопоставлен с JRE, значок, представляющий этот файл, должен включать логотип Java.
Тип файлов JAR сопоставлен JRE, но параметр -jar не входит в команду, передаваемую JRE при двойном щелчке значка.
Примечание. Иногда связи файлов JAR переключаются установленным ПО, например, программным обеспечением для обработки файлов в формате zip.
Способ, которым тип файлов JAR можно привязать к средству запуска java , зависит от операционной системы.
Примечание. Убедитесь, что на вашем компьютере установлена одна из версий JRE. Следует использовать версию 1.4.2 или более поздние. Приложения Java нельзя запускать на компьютерах, где не установлена платформа Java. (В случае установки комплекта для разработчика на языке Java (JDK) с ним устанавливается и JRE. Однако если программа распространяется не только среди программистов, у пользователей может не быть JRE или JDK.)
На Windows XP установленную версию Java можно проверить выбрав «Пуск» > «Панель управления» > («Установка и удаление программ») (там должна быть указана, например, Java™ 7 Update 51).
В Windows Vista или 7 установленную версию Java можно проверить, выбрав «Пуск > Панель управления > Программы и компоненты» (там должно отображаться название версии, например Java™ 7 Update 51).
Если на компьютере отсутствует платформа Java, JRE можно загрузить с сайта загрузок Java SE.
Если же она уже имеется на компьютере, но сопоставление файлов не работает, выполните действия для добавления связи файла JAR в Microsoft Windows:
Выберите «Пуск» > «Панель управления».
(Применимо только к Windows Vista). Щелкните ‘Панель управления’ > ‘Программы’.
В Windows XP дважды щелкните ‘Свойства папки’ и выберите вкладку ‘Типы файлов’. Для Windows Vista или 7 щелкните ‘Программы по умолчанию’ и выберите ‘Связать тип файла или протокол с программой’.
В списке «Зарегистрированные типы файлов» выберите файл JAR.
(В Windows XP в разделе «Сведения» диалогового окна щелкните «Изменить программу»).
В диалоговом окне «Выбор программы» выберите Java Platform SE Binary.
Нажмите кнопку «OК» для выхода из диалогового окна «Выбор программы».
Нажмите кнопку ‘Закрыть’, чтобы закрыть диалоговое окно ‘Свойства папки’ (в Windows XP) или диалогового окна связывания типа файла или протокола с конкретными программами (в Windows 7).
Примечание. Если файлы JAR files связаны с Java Platform SE Binary в системе, но двойной щелчок все равно не запускает файл JAR, может потребовать указание параметра -jar в связи файлов.
Чтобы указать параметр -jar в сопоставлении файла на Microsoft Windows XP, выполните следующие действия.
Выберите «Пуск» > «Панель управления».
В Windows XP дважды щелкните ‘Свойства папки’ и выберите вкладку ‘Типы файлов’.
В списке «Зарегистрированные типы файлов» выберите файл JAR.
В разделе «Сведения» диалогового окна щелкните «Дополнительно».
В диалоговом окне «Изменение свойств типа файлов» щелкните «Изменить…».
В текстовом поле «Приложение, исполняющее действие» добавьте следующую строку в конце пути к JRE:
После этого поле должно содержать текст, подобный следующему:
Нажмите кнопку «OК» для выхода из диалогового окна «Изменение действия для типа».
Нажмите кнопку «OК» для выхода из диалогового окна «Изменение свойств типа файлов».
Нажмите кнопку «Закрыть» для выхода из диалогового окна «Свойства папки».
Примечание. Начиная с Windows Vista расширенные связи файлов можно настроить с помощью RegEdit. Дополнительные сведения см. в статье Что произошло с диалоговым окном типов файлов?.
Для систем UNIX и Linux процедура изменения сопоставлений файлов зависит от того, какая рабочая среда (вроде GNOME или KDE) используется. Загляните в параметры своей рабочей среды или ознакомьтесь с документацией по рабочей среде.
Установка переменной среды PATH
Если на компьютере невозможно запустить класс Java или файл JAR без указания на местоположение JDK или JRE, возможно, следует изменить значение переменной среды PATH системы.
При работе в системе Microsoft Windows процедура установки переменной PATH зависит от используемой версии Windows.
Ниже приведены этапы установки переменной PATH на системе Windows XP:
Выберите «Пуск» > «Панель управления» и дважды щелкните «Система».
В диалоговом окне «Свойства системы» выберите вкладку «Дополнительно».
Щелкните вкладку «Переменные среды».
В списке переменных среды пользователя выберите PATH и нажмите кнопку «Изменить».
Добавьте местоположение JRE к концу списка путей. Местоположения в списке разделены точками с запятой (;). Например, если JRE установлен в каталог C:\Program Files\Java\jdk1.6.0_51 , в конец переменной PATH необходимо добавить следующее:
Нажмите кнопку «OК» для выхода из диалогового окна «Переменные среды», затем нажмите кнопку «ОК» для выхода из диалогового окна «Свойства системы».
При работе в операционной системе UNIX или Linux способ изменения переменной среды PATH зависит от используемой программы интерпретатора команд. Ознакомьтесь с документацией по интерпретатору команд для получения дополнительных сведений.
Что дальше?
Дополнительные сведения о работе с IDE NetBeans см. на странице Поддержка и документация веб-сайта NetBeans.
Дополнительные сведения о разработке приложений Java в среде IDE, включая управление путем к классам, доступны в документе Разработка базовых приложений Java.
Сведения о функциях сборки в IDE NetBeans см. в разделе Сборка проектов Java документа Разработка приложений в IDE NetBeans.
Creating JARs
JARs are just ZIP files with a .jar extension and a special directory structure. Meta information is in a directory called META-INF , with the manifest file /META-INF/MANIFEST.MF being the most important file.
Beside META-INF , you add any file you want to the JAR file. Classes must be put into the usual Java directory structure.
This is an example layout for a JAR file, with a manifest file and two classes «com.jarfiller.example.MainClass» and «com.jarfiller.example.Helper»:
The manifest file ( /META-INF/MANIFEST.MF ) describes the content of the JAR file. It is not required, but often automatically added by JAR tools.
The following manifest declares only a main class:
Rules for Manifest Files
- a manifest contains key/value pairs (called attributes ), one per line
- attribute syntax: attribute name, directly followed by a colon (‘:’), a single space and the value
- values may span several lines. Each additional line must start with one space.
- no additional whitespace allowed (more)
- no empty lines allowed in the main section (there can be additional sections, separated by empty lines)
Common Attributes
| Name | Description | Example |
|---|---|---|
| Manifest-Version | File format version of the manifest, always ‘1.0’, required | 1.0 |
| Main-Class | Name of the class containing the main method in executable JARs | my.package.MainClass |
| Class-Path | Space-separated list of relative paths to JAR files and directories for the classpath | lib/util.jar lib/helper.jar drivers/ |
| Sealed | if «true», then packages are sealed. Otherwise «false». | true |
| Created-By | Creator of the JAR; automatically added by the jar tool; not important | 1.6.0_12 (Sun Microsystems Inc.) |
| Implementation-Title | Name of the program/library contained in the JAR | My Super App |
| Implementation-Version | Version of the program/library contained in the JAR | 1.0d |
| Implementation-Vendor | Vendor of the program/library contained in the JAR | Super Soft Inc. |
| Specification-Title | Name of the specification the library implements (more) | Super API |
| Specification-Version | Version of the specification | 1.0 |
| Specification-Vendor | Vendor of the specification | Super Group |
Beside those common attributes, there are many special purpose attributes. For example, if you package a Java Applet or a OSGi Bundle in a JAR, there are specific (and often required) attributes for them. For a simple library or executable JAR they are not needed though.
Example
The JDK ships with a command line tool called jar to create, view and unpack JAR files. On Windows, use it like this:
Back to the basics of Java — Part 2: The JAR
In the first part I introduced a simple example explaining how to use the classpath correctly. I will use this example for this part as well, so if you did not create that yet you can copy it from the first part before proceeding if you want to follow along.
Back to the basics of Java — Part 1: Classpath
My favourite programming language has always been Java, coincidentally it was also my first language I ever used. If…
A jar file is simply a type of archive used to package java class files and associated resources for distribution. If we remember from the last article, our file structure was like this.
Let’s create an executable jar containing the class files. First we navigate to the root directory.
First attempt — the messy way
Then we run this command [1].
- —create (or -c): create a new archive
- —file (or -f): filename of the archive
- file(s): the files to include in the archive
It seems like it cannot find a manifest. So let’s inspect what the contents are. Here are three commands that give you the exact same output so I will show all of them but will from now on use the last one.
- —list (or -t): list the contents of a jar
- —file (or -f): the jar file
It doesn’t look very good. Let’s find out what the manifest contains.
- —extract (or -x): extract the content from a jar
Then print the manifest.
Is this fixable? Sure, I’ll quickly show the fix. The minimum fix is to update the manifest with a classpath.
- —update (or -u): update a jar file
- —manifest (or -m): manifest file to include information from
Let’s run it again.
Okey same problem because it is not an executable jar, there is no main class in the jar manifest. However, we can run it by specifying the jar in the classpath.
Let’s update our manifest file by adding a main class attribute and update the jar.
You can ignore this warning because if we inspect the MANIFEST.MF file as shown above you will see that it looks good.
But if you wanted, you could have overridden the manifest.txt file with just one new line containing the main-class attribute and it would be changed in the MANIFEST.MF file in the jar.
Alternatively, you can actually specify the main-class attribute on the command line to update the jar, which is a quick way of changing the attribute.
- —main-class (or -e): changes the Main-Class attribute in the manifest
Now we can run it like normally.
Okey, so this was messy. Let’s try and simplify things. First, let’s clear the directory of the files to start over.
Second attempt —the simpler way
Now I’ll try to make this a bit more succinct.
- -C: changes directory and includes the provided file (2 argument flag, note the space)
Let’s inspect the content.
Already here you can see that it looks a lot better, no bin directory anywhere. We should be able to run this directly.
Alright, great. However, we can actually simplify the command a little bit.
Here I specified the directory and a wildcard using the dot (.) which takes everything inside the bin directory.
Side note
The ordering of the arguments here is important. If you for instance did this instead:
The command would succeed, but you would end up with a file called myprogram.Main with a main class attribute of project.jar.
Library jar
For this part, I’m going to move out Util.class into its own jar file similarly to what I did in the first part of this series when explaining the classpath.
So the new file structure will look like this.
And we will run the following commands to generate our jar files.
Now if we try and run the project.jar we will obviously get an error because it cannot find the Util class.
So how do we run this? If we remember from the classpath article we can specify the jars on the classpath like this.
But what if we want to make project.jar an executable jar file so that the command that failed above works? Well, then we need to use the manifest like so.
Note that the Class-Path attribute is a relative path to the created jar file.
I hope this learning process-like article has helped your understanding of creating jars. Thanks for reading and please give me a like or comment if there is something incorrectly written or it can be improved in any way!