Solaris上仅支持JDK 8u291或OpenJDK 8社区版,需先用uname -m和isainfo -v确认架构与位数,解压至非root路径并设执行权限,按shell类型正确配置JAVA_HOME与PATH,补充LD_LIBRARY_PATH以解决libsocket.so.1等依赖缺失问题。

确认 Solaris 架构和 JDK 版本兼容性
Solaris 不是“装个 JDK 就行”的系统,sparc 和 x86_64 架构的二进制包完全不通用,且 Oracle 官方早在 JDK 11 后就停止为 Solaris 提供新版本。你现在能用的主流选择只有:JDK 8u291(最后支持 Solaris 的官方版本)或 OpenJDK 8 的社区构建版(如 openjdk8-solaris-sparc-bin)。
- 运行
uname -m确认是i86pc(x86)还是sun4v/sun4u(SPARC) - 运行
isainfo -v查看是否支持 64-bit:输出含amd64或sparcv9才能装 64-bit JDK - 别试 JDK 17+:Oracle 已移除 Solaris port,强行解压会报
cannot execute binary file
解压安装包到非 root 路径并验证权限
Solaris 默认不鼓励把 JDK 装在 /usr/jdk/instances 这类系统路径——尤其当你没 root 权限时。更稳妥的做法是解压到用户目录或共享挂载点,但必须确保 bin/java 可执行且库路径可读。
- 用
gzip -dc jdk-8u291-solaris-x64.tar.gz | tar -xf -解压,避免因tar版本老(如 Solaris 10 自带的)不支持--strip-components - 检查
bin/java是否有执行权限:ls -l jdk1.8.0_291/bin/java,若无则运行chmod +x jdk1.8.0_291/bin/java - 运行
./jdk1.8.0_291/bin/java -version,若报ld.so.1: java: fatal: libjli.so: open failed: No such file or directory,说明LD_LIBRARY_PATH没包含jre/lib/sparcv9(SPARC)或jre/lib/amd64(x86)
配置 PATH 和 JAVA_HOME 时绕过 csh/tcsh 的变量继承陷阱
Solaris 用户常混用 bash 和 csh,而 csh 的环境变量语法和导出逻辑完全不同,export JAVA_HOME=... 在 .cshrc 里直接无效。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 在
.profile(bash/ksh)中写:JAVA_HOME=/export/home/user/jdk1.8.0_291; export JAVA_HOME; PATH=$JAVA_HOME/bin:$PATH; export PATH - 在
.cshrc(csh/tcsh)中写:setenv JAVA_HOME /export/home/user/jdk1.8.0_291; setenv PATH ${JAVA_HOME}/bin:$PATH - 改完后别只
source .profile,要新开 shell 或运行exec $SHELL,否则which java还可能指向旧的/usr/bin/java -
java -version输出里若仍显示Java(TM) 2 Runtime Environment,说明系统级软链/usr/bin/java还在生效,用ls -la /usr/bin/java确认,必要时跳过它直接调用绝对路径
验证 JRE 运行时依赖是否完整(尤其缺少 libsocket.so.1)
Solaris 上 Java 网络组件依赖系统级 C 库,JDK 8u291 在较新 Solaris 11.4 上可能缺 libsocket.so.1 符号,导致 java.net 相关类加载失败或 DNS 解析卡住。
立即学习“Java免费学习笔记(深入)”;
- 运行
ldd jdk1.8.0_291/jre/bin/java,检查输出中是否有libsocket.so.1 => (file not found) - 若缺失,先查系统是否存在:
find /usr/lib -name 'libsocket.so*',常见路径是/usr/lib/libsocket.so.1 - 若存在但未被找到,临时加到
LD_LIBRARY_PATH:export LD_LIBRARY_PATH=/usr/lib:$LD_LIBRARY_PATH - 该问题在 Solaris 10 Update 11+ 和 Solaris 11.3+ 较少见,但定制内核或精简安装的系统极易出现
真正麻烦的不是装不上,而是装上了却在某个网络调用里静默失败——比如 URL.openConnection() 卡住 30 秒才超时,这种得靠 truss -f -t bind,connect,send,recv java YourApp 抓系统调用才能定位。

















