私の開発チームは最近、サーバーへの完全なアクセス権を持たないリモート開発環境に移動することを余儀なくされました。変更前は、Java 1.7 x64 と JRE 7 で正常に動作する JAR がありました。新しいサーバーに移動したとき、JAR は正常に動作していましたが、サーバー管理者の 1 人が Java を古いバージョンに「更新」しました。バージョンを変更し、使用していたものをアンインストールしました。理由は聞かないでください、わかりません。Java 1.7 を再インストールし、JRE と一緒に 1.6 をアンインストールしました。
実行時に次の問題が発生します。ビルド エラーはありません。
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 を問題なく実行しました。サーバーとラップトップの両方で、それぞれの %HOME% 変数とシステム PATH に JDK 1.7 と JRE 7 が含まれています。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 が古いコンパイル済みバージョンを壊すのでしょうか?