Gentoo Logo

Java w Gentoo

Spis treści:

1.  Co to jest Java?

Ogólny przegląd

Java to język programowania opracowany przez inżynierów z laboratoriów Sun Microsystems. Jest to zorientowany obiektowo język, który może być uruchamiany na wielu platformach bez konieczności rekompilacji kodu dla każdej z platform osobno. Pomimo że Java może być kompilowana do zwykłego programu, to jej największą popularność powoduje fakt, że jest bardzo przenośna oraz posiada możliwość łatwego pozbywania się śmieci z kodu. Aby osiągnąć taki stopień przenośności kompilatory Java kompilują kod do postaci "Java bytecode", który można uruchomić w JRE (Java Runtime Envirnoment - środowisko uruchomieniowe Java) a nie bezpośrednio w systemie operacyjnym.

Aby uruchomić program napisany w Javie, należy mieć zainstalowany JRE (Java Runtime Environment - środowisko uruchomieniowe Java). JRE instaluje główne biblioteki, maszynę wirtualną Java, wtyczki do przeglądarek, etc. JDK (Java Development Kit) dodaje narzędzia programistyczne, jak na przykład kompilator kodu Java czy debugger.

2.  Wprowadzenie

Istniejące instalacje

Dla istniejących instalacji, bez względu na to czy mieliśmy zainstalowane jakiekolwiek pakiety związane z Javą, powinniśmy się upewnić, że postępowaliśmy zgodnie z dokumentem Aktualizacja Javy.

Nowe instalacje

W przypadku nowej instalacji nie musimy wykonywać żadnych dodatkowych czynności.

3.  Instalacja wirtualnej maszyny

Wybory

W Gentoo dostępne jest kilka rodzajów zarówno JRE (Runtime Enviroment) jak i JDK (Development Kit).

Twórcy JDK JRE
The Blackdown Java Kit dev-java/blackdown-jdk dev-java/blackdown-jre
Sun's Java Kit dev-java/sun-jdk dev-java/sun-jre-bin
The IBM Java Kit dev-java/ibm-jdk-bin dev-java/ibm-jre-bin
BEA WebLogic's J2SE Development Kit dev-java/jrockit-jdk-bin

Domyślnym wyborem jest wersji 1.4 Blackdown JRE/JDK, ponieważ jest ona darmowa i dostępna bez przeprowadzania zbędnej rejestracji.

Zarówno Sun jak i IBM są zdecydowanie szybsze, niemniej jednak, zdobycie ich wymaga nieco więcej pracy, gdyż należy przeczytać i zaakceptować ich licencję przed pobraniem plików z sieci (IBM dodatkowo wymaga rejestracji).

Instalowanie JRE/JDK

Aby zainstalować domyślne dla wykorzystywanego profilu JDK, należy uruchomić emerge virtual/jdk, natomiast by zainstalować domyślne JRE - emerge virtual/jre.

Aktualnie Sun zmienił licencję na swoje pakiety JDK i JRE na bardziej przyjazne dla dystrybucji Linuksa. W wyniku tego od wersji 1.5, mogą one być pobierane za darmo, bez niepotrzebnego zawracania głowy.

Uwaga: JDK zawiera w sobie JRE, więc jeżeli zainstalujemy JDK, nie powinniśmy dodatkowo instalować JRE.

Instalacja maszyn wirtualnych pobieranych ręcznie

Jak wcześniej wspomnieliśmy, niektóre z pakietów JDK lub JRE wymagają podjęcia kilku kroków przed ich instalacją. Uruchamiamy emerge tak jakbyśmy normalnie instalowali te pakiety. Po wydaniu tego polecenia zostaniemy poinformowania co i skąd mamy pobrać.

Wszystkie wskazane pliki należy umieścić w katalogu /usr/portage/distfiles. Dopiero potem można ponownie uruchomić polecenie emerge, aby dane JRE/JDK zostały poprawnie zainstalowane.

4.  Konfiguracja wirtualnej maszyny

Przegląd

Gentoo posiada możliwość bezkonfliktowego zainstalowania wielu JDK oraz JRE równocześnie.

Używając z konta roota narzędzia java-config, można ustawić domyślne środowisko dla całego systemu. Użytkownicy mogą użyć java-config, aby ustawić własne domyślne środowisko, które może być inne niż to określone w systemie.

Uwaga: Środowisko dla systemu oraz maszynę wirtualną możemy zmienić również używając narzędzia eselect. Polecenie eselect java-vm help wyświetli więcej informacji na ten temat.

Ustawianie domyślnego środowiska wirtualnej maszyny

Uruchamiając polecenie java-config --list-available-vms, wyświetlona zostanie lista dostępnych JRE oraz JDK na danym systemie. Poniżej przedstawiamy przykład takiej listy:

Listing 4.1: Wyświetlanie dostępnych maszyn wirtualnych

# java-config --list-available-vms
1)      Blackdown JDK 1.4.2.03 [blackdown-jdk-1.4.2] (Build Only)
2)      Blackdown JRE 1.4.2.03 [blackdown-jre-1.4.2] (Build Only)
4)      IcedTea6-bin 1.4.1 [icedtea6-bin]
5)      Sun JDK 1.5.0.20 [sun-jdk-1.5] (Build Only)
*)      Sun JDK 1.6.0.16 [sun-jdk-1.6]

Uwaga: Maszyny wirtualne oznaczone jako Build Only mogą zawierać luki bezpieczeństwa lub posiadać status EOL. Gentoo nie zaleca ustawiania tych maszyn wirtualnych zarówno w przypadku użytkownika jak i systemu. Więcej informacji można znaleźć w rozdziale Flaga Build Only.

Znak * (gwiazdka) informuje nas o aktualnie aktywnej maszynie wirtualnej (systemowej lub wybranej przez użytkownika, jeżeli taka jest). Nazwy w nawiasach ("[]") to wskaźnik lub identyfikator dla konkretnej maszyny wirtualnej. Przekazując tę wartość (lub numer) do java-config --set-system-vm ustawia się wskazaną maszynę wirtualną jako domyślną. Poniżej znajduje się przykład takiej czynności:

Listing 4.2: Ustawianie domyślnej maszyny wirtualnej dla systemu

(Poprzez nazwę (preferowany))
# java-config --set-system-vm blackdown-jdk-1.4
Now using blackdown-jdk-1.4 as your generation-2 system JVM
UWAGA: maszyna wirtualna blackdown-jdk-1.4 jest oznaczona jako build-only i nie zaleca się jej używania.
(Poprzez numer maszyny)
# java-config --set-system-vm 2
Now using sun-jdk-1.5 as your generation-2 system JVM

Jako zwykły użytkownik możemy użyć java-config --set-user-vm

Uwaga: Nie musimy wykonywać source profilu w celu aktualizacji maszyny wirtualnej systemowej lub użytkownika.

Flaga Build Only

Niektóre z wirtualnych maszyn posiadają flagę build-only z powodu możliwych luk bezpieczeństwa i/lub posiadania statusu EOL. Maszyny te nie będą używane przez system do uruchamiania aplikacji z użyciem skryptów startowych Gentoo, jednak cały czas będą dostępne jako zależności do budowy innych aplikacji. Ustawianie tych maszyn wirtualnych, zarówno w przypadku systemu jak i użytkownika jest nieporządane z powodu możliwości ich uruchomienia ze ścieżki /usr/bin/{java,javac,..} lub użycia przez programy, które nie używają skryptów startowych Gentoo.

Preferowana maszyna wirtualna

Podczas instalowania pakietów Javy, wirtualna maszyna może być - i będzie zmieniona - w razie potrzeby.

Ponieważ istnieje dużo różnych wirtualnych maszyn Javy, nie jesteśmy w stanie przetestować działania każdego pakietu na każdej z nich. Aby się upewnić, że każdy z nich został zainstalowany poprawnie, wybraliśmy listę domyślnych/wspieranych maszyn wirtualnych dla każdej architektury. Możemy znaleźć je w /usr/share/java-config-2/config/jdk-defaults.conf. Kiedy instalujemy pakiety w Javie, a w systemie zostanie wykryta chociaż jedna maszyna zgodna z tym plikiem, zostanie ona automatycznie użyta zamiast maszyny systemowej.

Zmiana maszyny wirtualnej podczas instalacji jest potrzebna również w przypadku, gdy maszyna systemowa ma wersję 1.4 natomiast instalowany pakiet wymaga wersji 1.5. Podczas instalacji zostanie ona zmieniona na 1.5, pozostawiając maszynę systemową nietkniętą.

Oczywiście, w Gentoo wszystko zależy od nas, więc możemy ominąć te domyślne ustawienia w /etc/java-config-2/build/jdk.conf i mieć pełną kontrolę nad tym jaka maszyna wirtualna jest używana w naszym systemie. Kilka przykładów:

Listing 4.3: Przykład /etc/java-config-2/build/jdk.conf

(Zawsze będzie korzystać z sun-jdk, np. sun-jdk-1.4 for 1.4, sun-jdk-1.5 for 1.5, etc)
*=sun-jdk

Listing 4.4: Przykład /etc/java-config-2/build/jdk.conf

(Będzie korzystać sun-jdk-1.5 kiedy tylko jest to możliwe, poza przypadkami gdzie użycie 1.3 lub 1.4 jest konieczne)
*=sun-jdk-1.5

Listing 4.5: Przykład /etc/java-config-2/build/jdk.conf

# Dla 1.3 preferujemy sun-jdk 1.4, a gdy niedostępne ibm-jdk-bin,
# Dla 1.4 użyjemy blackdown-jdk, a dla 1.5 sun-jdk
1.3=sun-jdk-1.4 ibm-jdk-bin
1.4=blackdown-jdk
1.5=sun-jdk

Ostrzeżenie: Nie musimy edytować tego pliku. Jeżeli chcemy zmienić te opcje w celu użycia nie wspieranej maszyny wirtualnej, prawdopodobnie zakończy się to błędem. Zgłoszone błędy z użyciem niewspieranych maszyn wirtualnych będą miały niższy priorytet niż te ze wspieranymi.

5.  Kompilatory

Standardowym kompilatorem Java używanym do budowania jest javac, który wchodzi w skład każdego JDK. Podobnie jak wybieraliśmy maszynę wirtualną, możemy również wybrać, którego kompilatora chcemy użyć. W pliku /etc/java-config-2/build/compilers.conf zdefiniujemy listę ustawień, w których zdecydujemy jakiego kompilatora chcemy użyć.

Listing 5.1: /etc/java-config-2/build/compilers.conf

# If the ebuild supports it
# it will chceck the COMPILERS var front to back and
# use the first compiler that is installed

COMPILERS="ecj-3.1 jikes javac"

Niektóre kompilatory nie wspierają wszystkich argumentów -target i -source. Dlatego każdy kompilator z powyższej listy jest sprawdzany pod kątem wspierania danego -source/-target. javac będzie działać we wszystkich przypadkach, więc jeżeli żaden kompilator z listy nie będzie spełniał wymagań, zostanie użyty Dlatego każdy kompilator z powyższej listy jest sprawdzany pod kątem wspierania danego -source/-target. javac będzie działać we wszystkich przypadkach, więc jeżeli żaden kompilator z listy nie będzie spełniał wymagań, zostanie użyty javac.

Więcej informacji n/t kompilatorów znajdziemy poniżej:

Nazwa Identyfikator Pakiet Opis
javac javac N/A Jest to domyślny kompilator, wchodzący w skład wszystkich JDK.
jikes jikes dev-java/jikes Jikes był początkowo tworzony przez IBM. Najśmieszniejsze jest to, że jest on ogólnie szybszy od javac. Należy jednak zauważyć, że jest on bardziej pedantyczny i będzie wyświetlał błędy w przypadkach, w których javac nie ma problemów. Dodatkowo, jikes nie wspiera Javy w wersji 1.5
Eclipse Compiler dla Java ecj-3.1 =dev-java/eclipse-ecj-3.1* ECJ jest kompilatorem używanym przez środowisko Eclipse. Zawiera on bardzo dużo udogodnień i jest w miarę szybki. Wspiera składnię Java 1.5

6.  Ustawianie domyślnej CLASSPATH

Ostrzeżenie: Opcje objaśnione w tym akapicie, nie powinny zostać stosowane pochopnie i być może zostaną usunięte w przyszłości. Nie polecamy ich używania, chociażby ze względu na to, że nasze projekty lub aplikacje w Java mogą doskonale zarządzać swoimi zmiennymi CLASSPATH. Jeżeli zdecydujemy się na ustawienie domyślnej wartości CLASSPATH, niektóre aplikacje mogą zachowywać się w nieprzewidziany sposób, ponieważ natrafią na znajdujące się w CLASSPATH nieznane klasy.

java-config możemy użyć zarówno do ustawienia systemowej CLASSPATH, jak i oddzielnej dla każdego użytkownika

Po pierwsze powinniśmy wylistować dostępne biblioteki Java zainstalowane w naszym systemie, które możemy włożyć do CLASSPATH. Poniżej znajduje się przykładowe wyjście programu:

Listing 6.1: Lista klas

# java-config --list-available-packages
[xerces-2] The next generation of high performance, fully compliant XML parsers in the Apache Xerces family (/usr/share/xerces-2/package.env)
[junit] Simple framework to write repeatable tests (/usr/share/junit/package.env)
[bsh] BeanShell: A small embeddable Java source interpreter (/usr/share/bsh/package.env)
[bcel] The Byte Code Engineering Library: analyze, create, manipulate Java class files (/usr/share/bcel/package.env)
[log4j] A low-overhead robust logging package for Java (/usr/share/log4j/package.env)
...

Znów, nazwy w nawiasach ([]) są identyfikatorem, który musimy wpisać w java-config --set-system-classpath tak jak pokazano poniżej:

Listing 6.2: Ustawianie ścieżek dla klas

# java-config --set-system-classpath log4j,xerces-2

Uwaga: Obecny katalog (.) nie będzie należał do systemowego classpath, katalog ten powinien zostać dodany przez systemowy profil logowania.

Teraz powinniśmy zaktualizować nasze środowisko, poprzez przelogowanie lub wykonanie polecenia source /etc/profile.

Jeśli chodzi o użytkowników, java-config --set-user-classpath stworzy ~/.gentoo/java-env-classpath, który powinien być teraz wczytywany przez plik konfiguracyjny powłoki.

Listing 6.3: Wczytywanie własnych classpath

if [[ -f "${HOME}/.gentoo/java-env-classpath" ]]; then
       source ${HOME}/.gentoo/java-env-classpath
   fi

Jeżeli bardzo chcemy zmienić systemową lub domyślną dla użytkownika classpath, możemy dodać coś takiego do pliku konfiguracyjnego powłoki (jednak dalej nie polecamy tego rozwiązania):

Listing 6.4: Ustawianie classpath

# export CLASSPATH="${CLASSPATH}:$(java-config --classpath log4j,xerces-2)"

7.  Wtyczki Java dla przeglądarek

Instalacja wtyczki

Wtyczkę Java dla naszej przeglądarki możemy zainstalować instalując wirtualną maszynę z flagą USE nsplugin.

Uwaga: Flaga nsplugin nie jest dostępna dla wszystkich architektur. Dostępność wtyczki sprawdzamy przed instalacją przez wydanie polecenia emerge -pv <java-vm>.

Portage pozwala na instalację kilku wersji wtyczki Java, jednak używana będzie tylko jedna, przeznaczona dla naszej przeglądarki. Listę dostępnych wtyczek możemy przejrzeć po wydaniu komendy:

Listing 7.1: Wyświetlanie listy dostępnych wtyczek

# eselect java-nsplugin list
  [1]   sun-jre-bin-1.5
  [2]   blackdown-jre-1.4.2

W tym przykładzie, za wtyczkę dla przeglądarki wybieramy sun-jre-bin.

Listing 7.2: Wybieranie wtyczki

# eselect java-nsplugin set sun-jre-bin-1.5

Musimy zweryfikować czy wybrana została prawidłowa wtyczka.

Listing 7.3: Weryfikacja wtyczki

# eselect java-nsplugin list
  [1]   sun-jre-bin-1.5  current
  [2]   blackdown-jre-1.4.2

W stronie Java.com możemy znaleźć również stronę weryfikującą zainstalowaną wtyczkę. Dodatkowo, gdy używamy przeglądarki bazującej na rozwiązaniach Mozilli, weryfikację możemy przeprowadzić poprzez wpisanie about:plugins w pasku adresu.

Wtyczki na komputerach z multilib

Jeśli używamy systemu zarówno z 64 jak i 32-bitowymi bibliotekami (dla przykładu, na architekturze AMD64), możemy użyć tylko 32-bitowej wersji wtyczki.

Aby używać 32-bitowej wtyczki należy zainstalować emul-linux-x86-java z aktywną flagą USE nsplugin.

Listing 7.4: Instalacja 32-bitowej wtyczki

# echo "app-emulation/emul-linux-x86-java nsplugin" >> /etc/portage/package.use
# emerge emul-linux-x86-java

Następnie sprawdzamy, które wtyczki są dostępne:

Listing 7.5: Wyświetlanie listy dostępnych wtyczek

# eselect java-nsplugin list
Available 32-bit Java browser plugins
  [1]   emul-linux-x86-java-1.4.2
  [2]   emul-linux-x86-java-1.5

Pomimo że należy wybrać przeglądarkę 32-bitową (jak na przykład mozilla-firefox-bin,) aby współdziałała z naszą 32-bitową wtyczką, wersja 64-bitowa przeglądarki konqueror używa JVM bezpośrednio więc możliwym jest korzystanie z wersji 64-bitowej blackdown z tą przeglądarką; dalsza konfiguracja nie jest konieczna.

Teraz wybierzmy odpowiednią wtyczkę dla naszej 32-bitowej przeglądarki.

Listing 7.6: Wybieranie wtyczek

# eselect java-nsplugin set 32bit emul-linux-x86-java-1.5

Powinniśmy zweryfikować czy zostały wybrane odpowiednie wtyczki:

Listing 7.7: Weryfikacja wtyczek

# eselect java-nsplugin list
Available 32-bit Java browser plugins
  [1]   emul-linux-x86-java-1.4.2
  [2]   emul-linux-x86-java-1.5  current

8.  Flagi USE których można użyć z Javą

Ustawianie flag USE

Aby uzyskać więcej informacji dotyczących flag USE, należy odwołać się do rozdziału opisującego flagi USE w Podręczniku Gentoo.

Flagi

  • Flaga java dodaje obsługę dla Javy w wielu programach
  • Flaga nsplugin dodaje obsługę java dla przeglądarek z rodziny Mozilli (włączając w to Firefox). Flaga ta jest niezbędna gdy zechcemy przeglądać aplikacje java w przeglądarce z tej rodziny.
  • Flaga source zainstaluje spakowane wersje kodów źródłowych pakietów. Jest to najczęściej używane w IDE do dołączenia kodów źródłowych do bibliotek, których używamy.
  • Flaga jce dodaje wsparcie dla silnika szyfrującego Java.
  • Dla pakietów Java, flaga doc instaluje po prostu dokumentację dla API używając javadoc.

9.  Dodatkowe zasoby

Zasoby poza siecią

  • Strona man java-config
  • java-config --help

Zasoby w sieci



Drukuj

Zaktualizowano 16 września 2009

Oryginalna wersja tego dokumentu została po raz ostatni zaktualizowana 15 listopada 2011. Jeśli chcesz pomóc w aktualizacji tego dokumentu do najnowszej wersji, skontaktuj się z Łukaszem Damentko, koordynatorem polskiego projektu tłumaczeń dokumentacji Gentoo.

Podsumowanie: Tekst o konfiguracji i pracy z Javą w Gentoo.

Joshua Nichols
Autor

Karl Trygve Kalleberg
Redaktor

Joshua Saddler
Redaktor

Robert Muchacki
Tłumacz

Donate to support our development efforts.

Copyright 2001-2012 Gentoo Foundation, Inc. Questions, Comments? Contact us.