Що саме містить файл jar?


87

Як стажист, я використовую код компанії в своїх проектах, і вони зазвичай надсилають мені 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 можна декомпілювати - якщо розробник заплутає свій код, ви не отримаєте корисних імен класів / функцій / змінних.


53

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

Файл jar - це в основному zip-файл, що містить файли .class та потенційно інші ресурси (і метадані про саму jar). Складно порівнювати C з Java на насправді, так як Java байт - код містить набагато більше метаданих , ніж більшість бінарних форматів - але файл класу є скомпільований код замість вихідного коду.

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


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

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, оскільки ви посилаєтесь на стандарт
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

10

JAR розшифровується як Java ARchive. Це формат файлу, заснований на популярному форматі ZIP, і використовується для об’єднання багатьох файлів в один. Незважаючи на те, що JAR можна використовувати як загальний інструмент архівування, основною мотивацією для його розробки було те, що аплети Java та їх необхідні компоненти (файли .class, зображення та звуки) можна завантажувати в браузер за одну транзакцію HTTP, а не відкривати нове з'єднання для кожного шматка. Це значно покращує швидкість завантаження аплету на веб-сторінку та початку роботи. Формат JAR також підтримує стиснення, що зменшує розмір файлу та ще більше зменшує час завантаження. Крім того, окремі записи у файлі JAR можуть бути цифровим підписом автора аплету для автентифікації їх походження.


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

Файл .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. "


1

Просто перевірте, чи у aopalliance.jarфайлі є .javaфайли замість .classфайлів. якщо так, просто витягніть файл jar, імпортуйте його в eclipse і створіть jar, хоча eclipse. У мене це спрацювало.


1

Дізнавшись про JAR, я натрапив на цю тему, але не зміг отримати достатньо інформації для таких людей, як я, у яких є .NET-фон, тому я додаю кілька пунктів, які можуть допомогти таким людям, як я, із фоном .NET.

Спочатку нам потрібно визначити подібне поняття до JAR у .NET, яке є Assembly та спільне використання спільних файлів Java JAR.

Отже, збірка є основною одиницею упаковки коду в середовищі .NET. Збірки є самостійними і, як правило, містять проміжний код компіляції класів, метадані про класи та будь-які інші файли, необхідні пакуваному коду для виконання свого завдання. Оскільки збірки є основною одиницею упаковки коду, на рівні збірки потрібно виконувати кілька дій, пов'язаних із взаємодією з типами.Наприклад , надання дозволів безпеки, розгортання коду та встановлення версій здійснюються на рівні збірки.

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

Джерело інформації -> 5- Асамблеї

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.