Nhiều phiên bản Java chạy đồng thời trong Windows


83

Chúng tôi có một vài ứng dụng chạy trên Java 5 và bây giờ muốn đưa vào một ứng dụng dựa trên Java 6. Cả hai phiên bản java có thể cùng tồn tại trong Windows không?

Có bảng điều khiển nào để đặt phiên bản Java thích hợp cho các ứng dụng khác nhau không, hoặc bất kỳ cách nào khác để thiết lập, phiên bản Java nào sẽ được sử dụng để chạy ứng dụng cụ thể đó?

Câu trả lời:


60

Tất nhiên bạn có thể sử dụng nhiều phiên bản Java trong Windows. Và các ứng dụng khác nhau có thể sử dụng các phiên bản Java khác nhau. Ứng dụng của bạn được bắt đầu như thế nào? Thông thường, bạn sẽ có một tệp hàng loạt, nơi có một cái gì đó như

java ...

Điều này sẽ tìm kiếm tệp thực thi Java bằng cách sử dụng biến PATH. Vì vậy, nếu Java 5 lần đầu tiên xuất hiện trên PATH, bạn sẽ gặp sự cố khi chạy ứng dụng Java 6. Sau đó, bạn nên sửa đổi tệp hàng loạt để sử dụng một phiên bản Java nhất định, ví dụ bằng cách xác định một biến môi trường JAVA6HOMEvới giá trị C:\java\java6(nếu Java 6 được cài đặt trong thư mục này) và thay đổi cách gọi tệp hàng loạt

%JAVA6HOME%\bin\java ...

9
Trên Windows, để dừng trình cài đặt Java thay thế cài đặt Java hiện có (được cài đặt lần đầu) của bạn, bạn phải chuyển nó đối số STATIC = 1 tức là chạy từ dòng lệnh "jre-6u24-windows-i586-s.exe / STATIC = 1"
Tom Chiverton

4
Khi tôi thực hiện "jdk-6u27-windows-x64.exe / STATIC = 1" trên Windows 7 64, nó không cài đặt được, nó chỉ xuất hiện một cửa sổ bật lên hiển thị cách sử dụng cho msiexec.
yetimoner

7
Theo tài liệu này từ Oracle, nó thực sự jdk-...exe STATIC=1. Tôi đã thử điều này và nó hoạt động.
Matt

1
Các bạn đang nhầm lẫn giữa JDK và JRE. JRE không coi STATIClà đối số, nhưng JDK cũng vậy?
Danijel

1
@reallyinsane Tôi không thể hiểu điều này. Câu trả lời không phải là đơn giản cho một người mới. Bạn có thể liên kết cho tôi một hướng dẫn hoàn chỉnh được không?
CodingOnSteroid

12

Hoàn toàn có thể cài đặt song song nhiều phiên bản JRE / JDK. Hơn nữa, bạn không phải làm bất cứ điều gì đặc biệt để điều đó xảy ra, vì Sun đang tạo một thư mục khác nhau cho mỗi thư mục (trong Tập tin chương trình).

Không có bảng điều khiển để kiểm tra JRE nào hoạt động cho từng ứng dụng. Về cơ bản, JRE sẽ hoạt động sẽ là biến đầu tiên trong biến môi trường PATH của bạn. Bạn có thể thay đổi điều đó hoặc biến JAVA_HOME hoặc tạo các tệp cmd / bat cụ thể để khởi chạy các ứng dụng bạn muốn, mỗi tệp có một đường dẫn JRE khác nhau.


2
Tôi không tin điều này đúng với Windows.
cmcginty

@Casey, Bạn đang đề cập đến phần nào? Tại sao nó không phải là sự thật?
Pacerier

1
Câu trả lời này giải thích vấn đề. Sổ đăng ký Windows được sử dụng để định vị phiên bản mặc định của java.
binarysubstrate

Mặc dù thường đúng là một chương trình Java sẽ chạy tốt trên phiên bản Java mới sau đó là phiên bản mà nó được phát triển, nhưng không có gì đảm bảo. Ngoài ra, biến môi trường JAVA_HOME cần được cập nhật trong hầu hết các trường hợp.
Patrick O'Hara

11

Tôi kinh hoàng trước sự vụng về của các ý tưởng CLASSPATH, JAVA_HOME và PATH, trong Windows, để theo dõi các tệp Java. Tôi đến đây, vì có nhiều JRE và cách hài lòng với nó. Không có thông tin rút lui, từ một người thông minh hơn tôi rất nhiều, tôi thà chỉ vào bài báo của anh ấy về vấn đề này, mà đối với tôi, giải quyết nó một cách hoàn hảo.

Bài viết của: Ted Neward: Nhiều ngôi nhà Java: Cung cấp cho các ứng dụng Java JRE của riêng họ

Với sự phát triển theo cấp số nhân của Java như một ngôn ngữ phát triển phía máy chủ, đã dẫn đến sự phát triển theo cấp số nhân tương đương trong các công cụ, môi trường, khuôn khổ và phần mở rộng phát triển Java. Thật không may, không phải tất cả các công cụ này đều hoạt động tốt với nhau trong cùng một cài đặt Java VM. Một số yêu cầu môi trường tuân thủ Servlet 2.1, một số yêu cầu 2.2. Một số chỉ chạy dưới JDK 1.2 trở lên, một số dưới JDK 1.1 (và không cao hơn). Một số yêu cầu gói "com.sun.swing" từ trước Swing 1.0 ngày, một số khác yêu cầu tên gói "javax.swing".

Tệ hơn nữa, vấn đề này có thể được tìm thấy ngay cả trong doanh nghiệp công ty, vì các hệ thống được phát triển bằng Java chỉ từ sáu tháng trước có thể đột nhiên "không hoạt động" do việc cài đặt một số Java Extension được yêu cầu bởi một bản phát hành ứng dụng mới (dường như không liên quan). Điều này có thể làm phức tạp việc triển khai các ứng dụng Java trong toàn công ty và khiến khách hàng tự hỏi chính xác tại sao, 5 năm sau khi bắt đầu tai ương khét tiếng "Installing-this-app-break-my-system" bắt đầu với các chương trình DLL của Microsoft, chúng tôi vẫn chưa không tiến triển nhiều hơn thế. (Trên thực tế, sáng kiến ​​.NET mới thực sự tìm cách giải quyết vấn đề "DLL-Hell" khét tiếng vừa được mô tả.)

Bài báo này mô tả cách định cấu hình cài đặt Java sao cho một ứng dụng nhất định nhận được JRE riêng, riêng tư, cho phép nhiều môi trường Java cùng tồn tại mà không khiến khách hàng (hoặc quản trị viên hệ thống) phát điên ...


8
Tôi nghĩ rằng liên kết được đưa ra trong câu trả lời ở trên không còn tồn tại nữa. Tôi đã tìm thấy bài viết tương tự ở đây docplayer.net/…
Alok Mishra

3

Chúng tôi có thể cài đặt nhiều phiên bản của bộ công cụ Phát triển Java trên cùng một máy bằng SDKMan.

Một số điểm về SDKMan như sau:

  1. SDKMan được sử dụng miễn phí và nó được phát triển bởi cộng đồng mã nguồn mở.
  2. SDKMan được viết bằng bash và nó chỉ yêu cầu các chương trình curlzip / giải nén có mặt trên hệ thống của bạn.
  3. SDKMan có thể cài đặt khoảng 29 Bộ phát triển phần mềm cho JVM như Java, Groovy, Scala, Kotlin và Ceylon. Ant, Gradle, Grails, Maven, SBT, Spark, Spring Boot, Vert.x.
  4. Chúng ta không cần phải lo lắng về việc thiết lập các biến môi trường _HOMEPATHbiến môi trường vì SDKMan tự động xử lý.

SDKMan có thể chạy trên mọi nền tảng dựa trên UNIX như Mac OSX, Linux, Cygwin, Solaris và FreeBSD và chúng tôi có thể cài đặt nó bằng các lệnh sau:

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

Bởi vì SDKMan được viết bằng bash và chỉ yêu cầu curlzip / unzip có trên hệ thống của bạn. Bạn cũng có thể cài đặt SDKMan trên windows bằng cách cài đặt Cygwin hoặc Git Bash cho môi trường Windows trước tiên và sau đó chạy các lệnh trên.

Command sdk list javasẽ cung cấp cho chúng tôi danh sách các phiên bản java mà chúng tôi có thể cài đặt bằng SDKMan.

Cài đặt Java 8

$ sdk install java 8.0.201-oracle

Cài đặt Java 9

$ sdk install java 9.0.4-open 

Cài đặt Java 11

$ sdk install java 11.0.2-open

Gỡ cài đặt phiên bản Java

Trong trường hợp bạn muốn gỡ cài đặt bất kỳ phiên bản JDK nào, ví dụ: 11.0.2-open, bạn có thể thực hiện như sau:

$ sdk uninstall java 11.0.2-open

Chuyển phiên bản Java hiện tại

Nếu bạn muốn kích hoạt một phiên bản JDK cho tất cả các thiết bị đầu cuối và ứng dụng, bạn có thể sử dụng lệnh

sdk default java <your-java_version>

Các lệnh trên cũng sẽ tự động cập nhật các biến PATH và JAVA_HOME. Bạn có thể đọc thêm bài viết của tôi Cách cài đặt nhiều phiên bản Java trên cùng một máy .


nó dành cho người dùng không phải windows.
gumuruh

@gumuruh Bạn cũng có thể cài đặt nó windows, vì SDKMan được viết bằng bash và chỉ yêu cầu curl và zip / unzip có trên hệ thống của bạn. Bạn cũng có thể cài đặt SDKMan trên windows bằng cách cài đặt Cygwin hoặc Git Bash cho môi trường Windows trước tiên và sau đó chạy các lệnh trên.
Naresh Joshi

2

Có thể thay đổi cài đặt biến môi trường JAVA_HOME khác cho các ứng dụng cụ thể.

Khi bắt đầu từ dòng lệnh hoặc từ tập lệnh lô, bạn có thể sử dụng set JAVA_HOME=C:\...\j2dskXXXđể thay đổi môi trường JAVA_HOME.

Có thể bạn cũng cần thay đổi PATHbiến môi trường để sử dụng tệp nhị phân java chính xác. Để làm điều này, bạn có thể sử dụng set PATH=%JAVA_HOME%\bin;%PATH%.


2

Gọi Java với "java -version: 1.5", v.v. phải chạy với phiên bản Java chính xác. (Rõ ràng là thay thế 1.5 bằng phiên bản bạn muốn.)

Nếu Java được cài đặt đúng cách trên Windows, có các đường dẫn đến vm cho mỗi phiên bản được lưu trữ trong sổ đăng ký mà nó sử dụng, do đó bạn không cần phải làm phiền với các phiên bản môi trường trên Windows.


Tôi tin rằng điều này chỉ hoạt động với JRE's "Public". Tuyệt vời trên máy khách, một chút khó khăn cho các nhà phát triển không cài đặt JRE công khai. Tốt hơn nhiều so với một tệp hàng loạt.
James Schek

2

Hoặc sử dụng các liên kết. Mặc dù khá khó chịu khi cập nhật PATH trong môi trường đang chạy, nhưng thật dễ dàng để tạo lại liên kết tới phiên bản mới của JRE / JDK. Vì thế:

  • cài đặt các phiên bản JDK khác nhau mà bạn muốn sử dụng
  • tạo liên kết đến thư mục đó bằng đường giao nhau hoặc bằng lệnh mklink tích hợp
  • đặt PATH cho liên kết
  • Nếu sử dụng phiên bản java khác, hãy xóa liên kết, tạo một liên kết mới, các tập lệnh PATH / JAVA_HOME / hardcoded vẫn không bị ảnh hưởng


1

Nếu bạn sử dụng Java Web Start (bạn có thể khởi động ứng dụng từ bất kỳ URL nào, ngay cả hệ thống tệp cục bộ), nó sẽ đảm nhận việc tìm kiếm phiên bản phù hợp cho ứng dụng của bạn.


0

Sử dụng Java Web Start, bạn có thể cài đặt nhiều JRE, sau đó gọi những gì bạn cần. Trên win, bạn có thể tạo tệp .bat:

1- phiên bản trực tuyến: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J-Djnlp.application.href = < url của tệp .jnlp .jnlp> -localfile -J "< path_temp_jnlp_file_ .jnlp>"

2- khởi chạy từ bộ nhớ cache: < your_JRE_version \ bin \ javaws.exe> ​​-localfile -J "< path_of_your_local_jnlp_file .jnlp>"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.