开发环境设置中的小问题--环境变量的顺序

  在搭建Java开发环境的时候遇到了一个小问题 -- 在用javac预编译完java文件后,执行时总会报错:

  "xxx program" has been compiled by a more recent version of the Java Runtime (class file version xx.x), this version of the Java Runtime only recognizes class file versions up to xx.x

  上面这个错大概意识是说编译用的库比运行用的库版本要新,所以编译后无法执行。我把java库都安装了,该更新的也都更新了,应该没有什么问题呀。后来在网上一搜才发现,可能是自己环境变量设置的问题。

  自己在电脑中安装的最新JDK路径添加在了环境变量中的最后一位,也就是操作系统在查找命令时,如果之前的路径都没有匹配成功,才会使用最新的java库。这样导致的问题是,编译javac命令使用的是最新安装的编译库,但执行java命令运行时却用来之前安装其他程序时附带的java运行库(很多程序运行需要java执行环境的支持,因此会预装java运行库)。版本较老的运行库在之前的环境变量中被找到并加以使用,最新的运行库因为在靠后的环境变量中因而被忽略,只有最新的编译库被使用(其他程序一般不会附带安装java的编译库)。新的编译库加上老的运行库,版本不搭,就报错了~~~

  解决方法其实很简单:把最新JDK路径的在环境变量中的位置提前就好了。

 

  同样的问题在使用Anaconda搭建python环境时也会出现(python虽然不用编译,但运行调用不同的库仍然会有版本匹配的问题):Anaconda安装时默认是不添加自己的安装路径进入系统环境变量的,担心Anaconda自己带的python库和之前程序安装时带的python起冲突。

 

  不过这样可能导致的问题时conda下安装的python库在其他程序中无法使用,只用切换到conda环境下才能使用。当然这可能就是conda开发者的用意:我只创造一个自己使用的运行环境,不干涉其他程序。不过如果想要在conda环境外调用的话,就得自己手动添加conda里的库路径到环境变量里了。

 

  这也给了我一点启示,专用程序的环境变量尽量提前,通用程序的环境变量靠后,这样专用程序下升级后或最新的命令就能优先被调用。

posted @ 2021-08-12 00:19  三十好几,从头学起  阅读(268)  评论(0编辑  收藏  举报