Небольшая путаница с файлами .jar - PullRequest
2 голосов
/ 13 сентября 2011

В области компьютерных наук я узнал, что файлы .jar - это, по сути, сжатый набор файлов .java, которые были скомпилированы.Таким образом, когда у вас есть проект, вместо этих 20 файлов .java вы можете иметь кучу сжатых классов (.jar).В прошлом году в CSI мы работали с файлом .jar под названием DanceStudio, который мы должны были использовать, чтобы ноги шли по полу.В этом году мы работаем с другой программой, чтобы лучше понять Java, поэтому я разархивировал файл .jar, содержащий 26 классов, которые я затем декомпилировал.Я хотел попытаться создать программу, скомпилировав все файлы .java с другими файлами, необходимыми для запуска программы (Walker, Foot, ETC.) Когда я попытаюсь скомпилировать все эти файлы, он скажет, что у меня есть дубликатфайлы (Walker, Foot, ETC.) Я не понимаю, почему это скомпилируется, если файл .jar был в основном одним и тем же, только в сжатом виде.Что меня смущает, так это то, что файлы Foot, ETC в .jar на самом деле более сложные и содержат больше кода.

Может, кто-нибудь объяснит, как на самом деле работает файл .jar и разделяет эти файлы, и как он может работать с дублирующимся классом, которого нет в файле .jar?

Ответы [ 3 ]

5 голосов
/ 13 сентября 2011

Прежде всего, вам не хватает одного шага в объяснении файла .jar.

Файл .jar представляет собой набор файлов .class. И .class файлы - это то, что получается путем компиляции .java файла.

Обычно один файл .java создает один файл .class, поскольку он содержит определение одного типа. Но есть несколько способов для файла .java создать более одного .class файла (внутренние / вложенные классы, анонимные классы, непубличные классы верхнего уровня, ...), поэтому это не обязательно обязательно связь 1-к-1 между .java файлами и .class файлами.

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

Когда компилятор Java превращает файлы .java в файлы .class, он создает формат, который лучше всего подходит для выполнения. Этот формат не будет представлять собой те же понятия, что и исходный файл Java. Например: в байт-коде Java нет классического «если». Будет реализована соответствующая команда перехода.

Все это означает, что процесс преобразования .class файлов обратно в .java файлы сложен и, как правило, не совершенен.

0 голосов
/ 13 сентября 2011

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

0 голосов
/ 13 сентября 2011
  1. Как правило, исходные файлы .java (открытый текст) компилируются в (двоичные) файлы .class.

  2. Если вы используете пакеты, файлы классов будут находиться в разных подкаталогах (представляющих пакет).

  3. .jar-файл - это сжатый двоичный файл, который помещает все .classes в нужные каталоги в один компактный, простой в управлении файл.

  4. .jar файл также может содержать другие файлы, такие как манифесты, растровые изображения и ресурсы.

  5. .jar файлы также могут быть «подписаны» для обеспечения целостности / подлинности их содержимого.

Вот несколько хороших ссылок:

http://en.wikipedia.org/wiki/JAR_%28file_format%29

http://download.oracle.com/javase/tutorial/deployment/jar/

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...