Java w Gentoo
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 rejstracji.
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śby normlanie
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żywajac
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]
2) Blackdown JRE 1.4.2.03 [blackdown-jre-1.4.2]
3) Blackdown 32bit JRE 1.4.2.03 [emul-linux-x86-java-1.4.2]
4) Sun 32bit JRE 1.5.0.08 [emul-linux-x86-java-1.5]
5) Kaffe 1.1.7 [kaffe]
*) Sun JDK 1.5.0.08 [sun-jdk-1.5]
|
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 |
# java-config --set-system-vm blackdown-jdk-1.4
Now using blackdown-jdk-1.4 as your generation-2 system JVM
# 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.
|
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 |
*=sun-jdk
|
Listing 4.4: Przykład /etc/java-config-2/build/jdk.conf |
*=sun-jdk-1.5
|
Listing 4.5: Przykład /etc/java-config-2/build/jdk.conf |
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
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ą dosokonale 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 zauktualizować 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ż strone weryfikującą zainstalowaną
wtyczkę. Dodatkowo, gdy używamy przelą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ć sie 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
Zawartość tego dokumentu jest rozpowszechniana na podstawie licencji Creative Commons -
Attribution / Share Alike.
|