Что именно содержит файл jar?
Как стажер, я использую код компании в своих проектах, и они обычно присылают мне файл jar
для работы. Я добавляю его в сборку path
в Eclipse
и обычно все нормально и dandy.
Однако мне было любопытно узнать, что каждый класс содержал, и когда я пытаюсь открыть один из классов в файле jar
, он говорит мне, что мне нужен исходный файл.
Что это значит? Я исхожу из фона C/С++, так что jar
похож на уже скомпилированный файл .o
, и все, что я вижу, это материал .h
? Или есть фактический код в файле jar
, который я использую для шифрования, поэтому я не могу его прочитать?
Спасибо за все ответы!
Изменить:
Спасибо, ребята, я знал, что это похоже на архив, но я был смущен тем, что, когда я пытался открыть файлы .class
, я получил куча случайных символов. Результат был аналогичным, когда я попытался открыть файл .o
в C, поэтому я просто хотел убедиться.
Спасибо!
Ответы
Ответ 1
Файл JAR на самом деле является только ZIP файлом. Он может содержать что угодно - обычно он содержит скомпилированный Java-код (*.class), но иногда также исходный код Java (*.java).
Однако Java можно декомпилировать - в случае, если разработчик запутал свой код, вы не получите никаких полезных имен класса/функции/переменной.
Ответ 2
Однако мне было любопытно, что каждый класс содержал, и когда я пытаюсь открыть один из классов в файле jar, он сообщает мне, что мне нужен исходный файл.
Файл jar - это в основном zip файл, содержащий файлы .class и потенциально другие ресурсы (и метаданные о самой банке). Трудно сравнивать C с Java на самом деле, так как Java-байтовый код поддерживает намного больше метаданных, чем большинство двоичных форматов, но файл класса скомпилирован вместо исходного кода.
Если вы открываете файл jar с помощью zip-утилиты или запускаете jar xf foo.jar
, вы можете извлечь из него файлы и посмотреть на них. Обратите внимание, что вам не нужен файл jar для запуска Java-кода. Загрузчики классов могут загружать данные класса непосредственно из файловой системы или из URL-адресов, а также из файлов jar.
Ответ 3
Лучший способ понять, что содержит файл jar, выполнив это:
Перейдите в командную строку и выполните jar tvf jarfilename.jar
Ответ 4
Файл A jar
представляет собой zip файл с некоторыми дополнительными файлами, содержащими метаданные. (Несмотря на расширение .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
Ответ 5
JAR означает Java ARchive. Это формат файла на основе популярного формата ZIP файла и используется для объединения многих файлов в один. Хотя JAR можно использовать в качестве общего инструмента для архивирования, основной мотивацией для его разработки было то, что Java-апплеты и их необходимые компоненты (файлы, изображения и звуки) могут быть загружены в браузер только в одной транзакции HTTP, а не в открытии новое соединение для каждой детали. Это значительно улучшает скорость, с которой апплет может быть загружен на веб-страницу и начать работать. Формат JAR также поддерживает сжатие, которое уменьшает размер файла и еще больше увеличивает время загрузки. Кроме того, отдельные записи в JAR файле могут быть подписаны цифровой подписью автором апплета для аутентификации их происхождения.
Ответ 6
Jar файл содержит скомпилированные двоичные классы Java в форме *.class
, которые можно преобразовать в читаемый класс .java
, декомпилировав его с помощью некоторого декомпилятора с открытым исходным кодом. В банке также есть необязательный META-INF/MANIFEST.MF
, который сообщает нам, как использовать файл jar - указывает другие файлы jar для загрузки с помощью jar.
Ответ 7
JD-GUI - очень удобный инструмент для просмотра и декомпиляции JAR
Ответ 8
Файл .jar сродни файлу .exe.
По сути, они оба исполняемые zip файлы (разные zip-алгоритмы).
В файле jar вы увидите папки и файлы классов. Каждый файл класса похож на ваш .o файл и является скомпилированным java-архивом.
Если вы хотите увидеть код в файле jar, загрузите декомпилятор java (расположенный здесь: http://java.decompiler.free.fr/?q=jdgui) и .jar экстрактор (7zip отлично работает).
Ответ 9
Просто проверьте, есть ли aopalliance.jar
файл .java
вместо файлов .class
. если это так, просто извлеките файл jar, импортируйте его в eclipse и создайте банку, хотя затмение. Это сработало для меня.
Ответ 10
Файл .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. "
Ответ 11
В соответствии с моим пониманием Jar файл аналогичен Zip, но имеет исполняемые файлы.
Если у вас нет исполняемых файлов в Jar, тогда он будет таким же, как Zip файл, я хочу сказать, зачем идти в Jar.
Поскольку Jar файл имеет исполняемые файлы, их можно легко загрузить на ваш код и легко передать другим, чтобы использовать его.
Ответ 12
Jar (Архив Java) содержит группу файлов .class.
1.Для создания файла Jar (Zip File)
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