Что именно содержит файл jar?

88

Как стажер, я использую код компании в своих проектах, и они обычно присылают мне jarфайл для работы. Я добавляю его в строй pathв Eclipseи , как правило , все это хорошо и денди.

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

Что это значит? У меня опыт работы с C / C ++, поэтому он jarпохож на уже скомпилированный .oфайл, и все, что я вижу, это .hматериал? Или в jarфайле, который я использую, есть настоящий код, который зашифрован, поэтому я не могу его прочитать?

Спасибо за ответы на все вопросы!

Изменить:
спасибо, ребята, я знал, что это что-то вроде архива, но меня смущало, почему, когда я пытался открыть .classфайлы, я получил кучу случайных символов. Результат был похож, когда я пытался открыть .oфайл на C, поэтому я просто хотел убедиться.
Благодарность!

Джошуалан
источник
5
@Blue Moon: Забавно, что Google приводит меня сюда. : p
user1036719
@ user1036719 Хорошо, что вы нашли здесь ответ, но перед этим есть еще одна ссылка . И это не совсем вопрос программирования, который нужно поощрять на SO. Однако я не голосовал против или закрыл голос.
PP

Ответы:

88

Файл JAR на самом деле является просто файлом ZIP. Он может содержать что угодно - обычно он содержит скомпилированный код Java (* .class), но иногда также исходный код Java (* .java).

Тем не менее, Java может быть декомпилирована - если разработчик запутал свой код, вы не получите никаких полезных имен классов / функций / переменных.

ThiefMaster
источник
53

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

Файл jar - это в основном zip-файл, содержащий файлы .class и, возможно, другие ресурсы (и метаданные о самом банке). На самом деле сложно сравнивать C с Java, поскольку байт-код Java поддерживает намного больше метаданных, чем большинство двоичных форматов, но файл класса - это скомпилированный код, а не исходный код.

Если вы либо откроете файл jar с помощью утилиты zip, либо запустите, jar xf foo.jarвы можете извлечь из него файлы и посмотреть на них. Обратите внимание, что вам не нужен файл jar для запуска кода Java - загрузчики классов могут загружать данные классов непосредственно из файловой системы или из URL-адресов, а также из файлов jar.

Джон Скит
источник
Спасибо, я знал, что это что-то вроде архива, так как я мог его распаковать, но меня смущало, почему ни один из файлов .class не содержал читаемого текста. Спасибо за объяснение, я полагаю, что класс .class похож на файл .o.
joshualan
19

Лучший способ понять, что содержит файл jar, - это выполнить следующее:

Перейдите в командную строку и выполните jar tvf jarfilename.jar

Аджай Джордж
источник
13

jarФайл почтовый файл с некоторыми дополнительными файлами , содержащими метаданные. (Несмотря на расширение .jar, он находится в формате zip, и любые утилиты, работающие с файлами .zip, также могут работать с файлами .jar.)

http://docs.oracle.com/javase/8/docs/technotes/guides/jar/index.html

Файлы Jar могут содержать файлы любого типа, но обычно они содержат файлы классов и вспомогательные файлы конфигурации (свойства), графику и другие файлы данных, необходимые приложению.

Файлы классов содержат скомпилированный код Java, который исполняется виртуальной машиной Java.

http://en.wikipedia.org/wiki/Java_class_file

глаубер
источник
1
плюс 1, потому что вы
ссылаетесь
10

JAR означает Java ARchive. Это формат файла, основанный на популярном формате файлов ZIP, который используется для объединения множества файлов в один. Хотя JAR можно использовать в качестве общего инструмента для архивирования, основной мотивацией для его разработки было то, что Java-апплеты и их необходимые компоненты (файлы .class, изображения и звуки) могут быть загружены в браузер за одну транзакцию HTTP, а не открываются. новое соединение для каждой детали. Это значительно увеличивает скорость, с которой апплет можно загрузить на веб-страницу и начать работу. Формат JAR также поддерживает сжатие, которое уменьшает размер файла и еще больше сокращает время загрузки. Кроме того, отдельные записи в файле JAR могут быть подписаны цифровой подписью автора апплета для аутентификации их происхождения.

oxy_js
источник
5

Jar-файл содержит скомпилированные двоичные классы Java, в виде *.classкоторых можно преобразовать в читаемый .javaкласс путем декомпиляции с помощью некоторого декомпилятора с открытым исходным кодом. В jar также есть необязательный параметр, META-INF/MANIFEST.MFкоторый сообщает нам, как использовать файл jar - указывает другие файлы jar для загрузки вместе с jar.

Пиюш Маттоо
источник
3

Jar (Java Archive) содержит группу файлов .class.

1.Чтобы создать файл Jar (Zip-файл)

 if one .class (say, Demo.class) then use command jar -cvf NameOfJarFile.jar Demo.class (usually it’s not feasible for only one .class file)

 if more than one .class (say, Demo.class , DemoOne.class) then use command jar -cvf NameOfJarFile.jar Demo.class DemoOne.class

 if all .class is to be group (say, Demo.class , DemoOne.class etc) then use command jar -cvf NameOfJarFile.jar *.class

2.Для извлечения файла Jar (разархивировать файл)

    jar -xvf NameOfJarFile.jar

3. для отображения оглавления

    jar -tvf NameOfJarFile.jar
Бишвас Покхарел
источник
2

Файл .jar похож на файл .exe. По сути, они оба являются исполняемыми zip-файлами (разные алгоритмы zip).

В файле jar вы увидите папки и файлы классов. Каждый файл класса похож на ваш файл .o и представляет собой скомпилированный архив java.

Если вы хотите увидеть код в файле jar, загрузите декомпилятор java (находится здесь: http://java.decompiler.free.fr/?q=jdgui ) и экстрактор .jar (7zip отлично работает).

Тизоид
источник
1

JD-GUI - очень удобный инструмент для просмотра и декомпиляции JAR.

Антон Архипов
источник
1
Это не отвечает на вопрос.
Крейг Фишер,
1

Файл .jar содержит скомпилированный код (файлы * .class) и другие данные / ресурсы, связанные с этим кодом. Он позволяет объединить несколько файлов в один архивный файл. Он также содержит метаданные. Поскольку это zip-файл, он способен сжимать данные, которые вы в него помещаете.

Несколько вещей, которые я нашел полезными.

http://www.skylit.com/javamethods/faqs/createjar.html

http://docs.oracle.com/javase/tutorial/deployment/jar/basicsindex.html

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

Wazza
источник
1

Просто проверьте, есть ли в aopalliance.jarфайле .javaфайлы вместо .classфайлов. если это так, просто извлеките файл jar, импортируйте его в eclipse и создайте банку через eclipse. У меня это сработало.

Ghanshyam
источник
1

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

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

Итак, сборка - это фундаментальная единица упаковки кода в среде .NET. Сборки являются самодостаточными и обычно содержат промежуточный код из классов компиляции, метаданные о классах и любые другие файлы, необходимые упакованному коду для выполнения своей задачи. Поскольку сборки являются основной единицей упаковки кода, некоторые действия, связанные с взаимодействием с типами, должны выполняться на уровне сборки. Например , предоставление разрешений безопасности, развертывание кода и управление версиями выполняются на уровне сборки.

Файлы Java JAR выполняют аналогичную задачу в Java, но большая часть различий заключается в реализации. Сборки обычно хранятся как EXE или DLL, в то время как файлы JAR хранятся в формате ZIP .

Источник информации -> 5- Сборки

Мухаммад Вакас Дилавар
источник