簡體   English   中英

在 Windows 下同時運行多個 Java 版本

[英]Multiple Java versions running concurrently under Windows

我們有幾個運行在 Java 5 上的應用程序,現在想引入一個基於 Java 6 的應用程序。兩個 Java 版本可以在 Windows 下一起運行嗎?

是否有任何控制面板可以為不同的應用程序設置適當的 Java 版本,或者有任何其他設置方式,將使用哪個版本的 Java 來運行該特定應用程序?

當然,您可以在 Windows 下使用多個版本的 Java。 並且不同的應用程序可以使用不同的 Java 版本。 您的應用程序是如何啟動的? 通常你會有一個批處理文件,其中有類似的東西

java ...

這將使用 PATH 變量搜索 Java 可執行文件。 因此,如果 Java 5 位於 PATH 的第一個位置,那么在運行 Java 6 應用程序時就會出現問題。 然后,您應該修改批處理文件以使用某個 Java 版本,例如通過定義一個值為C:\\java\\java6 JAVA6HOME的環境變量JAVA6HOME (如果 Java 6 安裝在此目錄中)並更改批處理文件調用

%JAVA6HOME%\bin\java ...

我對在 Windows 中跟蹤 Java 文件的 CLASSPATH、JAVA_HOME 和 PATH 想法的笨拙感到震驚。 我來到這里,因為有多個 JRE,以及如何滿足它。 沒有反芻信息,來自一個比我更聰明的人,我寧願指向他關於這個問題的文章,對我來說,它完美地解決了這個問題。

文章作者:Ted Neward: 多個 Java 主頁:為 Java 應用程序提供自己的 JRE

隨着 Java 作為服務器端開發語言的指數級增長,Java 開發工具、環境、框架和擴展也同樣呈指數級增長。 不幸的是,並非所有這些工具都可以在同一個 Java VM 安裝下很好地協同工作。 有些需要符合 Servlet 2.1 的環境,有些需要 2.2。 有些只在 JDK 1.2 或更高版本下運行,有些在 JDK 1.1 下運行(沒有更高版本)。 有些需要 Swing 1.0 之前的“com.sun.swing”包,其他需要“javax.swing”包名稱。

更糟糕的是,這個問題甚至可以在企業內部發現,因為僅僅在六個月前使用 Java 開發的系統可能會突然“無法工作”,因為安裝了新的(看似無關的)應用程序版本所需的一些 Java 擴展。 這可能會使整個公司的 Java 應用程序部署復雜化,並讓客戶想知道為什么在臭名昭著的“安裝此應用程序破壞我的系統”問題始於 Microsoft 的 DLL 方案五年后,我們仍然沒有並沒有取得太大進展。 (事實上​​,新的 .NET 計划實際上試圖解決剛才描述的臭名昭著的“DLL-Hell”問題。)

本文介紹了如何配置 Java 安裝,以便給定的應用程序接收自己的私有 JRE,從而允許多個 Java 環境共存,而不會讓客戶(或系統管理員)發瘋……

絕對可以並行安裝多個 JRE/JDK 版本。 此外,您不必為此做任何特別的事情,因為 Sun 正在為每個文件夾創建一個不同的文件夾(在 Program Files 下)。

沒有控制面板來檢查哪個 JRE 適用於每個應用程序。 基本上,將工作的 JRE 將是您的 PATH 環境變量中的第一個。 您可以更改它或 JAVA_HOME 變量,或創建特定的 cmd/bat 文件來啟動您想要的應用程序,每個文件在路徑中都有不同的 JRE。

我們可以使用 SDKMan 在同一台機器上安裝多個版本的 Java 開發工具包。

SDKMan 的一些要點如下:

  1. SDKMan 是免費使用的,由開源社區開發。
  2. SDKMan 是用bash編寫的,它只需要在您的系統上存在curlzip/unzip程序。
  3. SDKMan 可以為 JVM 安裝大約 29 個軟件開發工具包,例如 Java、Groovy、Scala、Kotlin 和 Ceylon。 Ant、Gradle、Grails、Maven、SBT、Spark、Spring Boot、Vert.x。
  4. 我們不需要擔心設置_HOMEPATH環境變量,因為 SDKMan 會自動處理它。

SDKMan 可以在任何基於 UNIX 的平台上運行,例如 Mac OSX、Linux、Cygwin、Solaris 和 FreeBSD,我們可以使用以下命令安裝它:

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

因為 SDKMan 是用bash編寫的,並且只需要curlzip/unzip出現在您的系統上。 您也可以通過首先為 Windows環境安裝CygwinGit Bash ,然后運行上面的命令,在 Windows上安裝 SDKMan。

命令sdk list java將為我們提供一個 Java 版本列表,我們可以使用 SDKMan 安裝這些版本。

安裝 Java 8

$ sdk install java 8.0.201-oracle

安裝 Java 9

$ sdk install java 9.0.4-open 

安裝 Java 11

$ sdk install java 11.0.2-open

卸載 Java 版本

如果您想卸載任何 JDK 版本,例如 11.0.2-open,您可以按如下方式進行:

$ sdk uninstall java 11.0.2-open

切換當前 Java 版本

如果要為所有終端和應用程序激活一個版本的JDK,可以使用命令

sdk default java <your-java_version>

以上命令還將自動更新 PATH 和 JAVA_HOME 變量。 您可以在我的文章如何在同一台機器上安裝多個版本的 Java 中閱讀更多內容。

應該可以針對特定應用程序以不同方式更改 JAVA_HOME 環境變量的設置。

從命令行或批處理腳本啟動時,您可以使用set JAVA_HOME=C:\\...\\j2dskXXX來更改 JAVA_HOME 環境。

您可能還需要更改PATH環境變量以使用正確的 java 二進制文件。 為此,您可以使用set PATH=%JAVA_HOME%\\bin;%PATH%

使用“java -version:1.5”等調用 Java 應該使用正確的 Java 版本運行。 (顯然用你想要的版本替換 1.5。)

如果 Java 正確安裝在 Windows 上,那么它使用的注冊表中存儲的每個版本都有指向 vm 的路徑,因此您無需在 Windows 上弄亂環境版本。

或者使用鏈接。 雖然在運行環境中更新 PATH 相當不愉快,但很容易重新創建指向新版本 JRE/JDK 的鏈接。 所以:

  • 安裝要使用的不同版本的 JDK
  • 通過 聯結或內置 mklink 命令創建指向該文件夾的鏈接
  • 將 PATH 設置為鏈接
  • 如果要使用其他版本的java,刪除鏈接,新建一個,PATH/JAVA_HOME/hardcoded scripts保持不變

使用我自己的 Java 版本啟動 JMeter 時,我使用了一個簡單的腳本

setlocal
set JAVA_HOME="c:\java8"
set PATH=%JAVA_HOME%\bin;%PATH%;
java -version

要擁有 Java“便攜式”,您可以在此處使用此方法:

https://www.whitebyte.info/programming/java/how-to-install-a-portable-jdk-in-windows-without-admin-rights

如果您使用Java Web Start (您可以從任何 URL 啟動應用程序,甚至是本地文件系統),它將負責為您的應用程序找到正確的版本。

使用Java Web Start,你可以安裝多個JRE,然后調用你需要的。 在 win 上,您可以制作一個 .bat 文件:

1- 在線版本:< your_JRE_version \\bin\\javaws.exe> -localfile -J-Djnlp.application.href=< .jnlp 文件的url .jnlp> -localfile -J "< path_temp_jnlp_file_ .jnlp>"

2- 從緩存啟動:< your_JRE_version \\bin\\javaws.exe> -localfile -J "< path_of_your_local_jnlp_file .jnlp>"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM