Windowsで同時に実行されている複数のJavaバージョン


83

Java 5で実行されているアプリケーションがいくつかありますが、Java 6に基づくアプリケーションを導入したいと思います。両方のJavaバージョンをWindowsで共存させることはできますか?

さまざまなアプリケーションに適切なJavaバージョンを設定するためのコントロールパネル、またはその他の設定方法はありますか?その特定のアプリケーションを実行するために使用されるJavaのバージョンは何ですか?

回答:


60

もちろん、Windowsでは複数のバージョンのJavaを使用できます。また、アプリケーションごとに異なるJavaバージョンを使用できます。アプリケーションはどのように開始されますか?通常、次のようなものがあるバッチファイルがあります

java ...

これにより、PATH変数を使用してJava実行可能ファイルが検索されます。したがって、Java 5が最初にPATHにある場合、Java6アプリケーションの実行で問題が発生します。次に、特定のJavaバージョンを使用するようにバッチファイルを変更する必要があります。たとえばJAVA6HOME、値を使用して環境変数を定義しC:\java\java6(Java 6がこのディレクトリにインストールされている場合)、バッチファイルの呼び出しを変更します。

%JAVA6HOME%\bin\java ...

9
Windowsでは、Javaインストーラーが既存の(最初にインストールされた)Javaインストールを置き換えるのを停止するには、STATIC = 1引数を渡す必要があります。つまり、コマンドライン「jre-6u24-windows-i586-s.exe / STATIC = 1」から実行します
トムチバートン2011年

4
Windows 764で「jdk-6u27-windows-x64.exe / STATIC = 1」を実行すると、インストールされず、msiexecの使用法を示すポップアップウィンドウが表示されます。
yetimoner 2011年

7
Oracleからのこのドキュメントによると実際にはjdk-...exe STATIC=1です。私はこれを試しましたが、うまくいきました。
マット

1
皆さん、JDKとJREを混同しています。JREはSTATIC引数を取りますが、JDKも同様ですか?
ダニエル2013年

1
@reallyinsaneこれは理解できません。答えは初心者のために単純化されていません。完全なチュートリアルにリンクできますか?
CodingOnSteroid 2015

12

複数のJRE / JDKバージョンを並べてインストールすることは絶対に可能です。さらに、Sunは(Program Filesの下に)それぞれに異なるフォルダーを作成しているため、これを行うために特別なことをする必要はありません。

各アプリケーションでどのJREが機能するかを確認するためのコントロールパネルはありません。基本的に、機能するJREは、PATH環境変数の最初のものになります。これ、またはJAVA_HOME変数を変更するか、特定のcmd / batファイルを作成して、パスに異なるJREを持つ必要なアプリケーションを起動できます。


2
これがWindowsに当てはまるとは思わない。
cmcginty 2013年

@Casey、どの部分を参照していますか?なぜそれは真実ではないのですか?
ペースリエ2014

1
この答えは問題を説明しています。Windowsレジストリは、Javaのデフォルトバージョンを見つけるために使用されます。
バイナリ基板2015

Javaプログラムが、それが開発されたものよりも新しいバージョンのJavaで正常に動作することはよくあることですが、保証はありません。また、ほとんどの場合、JAVA_HOME環境変数を更新する必要があります。
Patrick O'Hara

11

私は、Javaファイルを追跡するためのWindowsのCLASSPATH、JAVA_HOME、およびPATHのアイデアの不器用さに愕然としました。複数のJREと、それに満足する方法のために、私はここに着きました。私よりはるかに賢い人からの情報を逆流させることなく、私はむしろこの問題に関する彼の記事を指摘したいと思います。それは私にとってそれを完全に解決します。

記事:Ted Neward:複数のJavaホーム:Javaアプリに独自のJREを提供

サーバー側の開発言語としてのJavaの指数関数的成長に伴い、Java開発ツール、環境、フレームワーク、および拡張機能が指数関数的に成長しました。残念ながら、これらのツールのすべてが同じJavaVMインストールでうまく連携できるわけではありません。サーブレット2.1準拠の環境が必要なものもあれば、2.2が必要なものもあります。JDK 1.2以降でのみ実行されるものもあれば、JDK 1.1でのみ実行されるもの(およびそれ以降)もあります。Swing 1.0より前の「com.sun.swing」パッケージが必要なものもあれば、「javax.swing」パッケージ名が必要なものもあります。

さらに悪いことに、この問題は企業内でも見られます。わずか6か月前からJavaを使用して開発されたシステムは、新しい(一見無関係な)アプリケーションリリースに必要なJava拡張機能のインストールにより、突然「機能しなくなる」可能性があるためです。これは、企業全体でのJavaアプリケーションの展開を複雑にする可能性があり、悪名高い「Installing-this-app-breaks-my-system」の問題がMicrosoftのDLLスキームで始まってから5年経った今でも、なぜ私たちはまだそれをはるかに超えて進歩していません。(実際、新しい.NETイニシアチブは、今説明した悪名高い「DLL-Hell」問題の解決を目指しています。)

このホワイトペーパーでは、特定のアプリケーションが独自のプライベートJREを受け取り、顧客(またはシステム管理者)を狂わせることなく複数のJava環境を共存できるようにJavaインストールを構成する方法について説明します...


8
上記の回答にあるリンクはもう存在しないと思います。同じ記事をここで見つけましたdocplayer.net/…–
Alok Mishra

3

SDKManを使用して、同じマシンに複数のバージョンのJava DevelopmentKitをインストールできます。

SDKManに関するいくつかのポイントは次のとおりです。

  1. SDKManは無料で使用でき、オープンソースコミュニティによって開発されています。
  2. SDKManはbashで記述されており、システムに存在する必要があるのはcurlおよびzip / unzipプログラムのみです。
  3. SDKManは、Java、Groovy、Scala、Kotlin、CeylonなどのJVM用に約29のソフトウェア開発キットをインストールできます。Ant、Gradle、Grails、Maven、SBT、Spark、Spring Boot、Vert.x。
  4. SDKManが自動的に処理するため、_HOMEおよびPATH環境変数の設定について心配する必要はありません。

SDKManは、Mac OSX、Linux、Cygwin、Solaris、FreeBSDなどのUNIXベースのプラットフォームで実行でき、次のコマンドを使用してインストールできます。

$ curl -s "https://get.sdkman.io" | bash  
$ source "$HOME/.sdkman/bin/sdkman-init.sh" 

SDKManはbashで記述されており、システムに存在するために必要なのはcurlzip / unzipのみであるためです。最初にCygwinをインストールすることにより、WindowsにもSDKManをインストールできます。または for Windows環境をから、上記のコマンドを実行ます。

コマンドsdk list javaは、SDKManを使用してインストールできるJavaバージョンのリストを提供します。

Java8のインストール

$ sdk install java 8.0.201-oracle

Java9のインストール

$ sdk install java 9.0.4-open 

Java11のインストール

$ sdk install java 11.0.2-open

Javaバージョンのアンインストール

11.0.2-openなどのJDKバージョンをアンインストールする場合は、次のように実行できます。

$ sdk uninstall java 11.0.2-open

現在のJavaバージョンの切り替え

すべての端末とアプリケーションに対して1つのバージョンのJDKをアクティブ化する場合は、次のコマンドを使用できます。

sdk default java <your-java_version>

上記のコマンドは、PATH変数とJAVA_HOME変数も自動的に更新します。詳細については、私の記事「同じマシンに複数のバージョンのJavaをインストールする方法」を参照してください。


Windows以外のユーザー向けです。
グムル

@gumuruh SDKManはbashで記述されており、システムに存在するために必要なのはcurlとzip / unzipのみであるため、Windowsをインストールすることもできます。最初にCygwinまたはGitBash for Windows環境をインストールしてから上記のコマンドを実行することにより、SDKManをWindowsにインストールすることもできます。
Naresh Joshi

2

特定のアプリケーションでは、JAVA_HOME環境変数の設定を異なる方法で変更できるはずです。

コマンドラインまたはバッチスクリプトから開始する場合set JAVA_HOME=C:\...\j2dskXXXは、JAVA_HOME環境を変更するために使用できます。

PATH正しいJavaバイナリを使用するために、環境変数を変更する必要がある場合もあります。これを行うには、を使用できますset PATH=%JAVA_HOME%\bin;%PATH%


2

「java-version:1.5」などを使用してJavaを呼び出すと、正しいバージョンのJavaで実行する必要があります。(明らかに、1.5を必要なバージョンに置き換えます。)

JavaがWindowsに適切にインストールされている場合、Javaが使用するレジストリに保存されている各バージョンのVMへのパスがあるため、Windowsの環境バージョンをいじる必要はありません。


これは「パブリック」JREでのみ機能すると思います。クライアントマシンに最適です。パブリックJREをインストールしない開発者にとっては少し面倒です。バッチファイルよりもはるかに優れています。
James Schek 2008年

2

または、リンクを使用します。実行中の環境でPATHを更新するのはかなり不快ですが、新しいバージョンのJRE / JDKへのリンクを再作成するのは簡単です。そう:

  • 使用するJDKの異なるバージョンをインストールします
  • ジャンクションまたは組み込みのmklinkコマンドを使用して、そのフォルダーへのリンクを作成します
  • リンクへのPATHを設定します
  • 他のバージョンのJavaを使用する場合は、リンクを削除して新しいリンクを作成します。PATH/ JAVA_HOME /ハードコードされたスクリプトは変更されません。


1

Java Web Startを使用する場合(ローカルファイルシステムであっても、任意のURLからアプリケーションを起動できます)、アプリケーションに適したバージョンを見つけることができます。


0

Java Web Startを使用すると、複数のJREをインストールして、必要なものを呼び出すことができます。勝つと、.batファイルを作成できます。

1-オンラインバージョン:< your_JRE_version \ bin \ javaws.exe> -localfile -J-Djnlp.application.href = <.jnlp file.jnlpのURL > -localfile -J "< path_temp_jnlp_file_ .jnlp>"

2-キャッシュから起動:< your_JRE_version \ bin \ javaws.exe> -localfile -J "< path_of_your_local_jnlp_file .jnlp>"

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.