十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows 上构建 JDK 需要哪些环境准备:Cygwin、MSYS2、WSL、短路径与 locale 设置

Windows 上构建 JDK 需要哪些环境准备:Cygwin、MSYS2、WSL、短路径与 locale 设置 Windows 上构建 JDK 需要哪些环境准备Cygwin、MSYS2、WSL、短路径与 locale 设置【免费下载链接】jdkJDK main-line development https://openjdk.org/projects/jdk项目地址: https://gitcode.com/GitHub_Trending/jd/jdk如果你的目标是在 Windows 上从源码构建 JDKmain-line 仓库本文覆盖构建前必须完成的环境准备选择并安装 POSIX 支持层Cygwin、MSYS2 或 WSL、设置 locale、处理短路径问题、安装各层所需的构建工具包然后跑通configure、make images并验证构建结果。所有事实均来自仓库中的 doc/building.md。Windows 是 JDK 支持的非 POSIX 平台中唯一的一个因此无法像在 Linux 上一样直接构建必须先有一个 POSIX 支持层。文档明确Cygwin、MSYS2、WSL 三者都被支持其中 Cygwin 经过的实际测试最多通常最不容易出问题。一、克隆源码前的目录规则无论选哪条路径先按文档的Special Considerations要求放置源码否则构建大概率失败源码目录路径不能包含空格这在 Windows 上最容易踩到路径不能过长、嵌套不能太深否则构建中会碰到操作系统的路径限制源码放在本地磁盘而非网络共享目录文档强烈建议使用 SSD因为构建对磁盘 I/O 很敏感编译 JDK 需要 UTF-8 支持Windows 上的具体做法见下文 locale 一节。二、locale 设置系统 locale 与用户 locale 都设为 US English文档说明Windows 上无法像 Unix 那样只对构建进程设置 localeUnix 通过LC_*变量向下传播locale 只能全局修改会影响该用户运行的所有应用。而且 Windows 区分用户 locale和系统 locale后者决定例如文件路径编码两者都会影响构建和测试。文档推荐并支持的做法是把系统 locale 和用户 locale 都设为US English。系统设置入口控制面板 → Regional Settings → Administrative → Change System Locale。注意两点限制除 US English 外的 locale 仅处于 best effort 支持状态构建和测试都可能出现奇怪结果文档明确其不受支持也不被推荐Visual Studio 中必须安装 US English 语言包否则构建系统可能无法与编译器正常交互。若安装时漏选可通过 GUI 修改开始菜单打开 Visual Studio Installer → Modify → Language packs 选项卡 → 勾选 English → Modify。也可以用命令行完成需以管理员身份运行cmd.exe引号不可省略C:\Program Files (x86)\Microsoft Visual Studio\Installer\vs_installer.exe modify --channelId VisualStudio.16.Release --productId Microsoft.VisualStudio.Product.BuildTools --addProductLang en-us -p其中VisualStudio.16.Release对应 VS 2019其他版本需自行调整版本号若安装的不是BuildTools而是Professional等产品也要相应调整 product ID。三、短路径8.3 短名处理JDK 构建系统会利用目录的短名8.3 名称为含空格的路径生成无空格替代路径。短名按卷启用检查与设置方法如下fsutil 8dot3name query查看当前卷的短名创建开关状态。短名生成关闭之后创建的目录不会有短名。在cmd.exe中进入所在目录运行dir /X如果某一列显示形如ASDF~1的内容说明存在短名。若目录缺少短名文档给出的最稳妥做法是fsutil 8dot3name set 盘符: 0需要管理员权限然后重新创建该目录短名会自动生成。另一个选择是手动指定fsutil file setShortName path short name排查章节还补充了两点在configure报目录含空格警告时只有Microsoft Visual Studio和Windows Kits这两个目录是必须设置短路径的其余如IntelliJ IDEA的警告可以忽略如果fsutil file setshortname返回 Access denied可能是有进程正在占用该目录文档建议重启 Windows 进入安全模式后重新执行命令。四、选择并安装 POSIX 层路径 1Cygwin文档实测最多的选项安装 64 位 Cygwin文档强烈建议 64 位版本。除基础安装外必须安装这些包autoconf、make、zip、unzip。文档给出的常用安装命令为path to Cygwin setup替换为你机器上 Cygwin setup 程序的实际目录path to Cygwin setup/setup-x86_64 -q -P autoconf -P make -P unzip -P zipCygwin 环境有两个额外的目录规则违反可能导致难以调试的构建问题用 Cygwin 的 bash 里的mkdir创建存放 JDK 克隆的父目录而不要用 Windows 资源管理器创建以保证目录具备正确的 Cygwin 属性且子目录继承这些属性不要把 JDK 克隆放在 Cygwin 主目录home之下尤其是用户名含空格或大小写混合时。另外JDK 在 Cygwin 中要求 GNU Make 4.0 及以上文档说明 Cygwin 当前分发的版本已满足这一点。还要知道 Cygwin 采用持续更新模型任何时候添加或更新包都可能连带升级 JDK 构建过程用到的工具从而引发意外的构建问题。关于 git 客户端文档列出两个选择Cygwin 自带的git没有行尾问题且能理解构建系统全程使用的 Cygwin 风格路径但与 Skara CLI 配合不佳Git for Windows 有行尾问题、不理解 Cygwin 路径但与 Skara 配合良好——若选用 Git for Windows安装时需把core.autocrlf设为false。路径 2MSYS2除基础安装外必须安装autoconf、tar、make、zip、unzippacman -S autoconf tar make zip unzip路径 3WSLWSL1 与 WSL2 内部实现差异很大WSL1 通过翻译系统调用运行二进制WSL2 在虚拟机中运行 Linux文档说明两者都受支持但支持程度不同可能需要分别测试后再决定用哪个。前提是Windows 10 版本 1809 或更新并安装 Ubuntu guest。从 WSL 构建 Windows 二进制时源码必须位于Windows 可访问的目录因为 Visual Studio 和 boot JDK 是 Windows 程序必须能访问源码且存放源码的盘符在 WSL 中必须挂载为大小写不敏感通过修改 WSL 内的/etc/fstab或/etc/wsl.conf设置如果源码是在改挂载选项之前克隆的可以用 fsutil 工具对个别目录修正。WSL 默认行为是构建Windows二进制此时必须使用位于 Windows 可访问目录中的 Windows 版 boot JDK。如果要改为构建Linux二进制必须使用 Linux 版 boot JDK给configure加参数bash configure --buildx86_64-unknown-linux-gnu --openjdk-targetx86_64-unknown-linux-gnu文档同时注明WSL 上可以构建但测试尚不完全支持。与路径规则配合的一点说明构建系统内部所有路径都是 Unix 风格例如/cygdrive/c/git/jdk/Makefile而不是C:\git\jdk\Makefile传给configure的参数也要用这种写法例如--with-msvcr-dll/cygdrive/c/msvcr100.dll而不是c:\msvcr100.dll。转换由fixpath.sh工具完成出现路径转换相关的怪异问题时可用DEBUG_FIXPATH1 make jdk查看每次fixpath exec的输入输出或手动执行bash make/scripts/fixpath.sh print /mnt/c/windows观察转换结果。五、工具链与 Boot JDKVisual StudioWindows 上唯一支持的编译器工具链。configure接受的最低版本是2019 版 16.8最高接受 2026。多个版本共存时默认选最新的可用--with-toolchain-version2022这类参数指定。所有编译器需支持 C11 与 C14。Boot JDK构建 JDK 需要先有一个现成的 JDK。经验法则构建主版本N用N-1的 JDKN-1尚未发布时用N-2。configure会自动尝试定位但启发式查找失败率较高建议显式用--with-boot-jdk指向你要用的 JDK。硬件x86 平台文档建议至少 2–4 核、2–4 GB 内存、至少 6 GB 空闲磁盘并强烈建议使用 SSD。六、运行 configure 与 make并验证结果在源码目录Cygwin/MSYS2 bash 或 WSL shell 中执行bash configure如果因缺少依赖工具链、构建工具、外部库或 boot JDK而失败configure大多数情况下会打印针对你平台的解决建议——按提示装好依赖后重新运行即可。运行成功后检查输出末尾的 summary确认选中的 Boot JDK 和原生工具链是否是你预期的完整日志保存在$BUILD/configure.log。随后构建并验证make images ./build/*/images/jdk/bin/java -version$BUILD即build/configuration name如build/windows-x64-server-release一类名称。也可以先只做make等价于make jdk得到exploded image后用$BUILD/jdk/bin/java -version快速测试。七、构建失败时的文档化排查路径按文档给出的顺序理解失败信息阅读构建末尾的 failure summary。它会列出失败的目标和配置、重复打印失败命令的 stdout/stderr 开头、给出failure-logs目录路径里面有完整的target.log和可重跑的target.cmd、以及 make 目标链。日志搜索] Error或***可快速定位。运行make doctor。这是构建系统自带的诊断命令会检查常见环境问题configure 警告、遗留 core 文件、非法命名的未跟踪文件等并给出建议动作。环境类问题重新运行configure检查警告如果编译器版本过新或过旧导致新的警告类别使构建失败可用--disable-warnings-as-errors关闭警告即错误的默认行为。Cygwin 特有的内存/进程问题如果看到如下报错——fatal error - couldnt allocate heap cannot create ... Permission denied spawn failed文档指出这可能是 Cygwin 问题的征兆可对照 Cygwin FAQ 的 BLODA 列表与 fork() 失败相关章节处理重启计算机可能暂时缓解。含空格路径警告如第三节所述只对Microsoft Visual Studio和Windows Kits强制要求短路径其余警告可忽略Access denied 时进入安全模式重设。边界与限制非 US English 的 locale 不受支持构建和测试结果不可靠WSL 上构建可行但测试不完全支持Cygwin 的包不可固定版本更新包可能连带升级构建工具并引入问题若本文步骤都无法解决文档给出的出口是携带 configure/build 日志的相关部分联系 Build Group邮件 build-devopenjdk.org。完整的构建系统原理、configure参数全集和 make 目标可继续在 doc/building.md 中按章节查阅。【免费下载链接】jdkJDK main-line development https://openjdk.org/projects/jdk项目地址: https://gitcode.com/GitHub_Trending/jd/jdk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表