Ниже приведены шаги, которые я должен был сделать, чтобы это произошло. Я предполагаю, что на машине уже установлена Visual Studio 2010. У меня такое ощущение, что Express-версия должна работать просто отлично, но я не пробовал.
- Установите Cygwin. Убедитесь, что вы установили все перечисленные здесь пакеты, некоторые из них не установлены по умолчанию. На всякий случай, вот копия этой таблицы, но рекомендуется проверить с основным источником :
Двоичное имя категория пакет Описание ar.exe Devel Binutils GNU ассемблер, компоновщик и бинарные утилиты make.exe Devel делать Версия утилиты make для GNU, созданная для CYGWIN. m4.exe интерпретаторы m4 GNU реализация традиционного макропроцессора Unix cpio.exe Utils CPIO Программа для управления архивами файлов gawk.exe Utils AWK Шаблонно-ориентированный язык сканирования и обработки file.exe Utils файл Определяет тип файла, используя «магические» числа zip.exe Архив застежка-молния Упаковать и сжать (архивировать) файлы unzip.exe Архив расстегнуть молнию Извлечение сжатых файлов в ZIP-архив free.exe система Procps Отображение количества свободной и использованной памяти в системе Не забудьте добавить папку bin в cygwin в PATH.
- Установите Mercurial отсюда и добавьте ‘hg’ в PATH.
- Установите Microsoft Windows SDK для Windows 7 и .NET Framework 4 .
- Установите DirectX SDK . JDK требует v9.0, но я не мог найти это легко. Поэтому я решил не беспокоить и установил последнюю. Похоже, это работает просто отлично.
- Для сборки требуется Bootstrap JDK. Случилось так, что я использовал JDK6, но, предположим, любая версия> JDK6 будет работать без пробников.
- Скачайте и установите Ant . Я использовал версию 1.8.2. Добавьте муравья в ПУТЬ.
- Оформить заказ источников. По ряду причин это была самая сложная часть. ‘hg’ не особенно стабилен, поэтому некоторые вещи, которые должны быть выполнены в моих скриптах, должны были быть выполнены вручную.
Итак, для начала запустите это в командной строке:
1hg clone --verbose --pull http:
//hg.openjdk.java.net/jdk7u/jdk7u <some_folder>\openjdk7'
Это должно загрузить корневую папку с некоторыми вспомогательными скриптами.
Затем в cygwin перейдите в только что созданную папку «openjdk7» и запустите «get_source.sh». ‘get_source.sh’ может потерпеть неудачу или просто зависнуть (и это именно то, что случилось со мной). Если это так, то вы можете попытаться использовать флаг «–pull» (протокол извлечения метаданных). Я не совсем уверен, почему, но это помогло мне. К сожалению, сценарии написаны не очень дружелюбно, и невозможно передать какие-либо аргументы ‘hg’ в сценарий поиска источников. Поэтому вам нужно перейти к «make \ scripts \ hgforest.sh» и добавить «–pull» к каждому вызову «hg clone».
И если даже после добавления ‘-pull’ все равно не получится, ну … просто откажитесь и выполните эти команды вручную:
123456hg clone --verbose --pull http:
//hg.openjdk.java.net/jdk7u/jdk7u/corba corba
hg clone --verbose --pull http:
//hg.openjdk.java.net/jdk7u/jdk7u/hotspot hotspot
hg clone --verbose --pull http:
//hg.openjdk.java.net/jdk7u/jdk7u/jaxp jaxp
hg clone --verbose --pull http:
//hg.openjdk.java.net/jdk7u/jdk7u/jaxws jaxws
hg clone --verbose --pull http:
//hg.openjdk.java.net/jdk7u/jdk7u/jdk jdk
hg clone --verbose --pull http:
//hg.openjdk.java.net/jdk7u/jdk7u/langtools langtools
Надеюсь, теперь у вас есть источники и можете продолжить 🙂
- Для сборки требуется несколько внешних двоичных файлов и версия make.exe, которая работает под Windows. ‘make’, которая поставляется с cygwin, на самом деле не работает, потому что имеет некоторые проблемы с буквами дисков в именах путей.
Далее нам нужно скомпилировать пару файлов. Одна из них — фиксированная версия make.exe. Другой является библиотека FreeType, которая доступна только для загрузки в качестве источника.
Если вы не заинтересованы в компиляции всего этого и хотите просто скомпилировать JDK с меньшими трудностями, я бы порекомендовал скачать бинарные файлы отсюда (это мой диск). Распакуйте make.exe в openjdk7 / bin. Обратите внимание, что ‘make.exe’ из пакета довольно старый и требует cygintl-3.dll, который не поставляется с текущим cygwin. Чтобы это исправить, просто скопируйте cygintl-8.dll -> cygintl-3.dll.
Freetype lib и dll должны быть помещены в папку, на которую ссылается переменная conf ‘ALT_FREETYPE_LIB_PATH’ (см. Шаг 13). Кроме того, некоторые заголовки Freetype по-прежнему требуются и находятся в make через переменную ALT_FREETYPE_HEADERS_PATH (см. Шаг 13). Это означает, что вам также необходимо скачать исходный код.Если вы не ищете простое решение и хотите скомпилировать эти двоичные файлы самостоятельно, выполните следующие инструкции:
- Загрузите make 3.82 и распакуйте его. Найдите «config.h.W32» и раскомментируйте строку с определением «HAVE_CYGWIN_SHELL». Откройте решение make_msvc_net2003.sln в Visual Studio, выберите конфигурацию Release и выполните сборку. В папке «Release» вы получите «make_msvc.net2003.exe», переименуйте его в «make.exe».
- Теперь скомпилируйте FreeType:
- Загрузите исходный код FreeType v.2.4.7 здесь .
- Распакуйте его куда-нибудь и откройте ‘\ builds \ win32 \ vc2010 \ freetype.sln’ в Visual Studio.
- Перейдите в свойства проекта (щелкните правой кнопкой мыши проект в дереве проекта) и в «Свойства конфигурации / Общие / Тип конфигурации» выберите «Динамическая библиотека (.ddl)» и переименуйте вывод в «freetype».
- Обновите ftoption.h, добавьте следующие две строки:
#define FT_EXPORT (x) __declspec (dllexport) x
#define FT_BASE (x) __declspec (dllexport) x - Сделайте сборку, и вы получите dll & lib в ‘objs \ win32 \ vc2010’.
- Не забудьте назначить соответствующие значения переменным «ALT_FREETYPE_LIB_PATH» и «ALT_FREETYPE_HEADERS_PATH» (см. Шаг 13).
- У меня были некоторые проблемы с генерацией Javadoc, который не удался с OutOfMemory. Чтобы это исправить, мне пришлось изменить ‘openjdk7 \ jdk \ make \ docs \ Makefile’.
Этот код:1234567ifeq ($(ARCH_DATA_MODEL),
64
)
MAX_VM_MEMORY =
1024
else
ifeq ($(ARCH),universal)
MAX_VM_MEMORY =
1024
else
MAX_VM_MEMORY =
512
endif
должен быть заменен этим:
1234567ifeq ($(ARCH_DATA_MODEL),
64
)
MAX_VM_MEMORY =
1024
else
ifeq ($(ARCH),universal)
MAX_VM_MEMORY =
1024
else
MAX_VM_MEMORY =
1024
endif
- Нужно скопировать файл msvcr100.dll в капли:
1
cp /cygdrive/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\
10.0
/Common7/Packages/Debugger/X64/msvcr100.dll ./drops/
- Убедитесь, что cygwin ‘find.exe’ в ПУТИ перед Windows ‘. Самый простой способ сделать это — скопировать его в ‘openjdk7 / bin’, который затем устанавливается в начале текущей переменной PATH.
- Создайте командный файл, подобный следующему. Не забывайте обновлять пути подходящим образом:
123456789
ALT_BOOTDIR=C:/Stuff/java_libs/jdk1.
6
.0_25
ANT_HOME=C:/Stuff/java_libs/apache-ant-
1.8
.
2
JAVA_HOME=
CLASSPATH=
PATH=C:/Stuff/openjdk7/bin;%PATH%
ALLOW_DOWNLOADS=
true
ALT_MSVCRNN_DLL_PATH=C:/Stuff/java_libs/openjdk7/drops
C:\WINDOWS\system32\cmd.exe /E:ON /V:ON /K
'C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd'
/Release /xp /x86
- Запустить пакетный файл. Теперь у вас полностью настроенная среда, которая готова к сборке. Запустите ‘bash’ и из оболочки выполните ‘make’:
1
make ARCH_DATA_MODEL=
32
ALT_OUTPUTDIR=C:/Users/Stas/Stuff/java_libs/openjdk7/output_32 ALT_FREETYPE_LIB_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-
2.4
.
7
/objs/win32/vc2010 ALT_FREETYPE_HEADERS_PATH=C:/Users/Stas/Stuff/java_libs/openjdk7/freetype-
2.4
.
7
/include ALT_BOOTDIR=C:/Users/Stas/Stuff/java_libs/jdk1.
6
.0_25 ALT_DROPS_DIR=c:/OpenJDK/ALT_DROPS_DIR ALT_DROPS_DIR=C:/Users/Stas/Stuff/java_libs/openjdk7/drops HOTSPOT_BUILD_JOBS=
4
PARALLEL_COMPILE_JOBS=
4
2
>&
1
| tee C:/Stuff/java_libs/openjdk7/output_32.log
Начнется сборка 32-битного JDK.
- Выпейте кофе, чай или еще что-нибудь по вкусу, а затем примерно через час вы увидите что-то вроде этого:
010203040506070809101112
#-- Build times ----------
Target all_product_build
Start
2012
-
09
-
01
23
:
08
:
55
End
2012
-
09
-
01
23
:
55
:
48
00
:
02
:
35
corba
00
:
06
:
46
hotspot
00
:
00
:
30
jaxp
00
:
00
:
51
jaxws
00
:
35
:
30
jdk
00
:
00
:
37
langtools
00
:
46
:
53
TOTAL
-------------------------
Ссылка: Сборка OpenJDK для Windows от нашего партнера по JCG Станислава Кобылянского в блоге Стаса .