web-dev-qa-db-ja.com

異なるJavaコマンドラインに表示されるバージョン

最近、Javaバージョンを確認しました。コマンドJava -versionを実行し、Java version 1.7.0_09を使用していることがわかりました。しかし、C:\Program Files\Java\ディレクトリ、同じバージョンが見つからないようです。

  • j2re1.4
  • jdk1.6.0_32
  • jdk1.7.0_06
  • jdk1.7.0_07
  • jre6
  • jre7

等々...

私のプログラムはまだ実行されますが、私はすべてを手動でコンパイルしようとしており、JavaがOSによってどのように扱われているかを理解しています。

もう1つ奇妙なのは、環境変数の設定を確認しようとしましたが、jdk1.7.0_09について何も言わないことです。

パス:

  • C:\ Program Files\Common Files\Microsoft Shared\Windows Live;
  • %SystemRoot%\ system32;
  • %SystemRoot%;
  • %SystemRoot%\ System32\Wbem;
  • %SYSTEMROOT%\ System32\WindowsPowerShell\v1.0 \;
  • C:\ Program Files\TortoiseSVN\bin;
  • C:\ Program Files\Windows Live\Shared;
  • C:\ Eclipse\plugins\com.google.appengine.Eclipse.sdkbundle_1.6.5\appengine-Java-sdk-1.6.5\bin;
  • C:\ Program Files\Java\jdk1.7.0_07\bin; C:\ Program Files\QuickTime\QTSystem \;
  • %ANT_HOME%\ bin

どういうわけか自動的にjreにな​​ったことを皆さんに伝えたいだけです。

完全なディレクトリはC:\Users\User02\AppData\LocalLow\Sun\Java\jre1.7.0_09で、lzma.dllという名前のファイルがあります。

しかし、C:\Users\User02\AppData\LocalLow\Sun\Java\jdk1.7.0_07と言う別のディレクトリがあります。内部のファイルは次のとおりです。

  • jdk1.7.0_07.msi
  • sj170070.cab
  • ss170070.cab
  • st170070.cab
  • およびsz170070.cab
16
Franz Noel

多くのJREをコンピューター上に並べて配置することができます。

JREがWindowsに正しくインストールされている場合、各バージョンに関する情報はレジストリに保存されます。インストールプロセスは、システムPATHに特別なJava.exeをインストールします(%SYSTEMROOT%\ System32))。この特別なJava.exeは現在のJREを見つけるため、PATHを変更する必要はありません。コマンドラインから、Java -versionと入力して、インストールされている現在のjreバージョンを表示します。

リリース1.6では、レジストリを変更せずに、最後のインストールとは異なるJREインストールを選択できるようになりました。

JREインストールは、レジストリのキーにリストされています。

HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment

この簡単なテストクラスを受講する

public class ShowVersion {
 public static void main(String args[]) {
   System.out.println(System.getProperty("Java.version"));
 }
}

1.6および1.5がインストールされたシステム。入力した場合

> Java ShowVersion

おそらく最後にインストールされたので、使用されるのは1.6 JREです。

代わりに1.5 JREを強制するには、このコマンドラインを使用します。

> Java -version:"1.5" ShowVersion

バイトコードが特定のJREと互換性がない場合、..もちろん動作しません。

ref: technote Java 6

特定のインストールを使用するための完全なパスをいつでも指定できます。この方法でJVMを起動しても、レジストリ設定はまったく使用されません。

>"C:\Program Files\Java\j2re1.4.1_02\bin\Java" -version
Java version "1.4.1_02"

source: コマンドラインから特定のJREを選択

15
RealHowTo

以下を追加すると問題が解決します。

set Java_HOME="your jdk path"
set PATH=%Java_HOME%\bin;%PATH%.

さらに、それが機能しない場合は、複数のJavaバージョンにPATHを設定したことを意味します。最新バージョンのみを含め、PATH変数からすべて削除します。

3
Shashidhar

「実際の」質問への回答:

奇妙なもう1つのことは、環境変数の設定を確認しようとしましたが、jdk1.7.0_09については何も言っていません。

ここで起こったことは、jdk1.7.0_07をインストールし、それを自動アップグレードしたことです。その場合、最初にインストールした古いフォルダー名が引き続き使用されます。

Javaをインストールした後、通常、JDKディレクトリのコピーを作成し、バージョン番号を付けて名前を付けます。その後、特定のJavaのようにそう:

@echo off
:: testjava.bat
set Java_HOME=C:\JDK1.x.xx
set PATH=%Java_HOME%\bin;%PATH%;.
Java -version
pause

したがって、上記のようにJava_HOMEシステム変数とPATH変数を設定することをお勧めします。これにより、システム上のすべてがオーバーライドされ、選択したJDKがJREのデフォルトになります。

2
djangofan

コメント内のそのAppDataパスは(おそらくとにかく)あなたのパス上にないので、おそらくそれが使用しているものではないでしょう。残念ながら、Windowsにもwhichコマンドはありません。

パスを編集してC:\Program Files\Java\binディレクトリをリストの一番最初に移動しても、1.7.0_09が出力される場合、どういうわけかJDK7u7フォルダーにJDK7u9があります。そうでない場合は、パス上の他のすべてのディレクトリを参照し、適切なJavaファイルが見つかるまで1行1列を開きます。幸いなことに、パスはmuchの方が短いです。

次のことに注意してください。

> Java -version

また、Java.batおよびその他のexe以外の拡張機能も検索する場合があるため、パスを検索している間はこれに注意してください。実行してみてください:

> Java.exe -version

そうすればknowexeファイルを探しています。

最後にできること:

> "C:\Program Files\Java\jdk1.7.0_07\bin\Java" -version

これが1.7.0_09を返す場合、JDKをその場で更新する何かが起こりました。これは起こるはずのないことですが、私は間違っています。

2
Brian