前段时间部署新项目的时候,折腾半天适配依赖包,到头来居然是本地Java版本和服务器对不上,那一刻才认认真真把如何查看java版本这个基础操作摸透,顺带踩了一堆没必要的雷。
最开始压根没把这事当回事,总觉得随便敲个命令就能出结果,之前一直傻傻分不清系统之间的查询指令,在Windows的cmd控制台里反复输入java -v,界面只会冷冰冰弹出一行错误提示,试了五六遍,甚至重启了控制台,依旧没有任何版本相关信息。
真的挺让人烦躁的。本来开发任务就堆得满满当当,还要被这种基础小问题卡住进度,当时直接赌气换了种方式,想着直接去文件夹里找安装目录,从配置文件里扒版本信息。
找Java安装目录的过程远比想象中麻烦。Program Files文件夹里的jdk文件夹命名杂乱,有的直接标注版本号,有的只用一串字母数字代替,而且电脑里前后装过三个不同版本的JDK,零散存放在不同盘符,挨个点开bin文件查看内部内容,耗费了快二十分钟,最后还是什么都没找到。
折腾好久才搞明白,小写v根本不是查询版本的指令,这是大部分新手都会弄错的地方。
就两个大小写的区别,带来的结果完全不一样。小写的java -v,作用是输出虚拟机的简易日志,压根不会展示版本;真正能直接调出完整版本信息的,是大写的java -V,这个指令能同步显示JDK版本、发行日期、运行环境等全部基础数据,适配所有Windows系统。
除了这个,还有一个通用性最高、适配Windows、Mac、Linux三类系统的指令。直接在终端输入java -version,输出的内容会比大写V的模式更细致,连运行时环境、虚拟机类型都会罗列出来,也是我现在日常排查版本首选的方式。
很多人不知道的是,查询版本还分运行版本和编译版本。上面两个指令查出来的,都是当前系统正在启用的运行版本。
之前吃过一次大亏,本地运行项目一切正常,打包上传服务器就直接报错,排查半天才发现,运行环境用的是1.8版本,编译代码用的却是17版本的JDK,两个版本不兼容,直接导致项目无法启动。
想查看编译用的JDK版本也简单,直接输入javac -version就行。这个指令单独对应编译环境,和运行环境相互独立,做项目开发的话,一定要习惯性核对这两个数据。
很多初学者都会忽略这个细节,就是系统环境变量存在多版本共存的情况。之前电脑里留存了旧版JDK,后续新装高版本后,环境变量没及时更新,哪怕输入指令查到高版本,实际项目调用的依旧是老旧版本。
遇到这种情况,单纯靠指令查询已经没用了,得直接打开系统的环境变量配置界面,查看JAVA_HOME对应的文件路径,路径指向哪个文件夹,系统默认调用的就是哪个版本的JDK。
现在每次接手新项目,打开终端的第一件事,就是先后敲下java -version和javac -version两行指令。也就几秒钟的事,能从根源规避百分之八十的版本适配问题,总比后期报错,再耗费大把时间返工要划算得多。
刚才写完这些,顺手又打开控制台核对了一遍自己电脑的Java版本,确认无误后,顺手卸载了电脑里闲置的旧版JDK。