Jako stażysta używam kodu firmy w moich projektach i zazwyczaj wysyłają mi jar
plik do pracy. I dodać go do produkcji path
w Eclipse
i zazwyczaj wszystko jest cacy.
Jednak zaciekawiło mnie, co zawiera każda klasa, a kiedy próbuję otworzyć jedną z klas w jar
pliku, mówi mi, że potrzebuję pliku źródłowego.
Co to znaczy? Pochodzę z tła C / C ++, więc jest jar
podobny do już skompilowanego .o
pliku i widzę tylko jego zawartość .h
? A może w jar
pliku, 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ć .class
pliki, dostałem kilka przypadkowych znaków. Wynik był podobny, gdy próbowałem otworzyć .o
plik w C, więc chciałem się tylko upewnić.
Dzięki!
Odpowiedzi:
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.
źródło
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.źródło
Najlepszym sposobem, aby zrozumieć, co zawiera plik jar, jest wykonanie tego:
Przejdź do wiersza poleceń i wykonaj
jar tvf jarfilename.jar
źródło
jar
Jest 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
źródło
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.
źródło
Plik JAR zawiera skompilowane klasy binarne Java, w postaci
*.class
których można przekonwertować je na czytelną.java
klasę, dekompilując ją za pomocą dekompilatora open source. Jar ma również opcję,META-INF/MANIFEST.MF
która mówi nam, jak używać pliku jar - określa inne pliki jar do załadowania z plikiem jar.źródło
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)
3. Aby wyświetlić spis treści
źródło
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).
źródło
JD-GUI to bardzo przydatne narzędzie do przeglądania i dekompilacji plików JAR
źródło
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. "
źródło
Po prostu sprawdź, czy
aopalliance.jar
plik zawiera.java
pliki zamiast.class
plikó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.źródło
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
źródło