Вопрос такой что такое jar файл и зачем он нужен на практике. Ведь если есть файл java, есть файл class который уже переведен в байт-код, зачем тогда jar файл?
Какая его функция и можно ли без него обойтись?
JAR-файл — это Java-архив (Java ARchive). Это простой архивный файл, сжатый (иногда с нулевой компрессией) по алгоритму zip.
Он был создан для удобства распространения программ, написанных на Java. Так как обычная программа содержит сотни, тысячи, а иногда и миллионы файлов. Файл может содержать:
META-INF/MANIFEST.MF
Манифест - это текстовый файл формата ключ: значение
; он содержит описание jar-файла. В нем могут быть следующие ключи:
main
), такой jar-файл можно запустить как обычный исполняемый файлCLASSPATH
, который необходим для полноценной работы программыКроме jar, также существуют другие архивы, связанные с Java:
Можно ли обойтись без?
В принципе, можно, все что вам необходимо - это всегда точно копировать структуру вашего приложения. То есть все класс-файлы и файлы с ресурсами должны располагаться в правильных директориях. Переменная CLASSPATH должна содержать пути ко всем зависимостям. Если эти условия соблюдены, то ваше приложение будет работать без упаковки в jar.
P.S. В переводе с английского, jar - означает банка, стеклянный или керамический цилиндрический контейнер с широким горлом, предназначенный для хранения еды (обычно). Кофе часто хранят в банках, так что тут игра слов: банка с кофе - банка с java-классами.
JAR расшифровывается как Java ARchive — архив Java. Если не особо вдаваться в подробности (что в общем-то часто и происходит в реальности), то JAR-файл представляет собой обычный ZIP-файл с некоторыми дополнениями. Основная задача этого архива — хранить файлы с классами. Т.е. пакеты/каталоги , внутри которых находятся class-файлы архивируются и JVM может их использовать уже в более удобном (компактном) виде. Выгода очевидна — в реальных проектах вы вряд ли будете ограничиваться использованием библиотек классов только из JDK — скорее всего вы будете подключать сотни (если не тысячи) классов, которые были созданы для решения определенных задач. Если все это огромное количество лежало бы на диске в виде class-файлов, то несложно понять, насколько это неудобно и громоздко. Разработчики Java предложили вполне элегантное решение — вы можете подключать архивные файлы, в которых запакованы тысячи скомпилированных классов. Что конечно же удобнее, чем таскать за собой в каждый проект все директории со всеми файлами.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты