以下是我要做的步骤。 我认为计算机已经安装了Visual Studio 2010。 我觉得Express版本应该可以正常工作,但是我还没有尝试过。
- 安装cygwin。 确保已安装此处列出的所有软件包,其中一些默认情况下未安装。 以防万一,这是该表的副本,但建议与主源进行验证:
二进制名称 类别 包 描述 可执行文件 开发 Binutils GNU汇编器,链接器和二进制实用程序 制作工具 开发 使 为CYGWIN构建的'make'实用程序的GNU版本。 可执行文件 口译员 m4 传统Unix宏处理器的GNU实现 cpio.exe 实用程序 cpio 一个管理文件存档的程序 gawk.exe 实用程序 awk 模式导向的扫描和处理语言 文件 实用程序 文件 使用“魔术”数字确定文件类型 压缩文件 封存 压缩 打包和压缩(存档)文件 解压缩文件 封存 解压缩 提取ZIP档案中的压缩文件 免费版 系统 ps 显示系统中的可用和已用内存量 不要忘记将cygwin的'bin'文件夹添加到PATH中。
- 从此处安装Mercurial并将“ hg”添加到PATH。
- 安装用于Windows 7和.NET Framework 4的Microsoft Windows SDK 。
- 安装DirectX SDK 。 JDK需要v9.0,但我很难找到它。 所以我决定不打扰并安装最新的。 似乎工作正常。
- Bootstrap JDK是构建所必需的。 碰巧我使用了JDK6,但是假设任何> JDK6的版本都不会出现问题。
- 下载并安装Ant 。 我使用的是1.8.2版本。 将Ant添加到PATH。
- 结帐来源。 由于多种原因,它是最复杂的部分。 “ hg”不是特别稳定,因此某些应该由我的脚本完成的操作是手动完成的。
因此,要在命令行中开始运行此命令:
hg 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”后仍然失败,嗯……只要放弃并手动运行以下命令:
hg 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
希望现在您有资源并且可以有所帮助:)
- Build需要一些外部二进制文件和一个可在Windows下运行的'make.exe'版本。 cygwin随附的'make'并没有真正起作用,因为路径名中的驱动器字母存在一些问题。
接下来是我们需要编译几个文件。 一种是“ make.exe”的固定版本。 另一个是FreeType库,仅可作为源下载。
如果您不希望编译所有这些东西,而只想轻松编译JDK,则建议从此处下载二进制文件(这是我的云端硬盘)。 将“ make.exe”解压缩到“ openjdk7 / bin”中。 请注意,该软件包中的“ make.exe”非常老,需要cygintl-3.dll,当前cygwin并未提供。 要修复此问题,只需复制cygintl-8.dll-> cygintl-3.dll。
Freetype lib和dll必须放在ALT_FREETYPE_LIB_PATH conf变量引用的文件夹中(请参阅步骤13)。 另外,仍然需要一些Freetype标头,并通过make通过ALT_FREETYPE_HEADERS_PATH变量找到它们(请参见步骤13)。 这意味着您还需要下载源代码。如果您不是在寻找简单的解决方案,而是想自己编译这些二进制文件,请按照以下说明进行操作:
- 从这里下载make 3.82并解压缩。 找到“ config.h.W32”并取消注释行,定义为“ HAVE_CYGWIN_SHELL”。 在Visual Studio中打开make_msvc_net2003.sln解决方案,选择“发布”配置并进行构建。 在“发布”文件夹中,您将获得“ make_msvc.net2003.exe”,并将其重命名为“ make.exe”。
- 现在编译FreeType:
- 从此处下载FreeType v.2.4.7的源。
- 将其解压缩到某个位置,然后在Visual Studio中打开“ \ builds \ win32 \ vc2010 \ freetype.sln”。
- 转到项目属性(在项目树中的项目上单击鼠标右键),然后在“配置属性/常规/配置类型”中选择“动态库(.ddl)”,然后将输出重命名为“ freetype”。
- 更新ftoption.h,添加以下两行:
#定义FT_EXPORT(x)__declspec(dllexport)x
#定义FT_BASE(x)__declspec(dllexport)x - 进行构建,您将在objs \ win32 \ vc2010中获得dll和lib。
- 不要忘记为“ ALT_FREETYPE_LIB_PATH”和“ ALT_FREETYPE_HEADERS_PATH”变量分配适当的值(请参阅步骤13)。
- 我在javadoc生成方面遇到了一些问题,但由于OutOfMemory失败。 为了修复它,我不得不更改“ openjdk7 \ jdk \ make \ docs \ Makefile”。
这段代码:ifeq ($(ARCH_DATA_MODEL),64)MAX_VM_MEMORY = 1024 else ifeq ($(ARCH),universal)MAX_VM_MEMORY = 1024 elseMAX_VM_MEMORY = 512 endif
必须用以下内容替换:
ifeq ($(ARCH_DATA_MODEL),64)MAX_VM_MEMORY = 1024 else ifeq ($(ARCH),universal)MAX_VM_MEMORY = 1024 elseMAX_VM_MEMORY = 1024 endif
- 复制“ msvcr100.dll”到以下目录:
cp /cygdrive/c/Program\ Files\ \(x86\)/Microsoft\ Visual\ Studio\ 10.0/Common7/Packages/Debugger/X64/msvcr100.dll ./drops/
- 确保Windows之前的cygwin的“ find.exe”在PATH中。 最简单的方法是将其复制到“ openjdk7 / bin”,然后在当前PATH的开头进行设置。
- 创建一个类似于以下文件的批处理文件。 不要忘记适当地更新路径:
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/dropsC:\WINDOWS\system32\cmd.exe /E:ON /V:ON /K 'C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd' /Release /xp /x86
- 运行批处理文件。 现在,您已经完全配置了环境,可以开始构建了。 运行“ bash”,然后在shell中执行“ make”:
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。
- 喝咖啡,茶或您想要的任何东西,然后大约一个小时后,您应该会看到类似以下的内容:
#-- 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 -------------------------
参考:来自Stas博客博客的JCG合作伙伴 Stanislav Kobylansky在Windows上构建OpenJDK 。
翻译自: https://www.javacodegeeks.com/2012/09/stass-blog-building-openjdk-on-windows.html