Co dokładnie zawiera plik jar?

88

Jako stażysta używam kodu firmy w moich projektach i zazwyczaj wysyłają mi jarplik do pracy. I dodać go do produkcji pathw Eclipsei zazwyczaj wszystko jest cacy.

Jednak zaciekawiło mnie, co zawiera każda klasa, a kiedy próbuję otworzyć jedną z klas w jarpliku, mówi mi, że potrzebuję pliku źródłowego.

Co to znaczy? Pochodzę z tła C / C ++, więc jest jarpodobny do już skompilowanego .opliku i widzę tylko jego zawartość .h? A może w jarpliku, którego używam, znajduje się kod , który jest zaszyfrowany, więc nie mogę go odczytać?

Dzięki za wszystkie odpowiedzi!

Edycja:
Dzięki, chłopaki, wiedziałem, że to coś w rodzaju archiwum, ale byłem zdezorientowany, dlaczego kiedy próbowałem otworzyć .classpliki, dostałem kilka przypadkowych znaków. Wynik był podobny, gdy próbowałem otworzyć .oplik w C, więc chciałem się tylko upewnić.
Dzięki!

joshualan
źródło
1
Format pliku JAR
mellamokb
5
@Blue Moon: Zabawne jest to, że Google mnie tu prowadzi. : p
user1036719
@ user1036719 Chociaż dobrze, że znalazłeś tutaj odpowiedź, jest jeszcze jeden link, który pojawia się wcześniej . I to nie jest tak naprawdę kwestia programowania, do której należy zachęcać w SO. Jednak nie zagłosowałem przeciw ani nie zamknąłem głosu.
PP

Odpowiedzi:

88

Plik JAR to w rzeczywistości tylko plik ZIP. Może zawierać wszystko - zwykle zawiera skompilowany kod Java (* .class), ale czasami także kod źródłowy Java (* .java).

Jednak Javę można zdekompilować - w przypadku, gdy programista zaciemnił swój kod, nie otrzymasz jednak żadnych przydatnych nazw klas / funkcji / zmiennych.

ThiefMaster
źródło
53

Jednak zaciekawiło mnie, co zawiera każda klasa i kiedy próbuję otworzyć jedną z klas w pliku jar, mówi mi, że potrzebuję pliku źródłowego.

Plik jar to po prostu plik zip zawierający pliki .class i potencjalnie inne zasoby (i metadane dotyczące samego jar). Naprawdę trudno jest porównać C do Javy, ponieważ kod bajtowy Java zawiera o wiele więcej metadanych niż większość formatów binarnych - ale plik klasy jest skompilowanym kodem, a nie kodem źródłowym.

Jeśli otworzysz plik jar za pomocą narzędzia zip lub uruchomisz jar xf foo.jar, możesz wyodrębnić z niego pliki i przyjrzeć się im. Pamiętaj, że nie potrzebujesz pliku jar do uruchomienia kodu Java - programy ładujące klasy mogą ładować dane klas bezpośrednio z systemu plików lub z adresów URL, a także z plików jar.

Jon Skeet
źródło
Dzięki, wiedziałem, że to trochę jak archiwum, ponieważ mogłem je rozpakować, ale byłem zdezorientowany, dlaczego żaden z plików .class nie zawiera czytelnego tekstu. Dzięki za wyjaśnienie, myślę, że .class jest czymś w rodzaju pliku .o.
joshualan
19

Najlepszym sposobem, aby zrozumieć, co zawiera plik jar, jest wykonanie tego:

Przejdź do wiersza poleceń i wykonaj jar tvf jarfilename.jar

Ajay George
źródło
13

jarJest to plik zip z niektórych dodatkowych plików zawierających metadane. (Pomimo rozszerzenia .jar jest w formacie zip, a wszelkie narzędzia obsługujące pliki .zip mogą również obsługiwać pliki .jar).

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

Pliki JAR mogą zawierać dowolne pliki, ale zwykle zawierają pliki klas i pomocnicze pliki konfiguracyjne (właściwości), grafikę i inne pliki danych potrzebne aplikacji.

Pliki klas zawierają skompilowany kod Java, który jest wykonywany przez wirtualną maszynę języka Java.

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

theglauber
źródło
1
plus 1, ponieważ łączysz się ze standardem
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
10

JAR oznacza Java ARchive. Jest to format pliku oparty na popularnym formacie ZIP i służy do agregowania wielu plików w jeden. Chociaż JAR może być używany jako ogólne narzędzie do archiwizacji, główną motywacją do jego rozwoju było to, że aplety Java i ich wymagane komponenty (pliki .class, obrazy i dźwięki) można było pobrać do przeglądarki w jednej transakcji HTTP, zamiast otwierać nowe połączenie dla każdego elementu. To znacznie poprawia szybkość, z jaką aplet można załadować na stronę internetową i rozpocząć działanie. Format JAR obsługuje również kompresję, która zmniejsza rozmiar pliku i jeszcze bardziej skraca czas pobierania. Ponadto poszczególne wpisy w pliku JAR mogą być podpisane cyfrowo przez autora apletu w celu uwierzytelnienia ich pochodzenia.

oxy_js
źródło
5

Plik JAR zawiera skompilowane klasy binarne Java, w postaci *.classktórych można przekonwertować je na czytelną .javaklasę, dekompilując ją za pomocą dekompilatora open source. Jar ma również opcję, META-INF/MANIFEST.MFktóra mówi nam, jak używać pliku jar - określa inne pliki jar do załadowania z plikiem jar.

Piyush Mattoo
źródło
3

Jar (Java Archive) zawiera grupę plików .class.

Aby utworzyć plik Jar (plik 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

Aby wyodrębnić plik Jar (rozpakuj plik)

    jar -xvf NameOfJarFile.jar

3. Aby wyświetlić spis treści

    jar -tvf NameOfJarFile.jar
bishwas pokharel
źródło
2

Plik .jar jest podobny do pliku .exe. Zasadniczo są to pliki wykonywalne zip (różne algorytmy zip).

W pliku jar zobaczysz foldery i pliki klas. Każdy plik klasy jest podobny do pliku .o i jest skompilowanym archiwum java.

Jeśli chcesz zobaczyć kod w pliku jar, pobierz dekompilator java (znajdujący się tutaj: http://java.decompiler.free.fr/?q=jdgui ) i ekstraktor .jar (7zip działa dobrze).

Tyzoid
źródło
1

JD-GUI to bardzo przydatne narzędzie do przeglądania i dekompilacji plików JAR

Anton Arhipov
źródło
1
To nie odpowiada na pytanie.
Craig Fisher
1

Plik .jar zawiera skompilowany kod (pliki * .class) i inne dane / zasoby związane z tym kodem. Umożliwia łączenie wielu plików w jeden plik archiwum. Zawiera również metadane. Ponieważ jest to plik zip, jest w stanie kompresować dane, które w nim umieścisz.

Kilka rzeczy, które uznałem za przydatne.

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

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

Książka OSGi w praktyce definiuje pliki JAR jako: „JAR to pliki archiwalne oparte na formacie ZIP, co pozwala na agregację wielu plików w jeden plik. Zazwyczaj pliki zawarte w archiwum są połączeniem skompilowanych plików klas Java i zasobów pliki, takie jak obrazy i dokumenty. Dodatkowo specyfikacja definiuje standardową lokalizację w archiwum JAR dla metadanych - folder META-INF - oraz kilka standardowych nazw plików i formatów bezpośrednio w tym pliku, z których najważniejszym jest plik MANIFEST.MF. "

Wazza
źródło
1

Po prostu sprawdź, czy aopalliance.jarplik zawiera .javapliki zamiast .classplików. jeśli tak, po prostu wyodrębnij plik jar, zaimportuj go do zaćmienia i utwórz plik jar przez zaćmienie. U mnie to zadziałało.

Ghanshyam
źródło
1

Ucząc się o JAR, natknąłem się na ten wątek, ale nie mogłem uzyskać wystarczających informacji dla ludzi takich jak ja, którzy mają doświadczenie w .NET, więc dodam kilka punktów, które mogą pomóc osobom takim jak ja z tłem .NET.

Najpierw musimy zdefiniować podobną koncepcję do JAR w .NET, czyli asemblowanie i asemblowanie mają wiele wspólnego z plikami JAR w Javie.

Tak więc zespół jest podstawową jednostką pakowania kodu w środowisku .NET. Zestawy są niezależne i zazwyczaj zawierają kod pośredni z kompilowania klas, metadane dotyczące klas i wszelkie inne pliki potrzebne pakowanemu kodowi do wykonania jego zadania. Ponieważ zestawy są podstawową jednostką pakowania kodu, kilka działań związanych z interakcją z typami należy wykonać na poziomie zestawu. Na przykład przyznawanie uprawnień zabezpieczeń, wdrażanie kodu i przechowywanie wersji odbywa się na poziomie zestawu.

Pliki Java JAR wykonują podobne zadanie w Javie, przy czym większość różnic dotyczy implementacji. Zestawy są zwykle przechowywane jako pliki EXE lub DLL, podczas gdy pliki JAR są przechowywane w formacie pliku ZIP .

Źródło informacji -> 5- Zgromadzenia

Muhammad Waqas Dilawar
źródło