2008-11-07 58 views
62

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ể sống cùng nhau trong Windows không?Nhiều phiên bản Java chạy đồng thời trong Windows

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 hay 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ể đó?

Trả lời

52

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 đã bắt đầu như thế nào? Thông thường, bạn sẽ có một tệp hàng loạt có một số thứ như

java ... 

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

%JAVA6HOME%\bin\java ... 
+8

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

+3

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, nó chỉ trả về một cửa sổ pop-up hiển thị cách sử dụng cho msiexec. – yetimoner

+6

Theo [tài liệu này từ Oracle] (http://docs.oracle.com/javase/7/docs/webnotes/install/windows/jre-installer-options.html) nó thực sự là 'jdk -... exe STATIC = 1'. Tôi đã thử nó và nó đã hoạt động. – Matt

11

Đó là hoàn toàn có thể cài đặt side-by-side vài 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 cho mỗi (trong Program Files).

Không có bảng điều khiển để kiểm tra xem JRE nào hoạt động cho từng ứng dụng. Về cơ bản, JRE sẽ hoạt động sẽ là lầ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 mà bạn mong muốn, mỗi tệp có một JRE khác nhau trong đường dẫn.

+2

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

+0

@Casey, bạn đang đề cập đến phần nào? Tại sao nó không đúng? – Pacerier

+0

[Câu trả lời] (http://stackoverflow.com/a/5493139/3182836) giải thích sự cố. Windows registry được sử dụng để định vị phiên bản mặc định của java. – binarysubstrate

1

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

Khi bắt đầu từ dòng lệnh hoặc từ tập lệnh theo 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 phải thay đổi biến môi trường PATH để sử dụng đúng nhị phân java. Để thực hiện việc này, bạn có thể sử dụng set PATH=%JAVA_HOME%\bin;%PATH%.

1

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

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

+0

Tôi tin rằng điều này chỉ hoạt động với JRE "Công khai". Tuyệt vời trên các máy khách, một chút đau 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 tin thực thi. –

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 nhiệm việc tìm phiên bản phù hợp cho ứng dụng của bạn.

8

Tôi đã kinh hãi 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 tương tác với nó. Nếu không có thông tin hồi sinh, từ một chàng trai thông minh hơn tôi nhiều, tôi thà chỉ vào bài viết 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.

Điều bởi: Ted Neward: Multiple Java Homes: Giving Java Apps Their Own JRE

Với sự tăng trưởng theo cấp số nhân của Java như một ngôn ngữ phát triển server-side đã đến một equivablent tăng trưởng theo cấp số nhân trong các công cụ phát triển Java, môi trường, khuôn khổ, và phần mở rộng. Thật không may, không phải tất cả các công cụ này đều chơi độc đáo 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 các gói "com.sun.swing" từ pre-Swing 1.0 ngày, các gói 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ủa công ty, vì hệ thống được phát triển bằng cách sử dụng Java từ 6 tháng trước có thể đột ngột "không hoạt động" do cài đặt một số Tiện ích mở rộng Java không có liên quan) phát hành ứng dụng. Điều này có thể làm phức tạp việc triển khai các ứng dụng Java trên toàn công ty và dẫn khách hàng tự hỏi chính xác lý do tại sao, sau năm năm bắt đầu các tai ương "Cài đặt-ứng dụng-ứng dụng-phá-hệ thống" này bắt đầu với các chương trình DLL của Microsoft, chúng tôi vẫn chưa tiến xa 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 chỉ mô tả.)

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

+4

+1 cho "kinh hoàng trước sự vụng về của [Java]". – Pacerier

+2

Tôi nghĩ rằng liên kết được đưa ra trong câu trả lời ở trên không tồn tại nữa. Tôi tìm thấy cùng một bài viết ở đây http://docplayer.net/15645854-Multiple-java-homes-giving-java-apps-their-own-jre-a -javageeks-com-white-paper.html –

2

Hoặc sử dụng 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, thật dễ dàng để tạo lại liên kết đến phiên bản JRE/JDK mới. Vì vậy:

  • cài đặt các phiên bản khác nhau của JDK bạn muốn sử dụng
  • tạo một liên kết đến thư mục đó bằng cách junction hoặc bằng built-in lệnh mklink
  • thiết lập PATH để liên kết
  • Nếu khác phiên bản java sẽ được sử dụng, xóa liên kết, tạo một tệp mới, các script PATH/JAVA_HOME/hardcoded vẫn bị ảnh hưởng
Các vấn đề liên quan