Kontynuujemy wczorajszy wątek dotyczący pakietów, aby traktować go jako drugi krok do tego, jak należy PRAWIDŁOWO ręcznie kompilować kod źródłowy w języku Java. Proszę o cofnięcie się wstecz jeśli nie przerobiliście tamtego etapu, jest on kluczowy, żeby zrozumieć, a także utworzyć własny archiwum JAR. Zapraszam.

ARCHIWUM JAR. TROCHĘ TEORII

"JAR" to skrót od wyrażenia "Java ARchive File", czyli plik archiwum Javy. Ze względu na kalambur, kojarzy się większości ze "słoikiem" przechowującym nasz program. To jest nic innego jak wypakowalne archiwum podobne do "zip" albo "rar". Jest ono tworzone w celu scalenia wszystkich niezbędnych plików (nie tylko klasowych, ale również takich jak grafika czy dźwięk) i potraktowania jak jeden wielki plik wykonywalny ".exe".

Należy jednak odróżniać archiwum JAR od pliku wykonywalnego i nie stawiać między nimi znaku równości. Plik wykonywalny oprócz rozszerzenia, wyróżnia się również kodem startowym, który dostosowany jest do konkretnego systemu operacyjnego. W praktyce oznacza to, że tylko system Windows przyjmie rozszerzenie ".exe". Natomiast w przypadku pliku JAR, występuje niezależność platformowa czyli nie musimy się przejmować tym, że aplikacja zadziała tylko pod dany OS, ale pod warunkiem, że dany system operacyjny posiada zainstalowaną Javę w tej samej wersji, w której ta aplikacja została napisana!

Archiwum JAR

"Java ARchive File" skracane do "JAR" jest wypakowalnym archiwum programu w języku Java symulującym zwykły plik wykonywalny. System operacyjny musi mieć zainstalowane JRE (lub JDK) w celu uruchomienia takiej aplikacji.

PODZIAŁ NA DWA KATALOGI

W dalszym toku artykułu pokażę Wam jak wygląda zawartość takiego archiwum JAR. Koniec poprzedniej części oznacza kontynuację kolejnych czynności od tego miejsca. Musimy trochę zmodyfikować naszą strukturę katalogów i oddzielić pliki klasowe od źródłowych pakując je do osobnych katalogów. W pierwszej kolejności, usuńcie wszystkie pliki klasowe z rozszerzeniem ".class" (znajdują się one w tym samym miejscu, co pliki źródłowe). Następnie cofnijcie się do folderu stanowiącego "korzeń" projektu (folder przechowujący folder o nazwie "X") i utwórzcie sobie dwa nowe katalogi o dowolnych nazwach, które będą przeznaczone do odseparowania plików źródłowych od plików klasowych.

Ja nadam nazwę "code" dla plików źródłowych oraz "classes" dla plików klasowych (i od tej pory takim nazewnictwem będziemy sobie to odróżniać), natomiast to nie jest żaden obowiązek, archiwum JAR sobie poradzi. Wpakujcie folder "X" do katalogu "code", a następnie uruchomcie wiersz poleceń (najlepiej z uprawnieniami administratora), przejdźcie do lokalizacji folderu "code" za pomocą "cd" i wprowadźcie bezbłędnie poniższą komendę:

javac -d ../[nazwa katalogu dla plików klasowych] [X]/[Y]/[nazwa pliku źródłowego].java

To jest pierwszy etap drogi do prawidłowego tworzenia archiwum JAR. Kompilator "javac" posiada parametr "-d" pozwalający na przeniesienie skompilowanych plików klasowych do odrębnego katalogu. Co więcej, utworzy w nim automatycznie taką samą strukturę podfolderów, jakie występują w folderze "code" zgodnie z ciągiem pakietów.

PLIK MANIFESTU DLA ARCHIWUM JAR

Po upewnieniu się, że pliki klasowe zostały "dostarczone" do folderu "classes", przechodzimy do niego i tam, gdzie jest folder "X", tworzymy sobie nowy plik tekstowy i nazywamy go "manifest". Tym razem nazwa jest OBOWIĄZKOWA! Wejdźcie do niego i wprowadźcie następującą linijkę:

Main-Class: [X].[Y].[nazwa pliku źródłowego przechowującego statyczną metodę "main"]

Zaraz po niej KONIECZNIE naciśnijcie Enter celem przejścia do nowej linii i dopiero wtedy zapiszcie. Brak pustego wiersza na końcu skutkować będzie błędami podczas procesu budowy archiwum JAR! Powróćcie teraz do wiersza poleceń, cofnijcie się do folderu głównego ("cd ..") i przejdźcie do katalogu "classes". Będąc tam, wprowadźcie poniższe polecenie:

jar -cvmf manifest.txt [nazwa archiwum JAR].jar [X]

Jest to kolejne narzędzie JDK służące do budowania własnego archiwum wypakowalnego. Po podaniu bezbłędnej nazwy pliku manifestu oraz jego rozszerzenia, dajecie po spacji dowolną nazwę Waszego JAR, który zostanie utworzony. O wiele ważniejsze jest wstawienie nazwy katalogu stanowiącego początek "łańcucha" pakietów. Dzięki temu, możliwe jest uniknięcie wprowadzania wielu nazw pakietów. Java sobie poradzi ze znalezieniem wszystkich plików klasowych i osadzeniem ich do jednego miejsca. Jeśli interesuje Was działanie poszczególnych flag po słowie "jar", sięgnijcie do oficjalnej dokumentacji i zejdźcie do nagłówka "Options".

URUCHOMIENIE PLIKU ARCHIWUM JAR

Ostatnia część artykułu to uruchamianie. Mając otwarty wiersz poleceń wpisujemy:

java -jar [nazwa archiwum JAR].jar

To odszuka Wasze archiwum, wejdzie do pliku "manifestu" i zasugeruje się wpisem "Main-Class" podanym wcześniej. Jeśli wpisaliście prawidłowy ciąg według podanego wzoru, na ekranie terminala pojawi się treść komunikatu jaka była poprzednio.

Drugim sposobem jest możliwość odpalenia programu klikając dwa razy na archiwum, tak jak otwieracie plik wykonywalny. Jednak w naszym przypadku to nie da żadnego efektu, gdyż komunikat dotyczy tylko okna terminala. Aby ujrzeć efekt pojawienia się programu "na żywo", trzeba sobie zbudować dowolną strukturę graficznego interfejsu użytkownika przy pomocy "Swing" lub "JavaFX".


Tak się prawidłowo buduje i wdraża własny archiwum JAR. Dwie kluczowe zasady w Javie to po pierwsze, odpowiednia segregacja klas i umieszczenie ich w pakietach, a po drugie, opakowanie wszystkiego w jedno wykonywalne archiwum.

PODOBNE ARTYKUŁY