Introduksjon til OpenJDK
OpenJDK er en åpen kildekode
implementering av Oracles Java Standard Edition plattform.
OpenJDK er nyttig for utvikling av
Java programmer, og gir en
komplett kjøretidsmiljø å kjøre Java programmer.
Notat
Utviklingsversjoner av BLFS kan ikke bygge eller kjøre noen
pakker riktig hvis LFS eller avhengigheter har blitt oppdatert
siden den siste stabile versjonene av bøkene.
OpenJDK er GPL kode, med et spesielt unntak laget for ikke-gratis
prosjekter for å bruke disse klassene i sine proprietære produkter.
På samme måte som LGPL, som lar ikke-gratis programmer koble til
biblioteker levert av gratis programvare GNU General Public
License, version 2, with the Classpath Exception tillater
tredjepartsprogrammer å bruke klasser levert av gratis programvare
uten krav om at tredjepartsprogramvaren også skal være gratis. Som
med LGPL, eventuelle endringer som er gjort i de gratis
programvaredelene av en tredjepartsapplikasjon, må også gjøres
fritt tilgjengelig.
Notat
OpenJDK kilde inkluderer en
veldig grundig, åpen kildekode testpakke ved hjelp av
JTreg testpakken.
Testinstruksjonene nedenfor tillater testing av den nettopp bygde
JDK for rimelig kompatibilitet med den proprietære Oracle JDK.
Men for en uavhengig implementering for å kreve kompatibilitet,
må den passere en proprietær JCK/TCK testpakke. Ingen påstander om
kompatibilitet, eller til og med delvis kompatibilitet, kan
gjøres uten å ha bestått en godkjent testpakke.
Oracle gir gratis tilgang til fellesskapet, fra sak til sak, et
lukket verktøysett for å sikre 100 % kompatibilitet med sin
proprietære JDK. Verken den binære versjonen som er gitt på
Java-22.0.2 siden heller ikke JVM bygget med
instruksjonene nedenfor har blitt testet mot
TCK. Enhver versjon som er bygget etter instruksjonene som er
gitt, kan ikke hevde å være kompatibel med den proprietære JDK,
uten at bruker selv søker om og fullfører kompatibilitetstestene.
Med det i tankene er binærfilene produsert ved hjelp av denne
byggemetoden regelmessig testet mot TCK av medlemmene som er
oppført på nettstedet ovenfor. I tillegg til fellesskapslisensen
ovenfor, en pedagogisk, ikke-kommersiell lisens for TCK kan fås
her.
Pakkeinformasjon
-
Nedlasting (HTTP):
https://github.com/openjdk/jdk22u/archive/jdk-22.0.2-ga.tar.gz
-
Nedlasting MD5 sum: 13b4e71252055e6d78ae12b8db5021d4
-
Nedlastingsstørrelse: 107 MB
-
Estimert diskplass som kreves: 3.7 GB (legg til 621 MB for
tester)
-
Estimert byggetid: 5.2 SBU med 4 jobber (legg til 38 SBU for
tester med 4 jobber)
Ytterligere Nedlastinger
Valgfri testpakke
OpenJDK Avhengigheter
Påkrevde Avhengigheter
En eksisterende binær (Java-22.0.2 eller en tidligere bygget versjon av
denne pakken. Instruksjonene nedenfor forutsetter at du bruker
Konfigurering av Java miljøet),
alsa-lib-1.2.12, cpio-2.15, Cups-2.4.10, UnZip-6.0, Which-2.21, Xorg Biblioteker, og
Zip-3.0
Anbefalt
make-ca-1.14, giflib-5.2.2, harfBuzz-10.0.1,
Little
CMS-2.16, libjpeg-turbo-3.0.1, libpng-1.6.44, og
Wget-1.24.5
Valgfri
git-2.46.2,
Graphviz-12.1.2, Mercurial-6.8.1,
ccache, pandoc, og pigz
Installasjon av OpenJDK
Hvis du har lastet ned den valgfrie testpakken, pakk den ut nå:
tar -xf ../jtreg-7.3.1+1.tar.gz
Notat
Før du fortsetter, bør du sørge for at miljøet ditt PATH
variabelen inneholder plasseringen til Java
kompilatoren som brukes til bootstrapping OpenJDK. Dette er det eneste kravet til
miljøet. Moderne Java installasjoner trenger ikke JAVA_HOME
og CLASSPATH
brukes ikke her. Videre, OpenJDK utviklere anbefaler deaktivering
av JAVA_HOME
.
Byggesystemet tillater ikke -j
bryteren i MAKEFLAGS
. Se
kommandoforklaringen for --with-jobs=
for mer informasjon om tilpasning av parallellisering.
Konfigurer og bygg pakken med følgende kommandoer:
unset JAVA_HOME &&
bash configure --enable-unlimited-crypto \
--disable-warnings-as-errors \
--with-stdc++lib=dynamic \
--with-giflib=system \
--with-harfbuzz=system \
--with-jtreg=$PWD/jtreg \
--with-lcms=system \
--with-libjpeg=system \
--with-libpng=system \
--with-zlib=system \
--with-version-build="9" \
--with-version-pre="" \
--with-version-opt="" \
--with-cacerts-file=/etc/pki/tls/java/cacerts &&
make images
For å teste resultatene, må du kjøre jtreg programmet. Du kan angi
antall samtidige tester ved å legge til -conc:<X>
verdi i
kommandoen nedenfor (tester vil kjøre sekvensielt ellers):
export JT_JAVA=$(echo $PWD/build/*/jdk) &&
jtreg/bin/jtreg -jdk:$JT_JAVA -automatic -ignore:quiet -v1 \
test/jdk:tier1 test/langtools:tier1 &&
unset JT_JAVA
For mer kontroll over testpakken, se gjennom dokumentasjonen
tilgjengelig i jtreg/doc/jtreg/usage.txt
. For å gjennomgå
resultatene, se filene JTreport/test_{jdk,langtools}/text/stats.txt
og
JTreport/test_{jdk,langtools}/text/summary.txt
.
Du bør forvente å se rundt 60 mislykket og 10 feil.
Installer pakken med følgende kommandoer som root
bruker:
install -vdm755 /opt/jdk-22.0.2+9 &&
cp -Rv build/*/images/jdk/* /opt/jdk-22.0.2+9 &&
chown -R root:root /opt/jdk-22.0.2+9 &&
for s in 16 24 32 48; do
install -vDm644 src/java.desktop/unix/classes/sun/awt/X11/java-icon${s}.png \
/usr/share/icons/hicolor/${s}x${s}/apps/java.png
done
Notat
Hvis du bare ønsker å installere Java Runtime Environment, kan du
erstatte build/*/images/jre
i
ovenstående cp
kommandoen.
Det er nå to OpenJDK SDKs
installert i /opt
. Du bør bestemme
deg for hvilken du vil bruke som standard. Normalt ville du valgt
den nettopp installerte OpenJDK.
Hvis ja, gjør følgende som root
bruker:
ln -v -nsf jdk-22.0.2+9 /opt/jdk
Om ønskelig kan du opprette .desktop filer for å legge til
oppføringer i menyen for java og jconsole. De nødvendige ikonene
har allerede blitt installert. Som root
bruker:
mkdir -pv /usr/share/applications &&
cat > /usr/share/applications/openjdk-java.desktop << "EOF" &&
[Desktop Entry]
Name=OpenJDK Java 22.0.2 Runtime
Comment=OpenJDK Java 22.0.2 Runtime
Exec=/opt/jdk/bin/java -jar
Terminal=false
Type=Application
Icon=java
MimeType=application/x-java-archive;application/java-archive;application/x-jar;
NoDisplay=true
EOF
cat > /usr/share/applications/openjdk-jconsole.desktop << "EOF"
[Desktop Entry]
Name=OpenJDK Java 22.0.2 Console
Comment=OpenJDK Java 22.0.2 Console
Keywords=java;console;monitoring
Exec=/opt/jdk/bin/jconsole
Terminal=false
Type=Application
Icon=java
Categories=Application;System;
EOF
Parameterforklaringer
bash configure...:
det øverste nivå configure
er en
innpakning rundt autotools. Den er ikke kjørbar og må kjøres
gjennom bash.
--enable-unlimited-crypto
:
På grunn av begrensninger på bruk av kryptografi i noen land, er
det en mulighet å begrense størrelsen på krypteringsnøkler og
bruken av noen algoritmer i en policyfil. Denne bryteren lar deg
sende en policyfil med ingen begrensning. Det er brukerens ansvar å
sørge for korrekt overholdelse av loven.
--disable-warnings-as-errors
: Denne
bryteren deaktiverer bruken av -Werror
i
bygget.
--with-stdc++lib=dynamic
:
Denne bryteren tvinger byggesystemet å koble til libstdc++.so
(dynamisk) i stedet for libstdc++.a
(statisk).
--with-jobs=<X>
: -j
passert å lage fungerer ikke med
make som påberopt her. Som standard vil byggesystemet bruke
antallet CPUer - 1.
--with-jtreg=$PWD/jtreg
:
Denne bryteren forteller configure hvor du finner jtreg. Utelat
hvis du ikke har lastet ned valgfri testpakke.
--with-{giflib,harfbuzz,lcms,libjpeg,libpng,zlib}=system
:
Disse bryterne tvinger byggesystemet å bruke systembibliotekene i
stedet for de medfølgende versjonene.
--with-version-build
:
Foreløpig, byggesystemet inkluderer ikke byggenummeret i
versjonsstrengen. Det kan spesifiseres her.
--with-version-pre
: Denne
bryteren lar deg prefikse versjonsstrengen med en egendefinert
streng.
--with-version-opt
: Denne
bryteren lar deg legge til en valgfri byggebeskrivelse til
versjonsstrengen.
--with-cacerts-file=/etc/pki/tls/java/cacerts
:
Angir hvor du finner en cacerts
fil,
/etc/pki/tls/java/
på et BLFS system.
Ellers blir en tom opprettet. Du kan bruke /usr/sbin/make-ca --force
kommando for å generere den når du har installert Java binærfilene.
--with-boot-jdk
: Denne bryteren gir
plassering av den midlertidige JDK. Den er normalt ikke nødvendig hvis
java finnes i
PATH
.
Konfigurere
OpenJDK
Konfigurasjonsinformasjon
Normalt er Java miljøet konfigurert etter installasjon av den
binære versjonen, og kan også brukes med den nettopp bygde
pakken. Gjennomgå Konfigurering av Java miljøet
i tilfelle du ønsker å endre noe.
For å teste om manualsidene er riktig installert, kjør
source /etc/profile
og man java for å
vise den respektive manualsiden.
Sette opp JRE Certificate Authority Certificates (cacerts) filen
Hvis du har kjørt instruksjonene på make-ca-1.14
siden, trenger du bare å lage en symbolkobling på
standardplasseringen for cacerts
filen. Som bruker root
:
ln -sfv /etc/pki/tls/java/cacerts /opt/jdk/lib/security/cacerts
For å sjekke installasjonen, kjør:
cd /opt/jdk
bin/keytool -list -cacerts
Ved ledeteksten Enter keystore
password:
, skriv changeit
(standard) eller bare
trykk på «Enter» tasten. Hvis cacerts
filen var installert riktig, vil du se
en liste over sertifikatene med relatert informasjon for hver
enkelt. Hvis ikke, må du installere dem på nytt.
Innhold
Installerte Programmer:
jar, jarsigner, java, javac, javadoc,
javap, jcmd, jconsole, jdb, jdeprscan, jdeps, jfr, jhsdb,
jimage, jinfo, jlink, jmap, jmod, jpackage, jps, jrunscript,
jshell, jstack, jstat, jstatd, jwebserver, keytool,
rmiregistry, og serialver
Installerte Biblioteker:
38 biblioteker i
/opt/jdk-22.0.2+9/lib/
Installerte Mapper:
/opt/jdk-22.0.2+9
Korte Beskrivelser
jar
|
kombinerer flere filer til et enkelt jar arkiv
|
jarsigner
|
signerer jar filer og verifiserer signaturene og
integriteten av en signert jar fil
|
java
|
starter en Java applikasjon ved å starte et Java
kjøretids miljø, laster en spesifisert klasse og påkaller
dens hoved metode
|
javac
|
leser klasse- og grensesnittdefinisjoner, skrevet i Java
programmeringsspråk, og kompilerer dem til bytekode
klassefiler
|
javadoc
|
analyserer erklæringene og dokumentasjonskommentarene i
en sett med Java kildefiler og produserer et tilsvarende
sett med HTML sider som beskriver klassene,
grensesnittene, konstruktsjonsmetoder, og felt
|
javap
|
demonterer en Java klassefil
|
jcmd
|
er et verktøy for å sende diagnostiske
kommandoforespørsler til en kjørende Java Virtual Machine
|
jconsole
|
er et grafisk konsollverktøy for å overvåke og
administrere både lokale og eksterne Java applikasjoner
og virtuelle maskiner
|
jdb
|
er en enkel kommandolinjefeilsøker for Java klasser
|
jdeprscan
|
skanner klasse- eller jar-filer for bruk av utdaterte API
elementer
|
jdeps
|
viser avhengighetene på pakkenivå eller klassenivå til
Java klassefiler
|
jfr
|
er et verktøy for å jobbe med «Flight
Recorder» filer
|
jhsdb
|
er et verktøy for å analysere innholdet i en kjernedump
fra en krasjet Java Virtual Machine (JVM)
|
jimage
|
brukes til å liste, trekke ut, bekrefte eller få
informasjon om moduler i jimage formatet
|
jinfo
|
skriver ut Java konfigurasjonsinformasjon for en gitt
Java prosess, kjernefil eller en ekstern
feilsøkingsserver
|
jlink
|
brukes til å sette sammen og optimalisere et sett med
moduler og deres avhengigheter inn i et tilpasset
kjøretidsbilde
|
jmap
|
skriver ut minnekart for delte objekter eller heap
minnedetaljer av en gitt prosess, kjernefil eller en
ekstern feilsøkingsserver
|
jmod
|
oppretter JMOD filer og viser innholdet i eksisterende
JMOD filer
|
jpackage
|
genererer java applikasjonspakker og bilder
|
jps
|
viser de instrumenterte JVM-ene på målsystemet
|
jrunscript
|
er et kommandolinjeskriptskall
|
jshell
|
er et interaktivt verktøy for å lære Java programmering
språk og prototyping av Java kode
|
jstack
|
skriver ut Java stabelspor av Java tråder for en gitt
Java prosess, kjernefil eller en ekstern
feilsøkingsserver
|
jstat
|
viser ytelsesstatistikk for en instrumentert JVM
|
jstatd
|
er en RMI-serverapplikasjon som overvåker opprettelsen og
terminering av instrumenterte JVM-er
|
jwebserver
|
gir en minimal HTTP server, designet for å brukes til
prototyping, testing og feilsøking
|
keytool
|
er et nøkkel- og sertifikatadministrasjonsverktøy
|
rmiregistry
|
oppretter og starter et eksternt objektregister på den
spesifiserte porten på gjeldende vert
|
serialver
|
returnerer serialVersionUID for en eller flere klasser i
en skjema egnet for kopiering til en klasse i utvikling
|