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
besteht der Befehl aus zwei Schritten
bash ./configure
make all
Einige Umgebungen sind jedoch
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ü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
Komponenten installieren
Komponenten anzeigen Sie müssen nach
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
Wenn es höher als die erforderliche Version ist,
kann Centos7.6 die Anforderungen durch Yum-Installation erfüllen
Andere Komponenten installieren
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
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.
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
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