สาเหตุของการมีตัวแปรสภาพแวดล้อม JAVA_HOME คืออะไร?


94

แอ็พพลิเคชันที่ใช้ java จำนวนมากต้องการตั้งค่าตัวแปร JAVA_HOME env จุดประสงค์ของตัวแปรนี้คืออะไร?


5
คุณสามารถอ่านได้ที่นี่
Sergey Vedernikov

2
ฉันพบว่าคำถามยังไม่มีคำตอบ ในการรัน java เองไม่จำเป็นต้องมีตัวแปรนี้หากคุณมีโฟลเดอร์ที่มีไบนารีอยู่ในพา ธ คำตอบทั้งหมดชี้ให้เห็นชัดเจน: "ที่ติดตั้ง java" แต่ทำไม: ความหมายของการเรียกใช้แอปพลิเคชัน Java คืออะไร?
Wolf

7
แม้จะมีความคิดเห็นและคำตอบทั้งหมดนี้ แต่ฉันไม่เห็นเหตุผลที่แท้จริงในการตั้งค่าตัวแปรสภาพแวดล้อมนี้ ไม่มีเหตุผล ฉันมาที่นี่จากการพยายามตั้งค่านี้ด้วย wsdl2java ถ้าฉันไม่ได้ใช้เครื่องมือนี้ก็ไม่จำเป็นต้องใช้ตัวแปร env .... ดูเหมือนว่าเครื่องมือบางตัวจะใช้ตัวแปรนี้ แต่ทำไม?
Thufir

@ Thufir - ฉันไม่เห็นเหตุผลที่ระบุไว้อย่างชัดเจน แต่อย่างใด - JAVA_HOME เป็นเพียงแบบแผน มันไม่มีความหมายพิเศษนอกเหนือจากที่ทุกคนเห็นด้วยที่จะใช้ AFAIK - สิ่งเดียวที่ฉันเห็นคือมันช่วยให้เครื่องมือสามารถแยกความแตกต่างระหว่าง JRE ซึ่งปกติจะตั้งค่าในตัวแปร PATH และ JDK โดยปกติ JAVE_HOME จะตั้งค่าเป็น JDK - มันชัดเจน ไม่มีการจัดการกับลำดับของไดเร็กทอรีเช่นเดียวกับที่คุณมีกับ PATH ซึ่งอาจมีหลายที่ในการค้นหา java exe
Rohan

คำตอบ:


22

ตัวแปรสภาพแวดล้อมคือสตริงที่มีข้อมูลเช่นไดรฟ์เส้นทางหรือชื่อไฟล์

ตัวแปรสภาพแวดล้อม JAVA_HOMEจุดไปยังไดเรกทอรีที่สภาพแวดล้อมรันไทม์ Java (JRE) ติดตั้งบนคอมพิวเตอร์ของคุณ


40
การแก้ไขหนึ่งครั้ง: JAVA_HOME ควรชี้ไปที่ JDK ไม่ใช่ JRE แอพจำนวนมากไม่สนใจความแตกต่าง แต่มีความสำคัญสำหรับบางคน
Chris Nava

4
นอกจากนี้ยังมีโฟลเดอร์ JRE ใน JDK ดังนั้นด้วยความช่วยเหลือของ JAVA_HOME แอปพลิเคชันสามารถค้นหา JDK และ JRE
จอมโกง

@ChrisNava: ดูเหมือนว่าชี้ JAVA_HOME กับการติดตั้ง JRE ถูกต้องในบางกรณี (กรณีการพัฒนามากที่สุดไม่ใช่ฉันเดา): stackoverflow.com/questions/17601827/... ดังนั้นการพูดว่า "ควร" จึงเป็นการพูดมากเกินไป
cic

18

จุดประสงค์คือชี้ไปที่ที่ติดตั้ง Java $JAVA_HOME/bin/javaควรรันรันไทม์ Java


4
แต่มันโง่เพราะ java ควรอยู่ในเส้นทางและไบนารีสามารถค้นหาตัวเองและเปิดไฟล์อื่น ๆ โดยใช้พา ธ สัมพัทธ์
LtWorf

3
จะมีประโยชน์เมื่อ java ไม่ได้อยู่ใน $ PATH เช่นเมื่อคุณติดตั้ง SDK หลายรายการ
Haakon

อาร์กิวเมนต์แรกของไบนารีคือชื่อเต็มของตัวเรียกใช้งาน java ไม่จำเป็นต้องอยู่ในเส้นทางเพื่อค้นหาไดเร็กทอรีของตัวเอง
LtWorf

@Haakon เนื่องจากมีคนพยายามตั้งค่า JDK หลายตัวทำไมคุณถึงไม่ต้องการ java บนเส้นทาง? Windows ค้นหา java จาก java_home ได้อย่างไร ฉันคิดว่าเส้นทางถูกกำหนดไว้มากหรือน้อยว่า "รายการตำแหน่งที่ระบบปฏิบัติการจะมองหาไฟล์ปฏิบัติการ"
LastStar007

7

เมื่อคุณเรียกใช้โปรแกรม Java ที่คุณจำเป็นต้องเริ่มแรก JVM โดยทั่วไปนี้จะทำโดยการเรียกใช้ปฏิบัติการบน Windows นี้เป็นjava.exe คุณสามารถทำได้หลายวิธีเช่นให้เส้นทางแบบเต็ม:

C:\somedir\bin\java.exe

หรืออาจมีบนเส้นทางของคุณ

คุณระบุเป็นอาร์กิวเมนต์บรรทัดคำสั่งไฟล์คลาสหรือไฟล์ Jar ที่มีไฟล์คลาสซึ่งเป็นโปรแกรมของคุณ แต่นั่นยังไม่เพียงพอ java.exe เองก็ต้องการทรัพยากรอื่น ๆ อีกมากมายไม่ใช่อย่างน้อยก็คือไลบรารี Java ทั้งหมด โดยการตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME คุณระบุตำแหน่งที่จะพบ JRE และด้วยเหตุนี้ทรัพยากรรันไทม์ทั้งหมดจึงจะพบ คุณควรตรวจสอบให้แน่ใจว่า Java เฉพาะที่คุณเรียกใช้นั้นตรงกับการตั้งค่าของ JAVA_HOME

คุณอาจต้องวางJAVA_HOME\binเส้นทางของคุณไว้ก่อนเพื่อที่ว่าหากjava.exeสร้างสำเนาของตัวมันเอง (เช่นเพื่อรวบรวม JSP) มันจะเลือกเวอร์ชันที่เหมาะสม


6

ตามที่ @dirai ที่นี่ JAVA_HOMEไม่ได้ใช้ Javaแต่โดยเครื่องมือของบุคคลที่สามเช่น Apache Tomcat อย่างไรก็ตามแอปพลิเคชันส่วนใหญ่จะทำงานได้โดยไม่ต้องตั้งค่าตัวแปรนี้ แต่บางตัวอาจแสดงพฤติกรรมที่ไม่คาดคิด


5

JAVA_HOMEเป็นตัวแปรสภาพแวดล้อม

จะต้องมีการตั้งค่าบนระบบปฏิบัติการอื่น ตรวจสอบลิงค์ต่อไปนี้

ยังเห็นที่นี่สำหรับข้อมูลเพิ่มเติม


1
คุณกำลังมหันต์environmentด้วยpathซึ่งเป็นสิ่งที่แตกต่างกัน แต่ใช้ใน Windows ตรงเช่นเดียวกับในลินุกซ์
วัล

1
@val เพียงแค่ชี้ให้เห็นซึ่งได้รับการแก้ไขแล้วในคำตอบของเขา
barlop

เพียงเพื่อเพิ่มในรายการJAVA_HOME ใน Windows 10
filip_j

3

JAVA_HOMEช่วยให้คุณสามารถรันการติดตั้ง java หลาย ๆ ตัวได้ แม้ว่าคุณจะมี/usr/lib/jvm/java-1.8.0/bin/java ใน PATH ของคุณก่อน แต่ก็มีประโยชน์ที่จะสามารถพูดJAVA_HOME=/usr/lib/jvm/java-1.5.0และมี "java" เริ่มต้นที่คุณเรียกใช้โปรแกรมให้ใช้อีกตัวหนึ่งแทนโดยเป็นเรื่องของการตั้งค่าสภาพแวดล้อม สิ่งนี้ช่วยให้โปรแกรมเมอร์สามารถใช้ java ที่ต้องการได้แม้ว่าจะไม่ได้ติดตั้งในตำแหน่งระบบปกติและทดสอบหรือจัดเตรียมความเข้ากันได้แบบย้อนกลับกับเวอร์ชันอื่นนั้น และไม่เสี่ยงต่อการถูกรีเซ็ตใน PATH โดยโปรแกรมอื่นที่ติดตั้งไว้เช่นการอัปเดตเวอร์ชันหลักสำหรับ java เอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.