Что такое jar файл и зачем он нужен?

658
22 июня 2017, 03:45

Вопрос такой что такое jar файл и зачем он нужен на практике. Ведь если есть файл java, есть файл class который уже переведен в байт-код, зачем тогда jar файл?

Какая его функция и можно ли без него обойтись?

Answer 1

JAR-файл — это Java-архив (Java ARchive). Это простой архивный файл, сжатый (иногда с нулевой компрессией) по алгоритму zip.

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

  • файл манифеста META-INF/MANIFEST.MF
  • java-файлы (исходный код)
  • class-файлы
  • файлы, необходимые для работы программы: картинки, файлы с настройками и прочее (ресурсы)
  • электронные подписи, которые позволяют защитить программу от модификации

Манифест - это текстовый файл формата ключ: значение; он содержит описание jar-файла. В нем могут быть следующие ключи:

  • Manifest-Version - версия манифеста
  • Main-Class - имя главного класса (должен содержать метод main), такой jar-файл можно запустить как обычный исполняемый файл
  • Class-Path - позволяет указать CLASSPATH, который необходим для полноценной работы программы
  • SHA-Digest - контрольная сумма определенного файла внутри архива

Кроме jar, также существуют другие архивы, связанные с Java:

  • WAR (Web Application aRchive) - содержит в себе приложение для веба
  • EAR (Enterprise Application aRchive) - содержит в себе энтерпрайз приложение (обычно из нескольких модулей)
  • APK (Android aPplication pacKage) - содержит в себе приложение для Android

Можно ли обойтись без?

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

P.S. В переводе с английского, jar - означает банка, стеклянный или керамический цилиндрический контейнер с широким горлом, предназначенный для хранения еды (обычно). Кофе часто хранят в банках, так что тут игра слов: банка с кофе - банка с java-классами.

Answer 2

JAR расшифровывается как Java ARchive — архив Java. Если не особо вдаваться в подробности (что в общем-то часто и происходит в реальности), то JAR-файл представляет собой обычный ZIP-файл с некоторыми дополнениями. Основная задача этого архива — хранить файлы с классами. Т.е. пакеты/каталоги , внутри которых находятся class-файлы архивируются и JVM может их использовать уже в более удобном (компактном) виде. Выгода очевидна — в реальных проектах вы вряд ли будете ограничиваться использованием библиотек классов только из JDK — скорее всего вы будете подключать сотни (если не тысячи) классов, которые были созданы для решения определенных задач. Если все это огромное количество лежало бы на диске в виде class-файлов, то несложно понять, насколько это неудобно и громоздко. Разработчики Java предложили вполне элегантное решение — вы можете подключать архивные файлы, в которых запакованы тысячи скомпилированных классов. Что конечно же удобнее, чем таскать за собой в каждый проект все директории со всеми файлами.