sử dụng phiên bản java khác nhau để chạy hai chương trình


8

Tôi đã cài đặt hai JREA JRE trên CentOS mới của mình vì Cassandra cần java7u25 trở lên trong khi iReport cần hoạt động với 1.6.

Bây giờ làm cách nào để khởi chạy từng chương trình từ dòng lệnh cho biết mỗi chương trình sẽ sử dụng phiên bản nào?

Tôi có phải thay đổi /etc/profiletập tin không? Nếu vậy thì thế nào?


Tôi chưa cài đặt Java ... nhưng bạn đã thử (nếu bạn đã cài đặt cả hai phiên bản Java), bạn có thể có thể chạy chúng như thế Java6 path/to/iReportJava7 path/to/Cassandrahoặc chỉ định một đường dẫn đầy đủ để thực thi Java/path/to/Java
Alko

Câu trả lời:


7

Không có điểm nào để có cả hai $PATHvì chỉ có một sẽ được sử dụng. Bạn có thể liên kết một tên với một tên khác - ví dụ java6- Tôi chưa bao giờ thử w / java này và không chắc nó có hoạt động không.

Cách tốt nhất để làm điều này là cài đặt một trong số chúng (có lẽ là 1.6) ở một vị trí như thế /opt/java6, để lại 1.7 làm mặc định. Sau đó, khi bạn muốn sử dụng 6:

export PATH=/opt/java6/bin:$PATH

Và bắt đầu nó từ dòng lệnh. Bạn cũng có thể đặt tất cả những thứ đó lại với nhau trong một kịch bản. Đừng cố chạy Cassandra từ cùng một vỏ sau đó trừ khi bạn loại bỏ nó khỏi $PATH(cách dễ dàng để kiểm tra là echo $PATH).

Để tự động hóa điều này cho một ứng dụng cụ thể:

#!/bin/sh

export PATH=/opt/java6/bin:$PATH
exec /path/to/application

Sau đó, bạn có thể đặt nó ở đâu đó trong thông thường $PATH(ví dụ /usr/local/bin:), đảm bảo rằng nó có thể thực thi được ( chmod 755 whatever.sh) và khởi động ứng dụng theo cách đó. Sau đó nó sẽ không ảnh hưởng đến $PATHquá trình khởi chạy nó.


Tôi không thấy lý do tại sao bạn phải mở vỏ thứ ba. Bạn chỉ muốn thay đổi đường dẫn trong cái thứ hai (thông qua export) sau đó bắt đầu iReport. Sử dụng hai tab riêng biệt trong một thiết bị đầu cuối GUI sẽ hoạt động cho việc này. Tôi đã chỉnh sửa những gì tôi muốn nói bằng cách "đặt cái này vào một kịch bản", nếu bạn muốn làm điều đó.
goldilocks

RHEL8 khuyến nghị JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk yourprogramnhưng tôi gặp khó khăn với nó trên Debian.
Công suất tối đa

Tôi biết java mặc định có thể được thay đổi update-alternatives --config javanhưng bạn sẽ cần thay đổi điều này mỗi khi bạn chuyển đổi giữa các ứng dụng. Lệnh "java" cơ bản chỉ là các liên kết tượng trưng cho một trong các phiên bản trong / usr / libs / jvm ... nếu bạn được cung cấp nguồn java thay vì mã byte được biên dịch trước, bạn cũng có thể cần phải thay đổi javacbiên dịch java.
Sức mạnh tối đa

0

Điều này hoạt động cả khởi chạy từ trình giả lập thiết bị đầu cuối và từ trình khởi chạy biểu tượng máy tính để bàn cho một chương trình tôi có sẽ không chạy với openJRE-11 mặc định của tôi. Sử dụng buster Debian-10 với XFCE

/bin/sh -c 'JAVA_HOME=/usr/lib/jvm/java-8-oracle/ PATH=$JAVA_HOME/bin/:$PATH /home/username/myapplication' Cũng có thể thử: JAVA_HOME=/usr/lib/jvm/java-8-oracle/ PATH=$JAVA_HOME/bin/:$PATH /home/username/myapplication

Ngoài ra, bạn có thể tạo bí danh cho mỗi phiên bản java để một cái gì đó ngắn như j8o = /bin/sh -c 'JAVA_HOME=/usr/lib/jvm/java-8-oracle/ PATH=$JAVA_HOME/bin/:$PATHvà lệnh hàng ngày cuối cùng sẽ làj8o ./myapplication

Để thay đổi java mặc định, update-alternatives --config javasau đó làm theo lời nhắc. Điều tương tự có thể được sử dụng để thiết lập mặc định cho javac (trình biên dịch mã byte) nếu cần. Có thể cần sudo để thay đổi mặc định.

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.