Bringen Sie Ihnen wirklich Hand in Hand bei, JDK von Grund auf zu kompilieren

Menschen, die JAVA als Entwicklungstool verwenden, sind mit JDK nicht unbekannt und verwenden
es fast täglich. Wie viele von ihnen haben JDK tatsächlich kompiliert?
Es wird geschätzt, dass es nur sehr wenige gibt
, aber wir können oft auf einige Probleme stoßen. Das Phänomen ist seltsam und schwer zu definieren, aber wenn wir im JDK einige Tricks anwenden können, wird das Problem möglicherweise gelöst

In diesem Artikel erfahren Sie, wie Sie ein JDK kompilieren.
Lesen Sie es nicht nur, Sie müssen es selbst tun

Umweltvorbereitung

Die von mir verwendete Umgebung ist Centos7.6, installiert auf einer virtuellen Maschine, einem reinen System, es wird nichts anderes installiert

Anleitung ansehen

Dies ist die Build-Beschreibung von openjdk8. Später werde ich die Screenshots wichtiger Teile herausnehmen und sie kurz erklären
http://hg.openjdk.java.net/jdk8u/jdk8u/raw-file/tip/README-builds.html

Laut Anleitung
Fügen Sie hier eine Bildbeschreibung ein
besteht der Befehl aus zwei Schritten

bash ./configure
make all

Einige Umgebungen sind jedoch
Fügen Sie hier eine Bildbeschreibung ein
erforderlich, um die Make-Version vorzubereiten. Sie muss größer als 3.8.1 sein. Überprüfen Sie es selbst. Centos 7.6 und höher müssen die Anforderungen
Fügen Sie hier eine Bildbeschreibung ein
für ein Bootstrap-JDK erfüllen. 7 ist erforderlich und 8 kann nicht verwendet werden. Sie benötigen um den Bin zum Pfad hinzuzufügen. Auf diese Weise müssen keine Parameter konfiguriert werden.
Laden Sie jdk7,
jdk-7u80-linux-x64.tar.gz in Form von tar herunter
, um es zu dekomprimieren

tar zxvf jdk-7u80-linux-x64.tar.gz

Notieren Sie sich den Speicherort von Java
/home/jdk/jdk1.7.0_80/bin
und machen Sie sich keine Gedanken über das Hinzufügen des Pfads. Verwenden Sie beim späteren Kompilieren einfach einen temporären Pfad

Es gibt eine Sache, auf die Sie achten sollten:
Wenn die Umgebungsvariable JAVA_HOME enthält, entfernen Sie es
Fügen Sie hier eine Bildbeschreibung ein

Komponenten installieren

Komponenten anzeigen Sie müssen nach
Fügen Sie hier eine Bildbeschreibung ein
diesen vier Komponenten
suchen

yum search alsa freetype cups xrender

Wählen Sie ein zu installierendes Teil aus

yum install alsa-lib alsa-lib-devel freetype-devel freetype cups cups-devel libXrender libXrender-devel

Es gibt viele Tutorials, in denen die Installation von ant empfohlen wird
, aber tatsächlich wird ant nicht mehr benötigt

Ant wird beim Erstellen des OpenJDK nicht mehr verwendet

Habe die richtige Version installiert

Fügen Sie hier eine Bildbeschreibung ein
Fügen Sie hier eine Bildbeschreibung ein
Wenn es höher als die erforderliche Version ist,
kann Centos7.6 die Anforderungen durch Yum-Installation erfüllen

Andere Komponenten installieren
Fügen Sie hier eine Bildbeschreibung ein
Hier wurde bereits viel gesagt. Installieren Sie einfach Folgendes

yum groupinstall "Development Tools"
yum install libXi libXi-devel libXtst-devel libXt-devel

Ressourcen herunterladen

Installieren Sie mercurial
, laden Sie dann das Ressourcenerfassungsprojekt der Quelldatei herunter (ähnlich einem Klonbefehl von Git, der einige kompilierte Konfigurations- und Ressourcenerfassungsdateien enthält, die klein sind und nach dem Klonen große Ressourcen erhalten) und geben Sie dann ein
Verzeichnis

yum install mercurial
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u60 jdk8u60
cd jdk8u60
bash ./get_source.sh

Dann kochen Sie etwas Tee und warten Sie

Dabei kann es leicht passieren, dass man scheitert

Wenn Sie eine solche Aufforderung finden

WARNUNG: Jaxws wurde abnormal beendet (255)
WARNUNG: JDK wurde abnormal beendet (255)

Führen Sie dann get_source erneut aus.
Es werden nur einige Komponenten heruntergeladen, die nicht erfolgreich waren, und diejenigen, die erfolgreich heruntergeladen wurden, werden nicht erneut heruntergeladen.

Wenn Sie längere Zeit stecken bleiben und keine Bewegung stattfindet, überprüfen Sie die Bandbreitennutzung. Wenn nichts vorhanden ist,
verwenden Sie sie

ps aux|grep clone

Beenden Sie den Python-Klonprozess und
get_source schlägt fehl.
Löschen Sie dann die fehlerhaften Verzeichnisse und
führen Sie get_source erneut aus. Dieser Teil kann
viele Male wiederholt werden. Ich habe ihn mindestens 4 oder 5 Mal wiederholt. Die Jaxws und JDK können nicht
heruntergeladen werden. Schließlich habe ich aufgegeben. Ich kann JDK nicht herunterladen.
Rufen Sie einfach mit der auf der Konsole aufgedruckten Klonadresse den Browser auf, laden Sie
das ZIP-Paket herunter und entpacken Sie es. Es
wird bald heruntergeladen und ich werde es vorher noch einmal versuchen Ich bin ein Idiot, weil ich es so oft versucht habe

Kompilieren ausführen

Fügen Sie vor der Ausführung Bootstrap JDK zur Umgebungsvariablen hinzu und lesen Sie
viele Beiträge im Internet. In diesem Schritt werden viele Parameter zur Konfiguration hinzugefügt, z. B. der Pfad von Bootstrap JDK, der Pfad von alsa usw. Tatsächlich, wenn Die Abhängigkeiten von alsa werden über yum installiert und das bin-Verzeichnis von Bootstrap JDK wird zum Pfad hinzugefügt, diese müssen nicht hinzugefügt werden

export PATH=/home/jdk/jdk1.7.0_80/bin:$PATH
java -version
bash ./configure --enable-debug --with-target-bits=64

Fügen Sie hier eine Bildbeschreibung ein
Auf diese Weise ist die Konfiguration in Ordnung. Der am Ende angeforderte Ccache kann ignoriert werden. Es handelt sich um eine Sache zur Kompilierungsbeschleunigung. Es spielt keine Rolle, ob Sie es nicht haben. Und selbst wenn Sie es installieren, werden Sie es finden dass du es bei yum nicht finden kannst.

OK, führen Sie den letzten Schritt gemäß den Anweisungen auf der offiziellen Website aus

make all

Nach langem Warten
tauchten in der Mitte unzählige Warnungen auf, die die Leute sehr verunsicherten.
Fügen Sie hier eine Bildbeschreibung ein
Die Zusammenstellung ist vollständig.

Ist es hier drüben? natürlich nicht

Wir werden es das nächste Mal verwenden

Verwenden Sie Ihr eigenes kompiliertes JDK

In den folgenden Bildern wird das Paket
j2sdk-image: JDK
j2re-image: JRE
in JDK importiert, um zu sehen, ob die Verzeichnisstruktur sehr vertraut ist

Verwenden wir den Befehl cp, um das JDK-Verzeichnis wegzukopieren

cp -r /home/jdk/jdk8u60/build/linux-x86_64-normal-server-fastdebug/images/j2sdk-image /home/jdk/openjdk-8u60-make

Version prüfen

/home/jdk/openjdk-8u60-make/bin/java -version

openjdk-Version „1.8.0-internal-fastdebug“
OpenJDK-Laufzeitumgebung (Build 1.8.0-internal-fastdebug-root_2020_03_22_10_01-b00)
OpenJDK 64-Bit-Server-VM (Build 25.60-b23-fastdebug, gemischter Modus)

Lassen Sie uns als Nächstes überprüfen
, ob es komplizierter ist, eine Java-Implementierung zu finden. Ich wähle Metabase,
um das JAR von der offiziellen Website von Metabase herunterzuladen, auszuführen
und eine run.sh zu schreiben

export MB_DB_TYPE=mysql
export MB_DB_DBNAME=metabase
export MB_DB_PORT=3306
export MB_DB_USER=账号
export MB_DB_PASS=密码
export MB_DB_HOST=mysql所在机器
/home/jdk/openjdk-8u60-make/bin/java -jar metabase.jar


Mitten in der Ausführung kommt es zu einer Episode. Als die Metabasis schließlich die Datenbankverbindung initialisiert, schlägt sie fehl. Es wird eine Eingabeaufforderung angezeigt

Zeitüberschreitung nach 5,0 s

Dieses Problem ist so ärgerlich, dass es nicht gelöst wurde. Es funktioniert nicht, wenn Sie die Firewall ausschalten, und es funktioniert nicht, wenn Sie zum JDK von Oracle wechseln. Es scheint, dass ich beim Erstellen etwas falsch mit dem Netzwerk eingestellt habe Die virtuelle Maschine. Legen wir es beiseite
. Laut dem ausgeführten Protokoll kann das kompilierte JDK reibungslos laufen
Fügen Sie hier eine Bildbeschreibung ein

Herzlichen Glückwunsch, bisher ist die Zusammenstellung endlich gelungen
und kann gepackt und verwendet werden

Willkommen, um auf das offizielle Konto zu achten, zu kommunizieren und gemeinsam Fortschritte zu machen
Willkommen, um auf das offizielle Konto zu achten, zu kommunizieren und gemeinsam Fortschritte zu machen

Acho que você gosta

Origin blog.csdn.net/cowcomic/article/details/105013251
Recomendado
Clasificación