私の開発チームは最近、サーバーへの完全なアクセス権がないリモート開発環境に強制されました。切り替え前は、JRE 7とともにJava 1.7 x64で正常に動作していた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が古いコンパイルバージョンを壊すのでしょうか。