Build OpenJDK8 on Windows

本文介绍了在Windows上构建OpenJDK8的简单步骤,包括准备MinGW + msys,获取OpenJDK源码,安装Visual Studio 2010及SP1,配置环境变量,并执行configure和make all来编译源码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单的步骤

1. MinGW + msys: 我已经整理好直接解压即可 http://pan.baidu.com/s/1bncptlt 

2. OpenJDK8 source code:  http://pan.baidu.com/s/1eQtKkeQ 其中包括了freetype 和 一个环境bat

    如果想更新到最新的JDK8 source, 安装 HG, 解压后运行  jdk8/src/get_source.sh. 此压缩包并未破坏HG文件

3. 安装 vs2010 和 sp1, 没有sp1补丁会有link错误

4.  修改 jdk8/hg_env.bat,  使环境变量 HG (mercurial hg), MINGW, BOOST_STARP_JDK 等 指向正确目录. 运行hg_env.bat  

5.  运行configure

bash ./configure --enable-debug --with-num-cores=4 --with-target-bits=64 --with-freetype=../freetype
      如果提示找不到 msvcr100.dll,  修改 jdk8\src\common\autoconf\generated-configure.sh, 把"CORRECT_MSVCR_ARCH=x86-64" 换成 "CORRECT_MSVCR_ARCH=MS"

6 . make all


补充
1. 在这里下载一个MinGW, 64位
下载msys, 整合到 MinGW中
下载一个mingw-get.exe, copy到MinGW bin中
运行
mingw-get.exe install msys-zip 
mingw-get.exe install msys-unzip
mingw-get.exe install msys-mktemp
下载 cpio.exe, 放在msys内
2. http://hg.openjdk.java.net/jdk8/jdk8  这里下载一个zip包, 解压后 运行get_source.sh下载最新source, 我的百度jdk8包已经下载好source, 可以直接用.
当然, 提前安装好mercurial hg http://mercurial.selenic.com/downloads
2.1 下载编译 freetype
我是用cmake生成vs2010 project, 然后编译 release, 要注意事项
a. 修改makelist.txt,  在  add_library(...) 加入 SHARED, 默认是static lib
b. 修改 某 头文件, 在宏定义 FT_EXPORT 加上 __declspec (dllexport )

#ifndef
FT_EXPORT
#ifdef
__cplusplus
#define
FT_EXPORT( x )  __declspec (dllexport ) extern "C"   x
#else
#define
FT_EXPORT( x )  __declspec (dllexport ) extern   x
#endif
#endif
/* !FT_EXPORT */

c. 在freetype目录下

mkdir build
cd build
cmake -G "Visual Studio 10 2010 Win64" ../
d. 编译吧. 最后把dll lib copy到freetype下的lib目录里, 步骤5中  --with-freetype指向此freetype路径

可以参考source的README-builds.html, 当然如果文档上说的全面正确, 我也不会做此记录了.

<think>我们正在解决Hadoop配置中JAVA_HOME路径错误的问题。用户提到使用OpenJDK1.8.0_412,但Hadoop报错JAVA_HOME路径不存在。根据引用[1]中的方法,我们可以通过修改Hadoop的配置文件来设置正确的JAVA_HOME路径。同时,用户的环境是Linux(从之前的对话中可以看出),因此我们将修改hadoop-env.sh而不是Windows下的hadoop-env.cmd。步骤:1.确认系统中JDK的实际安装路径。2.修改Hadoop配置文件hadoop-env.sh,设置正确的JAVA_HOME。具体操作:第一步:确认JDK路径在Linux中,可以使用以下命令来查找Java安装路径:$whichjava通常输出类似:/usr/bin/java$ls-l/usr/bin/java通常这是一个指向实际Java安装路径的符号链接。例如:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java因此,JAVA_HOME应该是去掉最后的`/jre/bin/java`,即:/usr/lib/jvm/java-8-openjdk-amd64或者使用:$readlink-f$(whichjava)得到完整路径,然后去掉`/jre/bin/java`或`/bin/java`部分。第二步:修改hadoop-env.sh在Hadoop的配置目录(通常是$HADOOP_HOME/etc/hadoop)中,找到hadoop-env.sh文件。用文本编辑器打开,找到关于JAVA_HOME的设置行(可能被注释掉),取消注释并设置为正确的路径。例如:原配置可能为:#exportJAVA_HOME=/export/server/jdk1.8.0_371修改为(根据实际路径):exportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64注意:路径中不要有空格或特殊字符,并且确保路径正确存在。第三步:验证保存文件后,重新执行:$hadoopversion应该能正确输出Hadoop版本信息以及所使用的Java版本。如果问题仍然存在,请检查:-修改的配置文件是否正确(确保是启动Hadoop时实际读取的配置文件)-确保Hadoop的配置目录在环境变量HADOOP_CONF_DIR中正确设置(如果没有设置,默认就是$HADOOP_HOME/etc/hadoop)-确保修改后重新source配置文件或者重新启动shell会话另外,如果系统中有多个Java版本,确保设置的JAVA_HOME与`java-version`显示的版本一致。根据引用[1]中的方法,我们也可以直接在配置文件中强制指定JAVA_HOME路径,避免依赖系统环境变量。示例步骤:1.查找Java路径:$readlink-f$(whichjava)输出:/usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java因此,JAVA_HOME设置为:/usr/lib/jvm/java-8-openjdk-amd642.编辑hadoop-env.sh:$vim$HADOOP_HOME/etc/hadoop/hadoop-env.sh找到JAVA_HOME的行,修改为:exportJAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd643.保存并退出,然后执行:$source$HADOOP_HOME/etc/hadoop/hadoop-env.sh(这一步可选,但建议重新加载)$hadoopversion如果输出正常,则问题解决。注意:如果Hadoop集群有多个节点,需要确保每个节点的hadoop-env.sh都进行了相同的修改。如果用户使用的是OpenJDK1.8.0_412,那么路径可能类似:/usr/lib/jvm/java-8-openjdk-amd64或/usr/lib/jvm/java-8-openjdk-8u412-b08-0ubuntu1~20.04(具体版本号可能不同)如果用户不确定路径,可以使用以下命令查看所有已安装的Java:$update-alternatives--configjava然后根据选择的Java版本来确定路径。最后,如果用户是在Windows环境下,那么需要修改的是hadoop-env.cmd,设置JAVA_HOME为Windows风格的路径,如引用[1]所示(但用户当前是Linux环境,所以不考虑Windows)。生成相关问题:1.如何检查Hadoop集群中所有节点的Java版本是否一致?2.Hadoop配置中除了JAVA_HOME,还有哪些关键环境变量需要设置?3.如何在Hadoop中配置多个JDK版本?4.Hadoop启动时报错“Permissiondenied”如何解决?5.如何为Hadoop配置SSH免密登录?</think>### 解决 Hadoop 的 JAVA_HOME 路径配置错误 #### 问题诊断 当执行 `hadoop version` 时出现 `JAVA_HOME does not exist` 错误,原因通常是: 1. 系统环境变量 `JAVA_HOME` 未正确定义 2. Hadoop 配置文件中的路径与实际 JDK 路径不匹配 3. OpenJDK 路径未在 Hadoop 中显式指定 --- ### 解决方案(针对 OpenJDK 1.8.0_412) #### 步骤 1:验证系统 JDK 路径 ```bash # 查找 OpenJDK 实际安装路径 $ update-alternatives --list java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java # 典型路径 # 设置系统环境变量(临时) $ export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 $ echo $JAVA_HOME ``` #### 步骤 2:强制配置 Hadoop 的 JAVA_HOME 编辑 Hadoop 配置文件: ```bash $ vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh ``` 找到 `export JAVA_HOME=` 行,修改为绝对路径: ```diff - # export JAVA_HOME=${JAVA_HOME} + export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 # 使用步骤1查到的实际路径 ``` > **关键点**:必须使用**绝对路径**而非变量引用[^1] #### 步骤 3:验证配置 ```bash # 重新加载配置 $ source $HADOOP_HOME/etc/hadoop/hadoop-env.sh # 检查Hadoop识别情况 $ hadoop version Hadoop 3.3.5 Source code repository https://github.com/apache/hadoop.git -r a3b9c37a397ad... Compiled by ubuntu on 2023-03-15T15:56Z Compiled with protoc 3.7.1 ... Using /usr/lib/jvm/java-8-openjdk-amd64/jre # 正确显示路径 ``` --- ### 路径差异说明(OpenJDK vs Oracle JDK) | JDK 类型 | 典型安装路径 | Hadoop 配置示例 | |---------------|-------------------------------------|----------------------------------| | OpenJDK | `/usr/lib/jvm/java-8-openjdk-amd64` | `export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64` | | Oracle JDK | `/usr/java/jdk1.8.0_412` | `export JAVA_HOME=/usr/java/jdk1.8.0_412` | > **注意**:OpenJDK 路径通常包含 `openjdk` 标识,而 Oracle JDK 使用版本号直接命名 --- ### 多节点集群配置 如果使用集群,需在所有节点同步配置: 1. 将修改后的 `hadoop-env.sh` 复制到所有节点: ```bash $ scp $HADOOP_HOME/etc/hadoop/hadoop-env.sh hadoop02:$HADOOP_HOME/etc/hadoop/ $ scp $HADOOP_HOME/etc/hadoop/hadoop-env.sh hadoop03:$HADOOP_HOME/etc/hadoop/ ``` 2. 重启 Hadoop 服务: ```bash $ stop-dfs.sh && stop-yarn.sh $ start-dfs.sh && start-yarn.sh ``` --- ### 验证集群状态 ```bash # 检查所有节点进程 $ jps # 应有 NameNode, DataNode, ResourceManager 等 # 查看日志确认无Java路径错误 $ tail -n 50 $HADOOP_HOME/logs/hadoop-*-namenode-*.log ``` > **避坑指南**: > 若仍报错,检查路径权限:`ls -ld $JAVA_HOME` 确保 Hadoop 用户有访问权限 > Windows 环境需使用反斜杠和短路径名(如引用[1]的 `C:\PROGRA~1`)[^1]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值