궁극의 자바 이해를 위해 JDK 를 컴파일 해보자.
깃헙 리포지터리 jdk 에 친절하게 컴파일 방법이 나와 있다.
jdk/doc/building.md at master · openjdk/jdk (github.com)
소스는 아래 리포지터리의 브런치를 보면, tag 로 찾아볼 수 있다.
21버전이 최신이지만 웬지 최신의 길은 너무도 험난하니 17로 간다!
근데 설명서를 읽어보니 친절하게 17 같은 경우 openjdk/jdk17u 라는 이름으로 별도 리포가 있는거 같다.
openjdk/jdk17u: https://wiki.openjdk.org/display/JDKUpdates/JDK+17u (github.com)
좋아! 이걸 이용해 보자.
컴파일은 윈도우보다는 리눅스나 mac 을 권장한다고 한다.
wsl 에 ubuntu24.04 LTS 에서 해보자!
1. 시스템 패키지 업데이트
sudo apt update
sudo apt upgrade
2. 필수 패키지 설치
sudo apt-get install build-essential autoconf
3. boot jdk 설치
jdk 에도 많은 소스가 java 로 되어있어서 보통 직전 jdk 버전을 설치해야 하고 이를 boot jdk 라고 한다.
최신이 아니므로 우린 동일버전으로 설치 한다.
sudo apt-get install openjdk-17-jdk
4. 추가 라이브러리 설치
귀찮으니 -y 모두 추가 !!
sudo apt-get install libfreetype6-dev -y
sudo apt-get install libfontconfig-dev -y
sudo apt-get install libcups2-dev -y
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev -y
sudo apt-get install libasound2-dev -y
sudo apt-get install libffi-dev -y
5. 빌드 툴 추가
autoconf, make, bash 필요 ( 기본이라 이것들은 설치 않함 )
sudo apt-get install autoconf -y
6. 소스 가져오기
이제 주인공 두두둥장
git clone https://github.com/openjdk/jdk17u
7. configure 실행
엄청나게 많은 옵션이 있어서 겁을주니 예제에 나온거만 실행해보자.
bash configure --enable-debug --with-jvm-variants=server --enable-dtrace
** 오류 조치
여기서 나같은 경우엔 zip, unzip 이 없어서 오류 났다 unzip 설치후 재시도!
sudo apt install zip unzip -y
bootjdk를 못찾으니 설정파일도 export
export BOOT_JDK=/usr/lib/jvm/java-17-openjdk-amd64
하지만 실패 ㅡㅜ
wsl 에서는 윈도우용 cl.exe 를 찾아서 컴파일 하려고 하는데 cpu mismatching 이 일어난다 ㅠㅠㅠㅠㅠㅠㅠ
슬픔을 딛고, rocky linux 8 을 설치한 서버에서 다시 시도 해본다!
동일한 과정이지만 패키지 설치에는 dnf 를 이용하면 된다.
서버에서는 옵션이 안먹어서 빼고 실행하고 드디어 configure 성공!
bash configure --enable-debug
성공하면 사양이 출력된다.
이제 실제 make 시작!
make
그리고 전체 컴파일 make image
완료되면 아래와 같이, 소스 밑에 build/{설정이름}/jdk/에 저장되어 있다.
jdk17u/build/linux-x86_64-server-fastdebug/jdk/bin/java 파일 을 버전 찍어 봤다!
굳! 컴파일 완료!!
역시 크로스 컴파일 또는 wsl 로 하는건 한계가 있는거 같다 =ㅅ= 다음엔 ubuntu 를 역시 직접 깔아서 써야 겠다.