lý do tồn tại của biến môi trường JAVA_HOME là gì?


92

Nhiều ứng dụng dựa trên java yêu cầu đặt biến env JAVA_HOME. Mục đích của biến này là gì?


5
bạn có thể đọc ở đây
Sergey Vedernikov

2
Tôi thấy câu hỏi vẫn chưa có câu trả lời. Để tự thực thi java, không cần thiết phải có biến này nếu bạn có thư mục với tệp nhị phân trong đường dẫn. Tất cả các câu trả lời đều chỉ ra điều hiển nhiên: "Nơi java đã được cài đặt". Nhưng tại sao: ý nghĩa của việc chạy các ứng dụng java là gì?
Wolf,

7
bất chấp tất cả các nhận xét và câu trả lời này, tôi không thấy lý do thực tế nào để đặt biến môi trường này. Không có cơ sở lý luận. Tôi đến đây từ việc cố gắng thiết lập điều này bằng wsdl2java. Nếu tôi không sử dụng công cụ này, không cần biến env .... dường như chỉ là một số công cụ sử dụng var này. nhưng tại sao?
Thufir

@Thufir - Tuy nhiên, tôi không thấy lý do được nêu rõ ràng ở đâu. - JAVA_HOME chỉ là quy ước. Nó không có bất kỳ ý nghĩa đặc biệt nào ngoài việc mọi người đồng ý sử dụng nó AFAIK - Công dụng duy nhất mà tôi thấy là nó cung cấp cho các công cụ khả năng phân biệt giữa JRE thường được đặt trong biến PATH và JDK. Thông thường JAVE_HOME được đặt thành JDK. - Nó rõ ràng. Không có việc xử lý thứ tự các thư mục như bạn có với PATH, nơi có thể có nhiều nơi để tìm exe java.
Rohan

Câu trả lời:


22

Biến môi trường là các chuỗi chứa thông tin như ổ đĩa, đường dẫn hoặc tên tệp.

Các biến môi trường JAVA_HOME điểm đến thư mục nơi mà môi trường thời gian chạy Java (JRE) được cài đặt trên máy tính của bạn.


40
Một điều chỉnh: JAVA_HOME phải trỏ đến một JDK không phải là một JRE. Nhiều ứng dụng không quan tâm đến sự khác biệt nhưng nó có ý nghĩa đối với một số người.
Chris Nava,

4
Cũng có thư mục JRE có sẵn trong JDK. Do đó, với sự trợ giúp của JAVA_HOME, một ứng dụng có thể định vị JDK cũng như JRE.
chàng trai giả mạo

@ChrisNava: Có vẻ như việc trỏ JAVA_HOME tới cài đặt JRE là hợp lệ trong một số trường hợp (hầu hết các trường hợp không phát triển mà tôi đoán): stackoverflow.com/questions/17601827/… . Vì vậy, nói "nên" là nói quá nhiều.
cic

18

Mục đích là để trỏ đến nơi Java được cài đặt. $JAVA_HOME/bin/javanên thực thi thời gian chạy Java.


4
Nhưng thật ngu ngốc, bởi vì java phải nằm trong đường dẫn và tệp nhị phân có thể tự định vị và mở các tệp khác bằng một đường dẫn tương đối.
LtWorf

3
Nó hữu ích khi java không có trên $ PATH, chẳng hạn như khi bạn có nhiều cài đặt SDK.
Haakon

Đối số đầu tiên của tệp nhị phân là tên đầy đủ của chính tệp thực thi, java không cần phải ở trong đường dẫn để tìm thư mục của chính nó.
LtWorf

@Haakon Là người đang cố gắng thiết lập nhiều JDK, tại sao bạn không muốn java trên đường dẫn? Làm cách nào để Windows định vị java từ java_home? Tôi nghĩ rằng đường dẫn ít nhiều được định nghĩa là "danh sách các vị trí mà hệ điều hành sẽ tìm kiếm các tệp thực thi".
LastStar007,

7

Khi bạn chạy một chương trình Java, trước tiên bạn cần khởi động JVM, thông thường điều này được thực hiện bằng cách chạy tệp thực thi, trên Windows thì đó là java.exe . Bạn có thể hiểu điều đó theo nhiều cách, chẳng hạn như chỉ cần đưa ra một đường dẫn đầy đủ:

C:\somedir\bin\java.exe

hoặc có thể có nó trên PATH của bạn.

Bạn chỉ định làm đối số dòng lệnh một số tệp lớp hoặc tệp Jar chứa tệp lớp là chương trình của bạn. Nhưng điều đó vẫn chưa đủ, bản thân java.exe cần nhiều tài nguyên khác, không nhất là tất cả các thư viện Java. Bằng cách đặt biến môi trường JAVA_HOME, bạn chỉ định nơi JRE, và do đó tất cả các tài nguyên thời gian chạy đó, sẽ được tìm thấy. Bạn nên đảm bảo rằng Java cụ thể mà bạn thực thi khớp với cài đặt của JAVA_HOME.

Bạn cũng có thể cần phải bắt JAVA_HOME\binđầu sớm con đường của mình để nếu nó java.exetạo ra một bản sao của chính nó (ví dụ để biên dịch JSP) thì nó sẽ chọn đúng phiên bản.


5

JAVA_HOMElà một biến môi trường .

Nó phải được thiết lập trên hệ điều hành khác nhau. Kiểm tra các liên kết sau đây.

Cũng xem ở đây để biết thêm thông tin.


1
Bạn đang nhầm environmentlẫn path, đó là những thứ khác nhau nhưng được sử dụng trong Windows giống hệt như trong Linux.
Val

1
@val chỉ ra, điều đó đã được sửa chữa trong câu trả lời của anh ấy.
barlop

Chỉ cần thêm vào danh sách JAVA_HOME trong Windows 10
filip_j

5

Theo @dirai ở đây JAVA_HOMEkhông được sử dụng bởi chính Java mà bởi một số công cụ của bên thứ ba như Apache Tomcat chẳng hạn. Tuy nhiên, hầu hết các ứng dụng sẽ hoạt động mà không có biến này được đặt nhưng một số có thể hiển thị hành vi không mong muốn.


3

JAVA_HOMEcho phép bạn chạy bất kỳ cài đặt java nào. Ngay cả khi bạn có /usr/lib/jvm/java-1.8.0/bin/java trong PATH trước, sẽ rất hữu ích khi có thể nói JAVA_HOME=/usr/lib/jvm/java-1.5.0và đặt "java" mặc định mà bạn chạy các chương trình sử dụng cái kia, thay vào đó, như một vấn đề của cài đặt môi trường. Điều này cho phép lập trình viên sử dụng java mà họ cần, ngay cả khi nó không được cài đặt ở vị trí hệ thống bình thường và kiểm tra hoặc cung cấp khả năng tương thích ngược với phiên bản thay thế đó. Và nó không dễ bị đặt lại trong PATH bởi một chương trình đã cài đặt khác, chẳng hạn như bản cập nhật phiên bản chính cho chính java.

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.