我的开发团队最近被迫使用远程开发环境,我们无法完全访问服务器。在更改之前,我们有一个JAR文件,在Java 1.7 x64和JRE 7上运行良好。当我们转移到新服务器时,我们的JAR文件一开始是可以运行的,但是其中一个服务器管理员“更新”了我们的Java到一个较旧的版本,并卸载了我们正在使用的版本。为什么?我不知道。我重新安装了Java 1.7并卸载了1.6以及JRE。
以下问题出现在运行时,没有构建错误:
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.7', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.
我的笔记本电脑上运行同样的JAR没有问题。服务器和我的笔记本电脑都使用JDK 1.7和JRE 7在各自的%HOME%变量和系统PATH中。我甚至重新安装了JRE 6并将其放置在系统环境PATH变量中,但结果仍然相同。
我也将注册表更改回查看1.6,结果如下,我查了一下发现这是由于安装了多个Java程序导致的(这也是我的初始问题):
Exception in thread "main" java.lang.UnsupportedClassVersionError: ... :
Unsupported major.minor version 51.0
各位,我非常感谢你们提供的任何见解。我已经在各种论坛上寻找过,但好像没有人遇到和我完全相同的问题。而且,我们使用的另一台服务器也出现了这个问题。谢谢!
更新:重新编译JAR文件为1.6或1.7并匹配JDK也没有成功。还有,为什么新版本的Java会破坏旧版本编译的程序呢?
java.exe
、javaw.exe
和javaws.exe
这三个文件被存储在Windows/SysWOW64
目录下。后来,我安装了 1.8 版本的 sdk,但是它会在C:/ProgramData/Oracle/Java/javapath
路径下再次安装java.exe
、javaw.exe
和javaws.exe
这三个文件。不知道为什么,但我把它们也删除了,现在java -version
命令依然有效。 - Luminous