Java: OpenJDK 빌드 환경 셋업
JavaOne 2010에서 Oracle은 OpenJDK 프로젝트를 계속적으로 지원할 것을 천명하였다. OpenJDK는 Java SE SDK의 오픈소스 프로젝트로 앞으로 출시될 JDK 7도 OpenJDK 프로젝트를 통해 개발이 이루어지고 있다.
OpenJDK 프로젝트를 이용하여 새로이 나올 JDK 버전의 기능을 미리 확인해 볼수도 있고 내부 코드의 구현 방법을 살펴보면서 Java 프로그래밍 능력을 향상시키는 기회로 삼을 수도 있을 것이다. 더 나아가 Java 발전에 직접 기여하는 뜻깊은 일을 해볼 수 있을지도 모른다.
이 글에서는 OpenJDK를 Windows XP 환경에서 빌드하는 방법에 대해 설명해보고자 한다.
1. Tools
Windows에서 OpenJDK를 빌드하기 위해서 Cygwin이 필요하다. Cygwin 설치 시 다음과 같은 package들을 설치하도록 한다.
OpenJDK workspace를 clone하기 위해서는 Mercurial에 Forest라는 extension이 필요하다.
2. Mercurial source repository
.hgrc 파일에 아래와 같은 내용을 추가한다.
hg showconfig 명령어를 실행하면 최소한 아래와 같은 항목들이 보여져야 한다.
corba
hotspot
jaxp
jaxws
jdk
langtools
make
test
OpenJDK에서 소스로 공개되지 않은 부분도 있기 때문에 빌드를 위해 binary plugs를 다운로드 받아 설치해야 한다.
http://download.java.net/openjdk/jdk7/
위 페이지에서 자신의 개발환경에 맞는 binary plugs를 다운로드 받아 아래와 같이 실행한다.
3. Build Tools
C/C++ 컴파일러는 Microsoft의 Visual C++ 10 Professional 혹은 Visual C++ 10 Express 버전을 사용하면 된다. 단, Visual C++ 10 Express 버전의 경우 Rc.exe와 mt.exe가 제공이 안되는 문제가 있다. 이를 해결하기 위해서는 Microsoft Windows 7 SDK를 설치한 후 Microsoft SDKs\Windows\v7.0\Bin 폴더에 있는 Rc.exe, RcDll.dll, mt.exe 파일을 Microsoft Visual Studio 10.0\VC\bin 폴더로 복사하여 준다. Java 컴파일러의 경우는 JDK 1.6 버전을 설치하여 사용하면 된다.
Java 빌드를 위해 ANT 최신 버전을 다운로드 받아 설치한다. ANT_HOME은 아래 4번 항목에서 설명하듯이 .bash_profile에 환경변수로 설정해주면 된다.
Microsoft DirectX 9.0 SDK Update 버전을 설치한다. 되도록이면 d:/dxsdk9과 같이 경로에 공백 문자가 들어가지 않는 곳에 설치하도록 하자. DXSDK의 경우도 아래 4번 항목의 ALT_DXSDK_PATH와 같이 환경변수로 위치를 설정해주어야 한다.
FreeType 2.3.5 binary 파일을 다운로드 받아 압축을 푼다. FreeType의 DLL은 Zlib1.dll에 dependency가 있기 때문에 Zlib 홈페이지에서 DLL 파일을 다운로드 받아야 한다. FreeType의 bin 폴더에 있는 freetype6.dll 파일과 Zlib의 zlib1.dll 파일을 Windows의 system32와 같이 DLL 검색 경로에 복사한다. freetype6.dll 파일을 FreeType 압축을 해지한 폴더의 lib 폴더에 복사하고 이름을 freetype.dll로 변경해준다. (OpenJDK 빌드 과정에 해당 위치에서 이 파일을 찾는 과정이 있어서 그렇다.) 역시나 아래 4번 항목의 설명과 같이 FreeType의 헤더와 라이브러리 위치를 환경변수에 설정해주어야 한다.
4. Environment Variables
Cygwin 폴더에 있는 cygwin.bat 파일에
Cygwin bash shell의 home 디렉토리에 .bash_profile 파일을 열어 아래와 같은 내용을 추가하도록 한다.
5. OpenJDK Build
한글 Windows에서 빌드하는 경우 javac의 encoding 문제로 인해 corba project를 빌드하다가 오류가 발생한다. - "unmappable character for encoding ascii"
이 문제를 해결하기 위해서는 corba\make\common\shared에 있는 Defs-java.gmk 파일을 아래와 같이 수정한다.
이제 실제 빌드를 위해 아래와 같이 명령을 실행한다.
한번 빌드가 이루어진 후에는 ALLOW_DOWNLOADS=true 인자는 다시 지정할 필요가 없다. 이 인자를 지정하면 서버에서 jaxp와 jaxws에 대한 소스 코드를 다운로드 받는다.
6. Testing
빌드가 완료되면 build\windows-i586\bin 폴더에 java.exe, javac.exe등의 파일들이 생성되어진다. javac -version으로 실행해보면 javac 1.7.0-internal와 같이 출력된다.
7. What's Next
JDK 7 개발을 바로 바로 빌드해서 테스트 할 수 있는 환경이 마련되었다. 이제 부터 해보고 싶은 것들은 다음과 같다.
참고자료:
OpenJDK 프로젝트를 이용하여 새로이 나올 JDK 버전의 기능을 미리 확인해 볼수도 있고 내부 코드의 구현 방법을 살펴보면서 Java 프로그래밍 능력을 향상시키는 기회로 삼을 수도 있을 것이다. 더 나아가 Java 발전에 직접 기여하는 뜻깊은 일을 해볼 수 있을지도 모른다.
이 글에서는 OpenJDK를 Windows XP 환경에서 빌드하는 방법에 대해 설명해보고자 한다.
1. Tools
Windows에서 OpenJDK를 빌드하기 위해서 Cygwin이 필요하다. Cygwin 설치 시 다음과 같은 package들을 설치하도록 한다.
- binutils - GNU assembler, linker, binary utilities
- make - GNU make
- m4 - UNIX macro processor (GNU version)
- cpio - Manage archive of files
- awk - Text processing language
- file - File type check
- zip - zip utility
- unzip - unzip utility
- procps - Get free and used memory space of system
- mercurial
OpenJDK workspace를 clone하기 위해서는 Mercurial에 Forest라는 extension이 필요하다.
hg clone http://bitbucket.org/pmezard/hgforest-crew
위와 같은 명령을 cygwin shell에서 실행하여 forest.py 파일을 받는다. 이 파일을 어딘가 원하는 위치에 복사한 후 shell의 home directory에 아래와 같은 내용의 .hgrc 파일을 생성한다. (cygwin shell에서 cd ~ 명령어를 수행하면 자신의 home directory로 이동한다.)[extensions]
forest=~/forest.py # home 디렉토리에 forest.py 파일을 복사해두었다.
fetch=
이제 shell에서 hg 명령어를 실행하면 basic commands 목록에 fclone, fpush, fpull 등과 같은 명령어들이 보일 것이다. 2. Mercurial source repository
.hgrc 파일에 아래와 같은 내용을 추가한다.
[ui]
username=testname
username 항목에 자신의 실명을 나타내는 영문이름을 기입한다. 혹시, OpenJDK에 patch를 제공하게 되는 경우 이 이름이 Mercurial repository의 log에 기록되어진다. hg showconfig 명령어를 실행하면 최소한 아래와 같은 항목들이 보여져야 한다.
extensions.forest=~/forest.py extensions.fetch= ui.username=testname모든것이 준비되었다면 JDK7의 소스를 clone해보도록 하자.
mkdir jdk7 cd jdk7 hg fclone http://hg.openjdk.java.net/jdk7/tl mytl위 명령여는 tl 프로젝트의 전체 forest를 얻어오는 것이다. tl 프로젝트는 JDK7의 Tools, Libraries API를 구현하는 프로젝트로 대부분의 core libraries 개발이 이루어지는 프로젝트이다. 정상적으로 clone이 되었다면 아래와 같은 폴더 목록이 만들어진다.
corba
hotspot
jaxp
jaxws
jdk
langtools
make
test
OpenJDK에서 소스로 공개되지 않은 부분도 있기 때문에 빌드를 위해 binary plugs를 다운로드 받아 설치해야 한다.
http://download.java.net/openjdk/jdk7/
위 페이지에서 자신의 개발환경에 맞는 binary plugs를 다운로드 받아 아래와 같이 실행한다.
java -jar jdk-7-ea-plug-bnn-os-arch-dd_month_year.jar설치할 위치를 묻는 대화상자에서 적당한 폴더를 고른다. 이 위치는 아래 4번 항목에서 설명하듯이 ALT_BINARY_PLUGS 환경변수에 지정해주어야 한다.
3. Build Tools
C/C++ 컴파일러는 Microsoft의 Visual C++ 10 Professional 혹은 Visual C++ 10 Express 버전을 사용하면 된다. 단, Visual C++ 10 Express 버전의 경우 Rc.exe와 mt.exe가 제공이 안되는 문제가 있다. 이를 해결하기 위해서는 Microsoft Windows 7 SDK를 설치한 후 Microsoft SDKs\Windows\v7.0\Bin 폴더에 있는 Rc.exe, RcDll.dll, mt.exe 파일을 Microsoft Visual Studio 10.0\VC\bin 폴더로 복사하여 준다. Java 컴파일러의 경우는 JDK 1.6 버전을 설치하여 사용하면 된다.
Java 빌드를 위해 ANT 최신 버전을 다운로드 받아 설치한다. ANT_HOME은 아래 4번 항목에서 설명하듯이 .bash_profile에 환경변수로 설정해주면 된다.
Microsoft DirectX 9.0 SDK Update 버전을 설치한다. 되도록이면 d:/dxsdk9과 같이 경로에 공백 문자가 들어가지 않는 곳에 설치하도록 하자. DXSDK의 경우도 아래 4번 항목의 ALT_DXSDK_PATH와 같이 환경변수로 위치를 설정해주어야 한다.
FreeType 2.3.5 binary 파일을 다운로드 받아 압축을 푼다. FreeType의 DLL은 Zlib1.dll에 dependency가 있기 때문에 Zlib 홈페이지에서 DLL 파일을 다운로드 받아야 한다. FreeType의 bin 폴더에 있는 freetype6.dll 파일과 Zlib의 zlib1.dll 파일을 Windows의 system32와 같이 DLL 검색 경로에 복사한다. freetype6.dll 파일을 FreeType 압축을 해지한 폴더의 lib 폴더에 복사하고 이름을 freetype.dll로 변경해준다. (OpenJDK 빌드 과정에 해당 위치에서 이 파일을 찾는 과정이 있어서 그렇다.) 역시나 아래 4번 항목의 설명과 같이 FreeType의 헤더와 라이브러리 위치를 환경변수에 설정해주어야 한다.
4. Environment Variables
Cygwin 폴더에 있는 cygwin.bat 파일에
call "C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat"위와 같은 라인을 추가하여 Visual C++ 10의 환경설정이 이루어지도록 한다.
Cygwin bash shell의 home 디렉토리에 .bash_profile 파일을 열어 아래와 같은 내용을 추가하도록 한다.
export ALT_BOOTDIR=c:/jdk1.6.0_13 export ALT_BINARY_PLUGS_PATH=/open_source/jdk7/binplugs export ALT_DXSDK_PATH=/cygdrive/c/dxsdk9 export ANT_HOME=/cygdrive/c/apache-ant-1.7.1 export ALT_FREETYPE_HEADERS_PATH=d:/open_source/jdk7/freetype/include export ALT_FREETYPE_LIB_PATH=d:/open_source/jdk7/freetype/lib물론, 각 경로는 자신의 시스템의 사항에 맞추어 변경하여 지정한다. 파일을 저장 후 Cygwin의 bash shell을 다시 시작한다.
5. OpenJDK Build
한글 Windows에서 빌드하는 경우 javac의 encoding 문제로 인해 corba project를 빌드하다가 오류가 발생한다. - "unmappable character for encoding ascii"
이 문제를 해결하기 위해서는 corba\make\common\shared에 있는 Defs-java.gmk 파일을 아래와 같이 수정한다.
JAVACFLAGS += -encoding ascii ==> JAVACFLAGS += -encoding ms949이제 모든 설정이 완료되었으므로 빌드 환경에 문제가 없는지 확인해보자. jdk7 소스의 루트 폴더에서 아래와 같이 실행한다.
make sanity문제가 없다면 Error 메시지 없이 완료되고 build\windows-i586 폴더에 sanityCheckMessages.txt라는 파일이 생성될 것이다. 만일, 에러 메시지가 출력되었다면 메시지를 살펴보면 에러의 원인을 파악할 수 있다.
이제 실제 빌드를 위해 아래와 같이 명령을 실행한다.
make ALLOW_DOWNLOADS=true USERNAME=wonkim위 명령어에서 USERNAME 인자는 echo $USERNAME을 실행해본 후 사용자 이름이 공백문자열이 없는 영어로 출력이 된다면 굳이 지정할 필요는 없다. (빌드 과정에 네트워크에 접속하여 소스 파일을 다운로드 받는 과정이 있으므로 반드시 네트워크 연결이 이루어진 상태에서 빌드한다.)
한번 빌드가 이루어진 후에는 ALLOW_DOWNLOADS=true 인자는 다시 지정할 필요가 없다. 이 인자를 지정하면 서버에서 jaxp와 jaxws에 대한 소스 코드를 다운로드 받는다.
6. Testing
빌드가 완료되면 build\windows-i586\bin 폴더에 java.exe, javac.exe등의 파일들이 생성되어진다. javac -version으로 실행해보면 javac 1.7.0-internal와 같이 출력된다.
7. What's Next
JDK 7 개발을 바로 바로 빌드해서 테스트 할 수 있는 환경이 마련되었다. 이제 부터 해보고 싶은 것들은 다음과 같다.
- NetBeans, Eclipse와 같은 IDE와 연동해서 JDK 7 프로그램 개발 환경 만들기
- JDK 7의 새로운 기능들에 대해 sample code 작성 및 테스트
- OpenJDK 프로젝트 중 흥미로운 것을 골라 직접 참여해보기
참고자료:
댓글
댓글 쓰기