Windows ละเว้น JAVA_HOME: จะตั้งค่า JDK เป็นค่าเริ่มต้นได้อย่างไร


90

ฉันจะชักชวนให้ Windows ใช้ JDK แทน JRE ได้อย่างไร

คำถามนี้เคยถามมาก่อนที่นี่และที่อื่น ๆ :

ฉันจะตั้งค่าเริ่มต้นการติดตั้ง Java / รันไทม์ (Windows) ได้อย่างไร?

ปัญหาคือ Windows เพิกเฉยJAVA_HOMEและยังเพิกเฉยต่อข้อเท็จจริงที่ว่าฉันทำให้ไดเร็กทอรีถังขยะ JDK เป็นรายการแรกในพา ธ

เมื่อฉันเรียกใช้java -versionจากบรรทัดคำสั่งแทนที่จะเรียกใช้การติดตั้ง JDK 1.6 ของฉันมันจะเรียกใช้ 1.7 JRE

ฉันเดาว่านี่เป็นปัญหาเฉพาะของ 1.7 และ Windows 7 กำลังทำบางสิ่งที่ไม่ควรเกิดขึ้นกับรีจิสทรี

มีแนวคิดในการแก้ไขปัญหานี้อย่างไร

แก้ไข : อ๊ะ ฉันเขียน "รายการแรกใน classpath" ด้านบนเมื่อฉันหมายถึง "เส้นทาง" ขออภัย.

คำตอบ:


134

บน Windows javaไฟล์ปฏิบัติการใช้ Windows Registry เพื่อค้นหาเวอร์ชันเริ่มต้นของ Java ที่จะรัน

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

ดังนั้นคุณต้องแก้ไขรีจิสทรีหรือใส่เวอร์ชันของ Java ที่คุณต้องการก่อนไดเร็กทอรี Windows ในPATHไฟล์.


11
OP ที่นี่ ดูการแก้ไขของฉันด้านบน ใช่ที่แก้ไขได้ หมายเหตุสองประการ: ประการแรกดูเหมือนว่าตัวติดตั้ง Java ได้ใส่ java.exe ใน Windows \ System32 นี่เป็นเรื่องที่น่าตกใจสำหรับฉัน ประการที่สองเมื่อคุณแก้ไขเส้นทางภายใต้ตัวแปรคอมพิวเตอร์ / คุณสมบัติ / การตั้งค่าระบบขั้นสูง / สภาพแวดล้อมคุณต้องแก้ไขเส้นทางระบบไม่ใช่เส้นทางผู้ใช้ เส้นทางของระบบทำให้ตัวเองเป็นอันดับแรก
ccleve

2
ฉันจะเน้นจุดของ user237815 ด้วยว่าดูเหมือนว่าตัวติดตั้ง Java จะทิ้ง java.exe ลงใน Windows \ System32 นี่ไม่ใช่เรื่องง่ายสำหรับฉัน หลังจากตรวจสอบ "java -version" จากคอนโซลแล้วฉันได้รับความสะดวกสบายในระดับที่ Windows กำลังใช้ java.exe ที่ฉันต้องการจากการติดตั้ง JDK ของฉันแทนที่จะเป็นเวอร์ชันก่อนหน้าและไม่เป็นที่ต้องการ
John Tobler

17
ปัญหานี้ได้รับการแก้ไขในกรณีของฉันด้วยการเปลี่ยนชื่อ java.exe, javaw.exe และ javaws.exe ในโฟลเดอร์ Windows / System32 ของฉัน จากนั้น java -version จะแสดงเวอร์ชันที่ตั้งค่าไว้ใน JAVA_HOME และ PATH
Inversus

6
คุณช่วยวันของฉัน! การย้ายรายการที่เกี่ยวข้องกับ JDK ก่อน Windows ใน PATH ช่วยแก้ปัญหาได้ ขอบคุณมาก!
the_dark_destructor

9
ฉันวาง%JAVA_HOME%\binตำแหน่งpathตัวแปรแรกใน Windows 10 และทำงานให้ฉัน
Wendel

31

ใน Windows 8 คุณอาจต้องการลบ C:\ProgramData\Oracle\Java\javapath ไดเร็กทอรี

จากเส้นทาง

มันช่วยแก้ปัญหาของฉันได้


5
ใน Windows 10 จะมี: C: \ Program Files (x86) \ Common Files \ Oracle \ Java \ javapath สิ่งนี้จะถูกเพิ่มลงในตัวแปร System Path โดยอัตโนมัติ ลบ ans นั้นตั้งค่าตำแหน่งเส้นทางที่คุณกำหนดเอง
Dexter

1
ความคิดเห็นข้างต้นช่วยในกรณีของ windows 10
Saba Ahang

24

ฉันมีปัญหานี้เหมือนกัน ฉันใช้ 1.6 แต่ต้องการสร้างโค้ดที่ฉันกำลังทำงานกับ 1.5 ฉันได้เปลี่ยนJAVA_HOMEและPATH(ทั้งผู้ใช้และระบบ) ไม่เป็นประโยชน์

คำตอบก็คือการติดตั้ง 1.6 ลดลงjava.exe, javaw.exeและjavaws.exeเข้าไปในของฉันWindows\System32โฟลเดอร์ (Windows 7)

ฉันจะแก้ไขได้โดยการเปลี่ยนชื่อไฟล์เหล่านั้นไปjava_wrong.exe, และjavaw_wrong.exe javaws_wrong.exeหลังจากทำเช่นนั้นมันจะรับ java เวอร์ชันที่ถูกต้องตามที่กำหนดไว้ในJAVA_HOMEและPATH. ฉันเปลี่ยนชื่อไฟล์ด้วยเหตุนี้เนื่องจากลบไฟล์เหล่านั้นในลักษณะที่ย้อนกลับได้อย่างง่ายดาย

หวังว่านี่จะช่วยได้!


10
แทนที่จะเปลี่ยนชื่อคุณสามารถแก้ไขตัวแปร PATH ที่ระบุเป็นค่าแรก% JAVA_HOME% \ bin ได้วิธีนั้นจะเป็นค่าแรกที่จะใช้
maxivis

1
@maxivis ขอบคุณ ฉันเดาว่าปัญหาอาจเกิดจากการเรียงลำดับขององค์ประกอบ PATH เช่นที่ Windows \ System32 มาก่อน JAVA_HOME ฉันเพียงแค่เปลี่ยนชื่อเพื่อให้ลบได้อย่างมีประสิทธิภาพในวิธีที่ย้อนกลับได้
Inversus

อย่างไรก็ตามการตั้งค่า JAVA_HOME ในเส้นทางไม่ทำงานสำหรับฉัน แต่อย่างใดอันนี้แก้ไขได้จริง
Guilherme Orioli

13

Windows ไม่ได้เพิกเฉยต่อสิ่งใด ๆ นี่เป็นปัญหากับการตั้งค่าของคุณ Windows ใช้สิ่งที่คุณให้มาเท่านั้น JAVA_HOMEมันไม่มีความรู้พิเศษ

CLASSPATHไม่มีส่วนเกี่ยวข้องกับ Windows เช่นกัน สำหรับ Windows เป็นเพียงตัวแปรสภาพแวดล้อมที่ขยายไปยังตำแหน่งโฟลเดอร์

ตรวจสอบ%PATH%ตัวแปรสภาพแวดล้อมของคุณ นี่คือสิ่งที่ทำให้ Windows พบก่อนอื่น เส้นทาง (ตามที่โพสต์ที่เชื่อมโยงกับกล่าวว่า) %JAVA_HOME%\bin;<remainder of path>ควรชี้ไปที่ อีกครั้งโพสต์ที่คุณเชื่อมโยงให้คุณมีวิธีตั้งค่านี้โดยใช้ไฟล์แบตช์

(สำหรับคนอื่น ๆ ที่อาจจะไม่ทราบนี้: วิธีที่ง่ายที่สุดในการตรวจสอบ% PATH% คือการเปิดคำสั่งพร้อมท์และประเภทecho %PATH%. คุณยังสามารถได้รับโดยมีการคลิกขวาบนComputerในบานหน้าต่างด้านขวาของเมนู Start และเลือกPropertiesแล้วAdvanced System Settings, และEnvironmental Variablesปุ่มtne )


@erickson: ตกลง ขอบคุณ - ฉันจะแก้ไขให้ อย่างไรก็ตามมันยังไม่มีอะไรเกี่ยวข้องกับ Windows ซึ่งเป็นจุดที่ฉันตอบ :)
Ken White

เข้าใจดีฉันแค่กังวลว่าจะมีการสร้างความเข้าใจผิดใหม่ Java ไม่รู้อะไรมากไปJAVA_HOMEกว่า Windows
erickson

ขอขอบคุณการแก้ไข ฉันไม่ใช่คน Java (ประสบการณ์ จำกัด จนถึงปัจจุบัน) ดังนั้นจึงควรทราบเพื่อใช้อ้างอิงในอนาคต
Ken White

1
JAVA_HOMEควรตั้งค่าเป็น root ของการติดตั้ง java เส้นทางควรมี%JAVA_HOME%\bin;&lt;remainder of path%gt;ไม่เช่นนั้นคุณจะไม่สามารถ "ค้นหา" java, javac ฯลฯ ได้แน่นอนว่า Windows มองเฉพาะPATHตัวแปรเท่านั้น แต่เครื่องมือที่เกี่ยวข้องกับ java บางตัวจะดูJAVA_HOMEเป็นครั้งคราว
Edwin Buck

@Edwin: แก้ไขสิ่งที่หายไป\binด้วย ขอบคุณ.
Ken White

6

ฉันมีปัญหาเดียวกัน ฉันติดตั้งเวอร์ชัน Java จำนวนมากและด้วยเหตุผลบางประการจึงใช้ Java 1.7 แทน Java 1.6 แม้ว่าฉันจะระบุในเส้นทางที่จะใช้ 1.6 (C: \ jdk1.6.0_45_32 \ bin)

ฉันต้องย้ายเส้นทางของ JDK ที่ฉันต้องการใช้ (1.6) เป็นรายการแรกในตัวแปรสภาพแวดล้อม PATH เพื่อให้แน่ใจว่า Windows ใช้ 1.6 แทนที่จะเป็น 1.7

ตัวอย่างเช่นตัวแปรสภาพแวดล้อม PATH ก่อนหน้าคือ:

C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin;C:\jdk1.6.0_45_32\bin

และหลังจากที่ฉันย้าย jdk เป็นอันดับแรกมันใช้งานได้:

C:\jdk1.6.0_45_32\bin;C:\Program Files (x86);...<other entries>;C:\dev\ant181\bin

ฉันเดาว่าตัวติดตั้ง Windows ของ Java 1.7 ติดตั้งลงในไดเร็กทอรีอื่นที่มีอยู่แล้วใน PATH ดังนั้นจึงถูกใช้ก่อนแทนที่จะเป็นรายการ PATH ที่กำหนดเองที่ระบุ C: \ jdk1.6.0_45_32 \ bin;


ขอบใจนะ. การย้ายเส้นทาง JAVA_HOME \ bin เป็นองค์ประกอบแรกของตัวแปร Path ช่วยชีวิตฉัน
ÖMERTAŞCI

4

สำหรับกรณีของฉันใน'Path'ตัวแปรมีการเพิ่มพารามิเตอร์เช่น ' C:\ProgramData\Oracle\Java\javapath;' สถานที่แห่งนี้ก็มีjava.exe, javaw.exeและjavaws.exeจาก Java 8 ซึ่งเป็นที่ติดตั้งใหม่ผ่านjdk.exeจาก Oracle

ผมได้ลบข้อความนี้ออกจากเส้นทางที่เส้นทางของฉันแล้วมี%JAVA_HOME%\binกับมัน

ตอนนี้ตัวแปร'JAVA_HOME'กำลังควบคุมเวอร์ชัน Java ของฉันซึ่งฉันต้องการ


4

ป้อนคำอธิบายภาพที่นี่สมมติว่าคุณติดตั้ง JDK 10 หลังจาก JDK 8 และในตัวแปรสภาพแวดล้อมระบบกำหนดพา ธ เช่น "C: \ ProgramData \ Oracle \ Java \ javapath" จากนั้นควบคุมเวอร์ชัน Java โดยพา ธ นี้ มันจะละเว้น JAVA_HOME แม้กระทั่งพา ธ jdk 1.8 ที่ตั้งไว้ที่นี่ดังนั้นให้ลบ "C: \ ProgramData \ Oracle \ Java \ javapath" ในพา ธ เพื่อรับเอฟเฟกต์ของพา ธ JAVA_HOME



2

ฉันติดตั้ง Java 7 และ 8 แล้วและฉันต้องการเปลี่ยนเส้นทางไปที่ java 7 แต่เวอร์ชัน java ในหน้าต่างพรอมต์ cmd ของฉันแสดง Java 8
เพิ่มพา ธ ไดเร็กทอรี Java 7 bin ( C: \ Program Files \ Java \ jdk1.7.0_10 \ bin ) เป็นตัวแปร PATH ในตอนท้าย แต่ไม่ได้ผลและแสดง Java 8 ดังนั้นฉันจึงเปลี่ยนเส้นทาง Java 7 เป็นจุดเริ่มต้นของค่าพา ธ และมันก็ใช้ได้
เปิดหน้าต่างพรอมต์ cmd ใหม่และตรวจสอบเวอร์ชัน java ของฉันและตอนนี้แสดง Java 7


1

ในกรณีของฉันฉันติดตั้ง Java 7 และ 8 (ทั้ง x64) และฉันต้องการเปลี่ยนเส้นทางไปที่ java 7 แต่ทุกอย่างถูกตั้งค่าให้ใช้ Java 8 Java ใช้ตัวแปรสภาพแวดล้อม PATH:

C: \ ProgramData \ Oracle \ Java \ javapath

เป็นตัวเลือกแรกในการค้นหารันไทม์ของโฟลเดอร์ (คือโฟลเดอร์ที่ซ่อนอยู่) เส้นทางนี้มีลิงก์สัญลักษณ์ 3 รายการที่ไม่สามารถแก้ไขได้

ในพีซีของฉันตัวแปรสภาพแวดล้อม PATH มีลักษณะดังนี้:

C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

ในกรณีของฉันควรมีลักษณะดังนี้:

C: \ Windows \ System32; C: \ Program Files \ Java \ jdk1.7.0_21 \ bin;

ฉันต้องตัดและวาง symlinks ไปที่อื่นเพื่อให้ java หาไม่เจอและฉันสามารถกู้คืนได้ในภายหลัง

หลังจากตั้งค่าตัวแปรสภาพแวดล้อม JAVA_HOME และ JRE_HOME เป็นรันไทม์ของโฟลเดอร์ java ที่ต้องการ (ในกรณีของฉันคือ Java 7) คำสั่งjava -versionควรแสดงรันไทม์ java ที่คุณต้องการ ฉันสังเกตว่าไม่จำเป็นต้องยุ่งกับรีจิสทรี

ทดสอบบน Win7 x64


1

ปัญหานี้อาจเป็นเพราะ Java เวอร์ชันก่อนหน้านี้ที่ติดตั้งในระบบของคุณ ขั้นแรกให้ตรวจสอบตัวแปรสภาพแวดล้อมของคุณอย่างรอบคอบและลบตัวแปรสภาพแวดล้อมทั้งหมดที่เกี่ยวข้องกับ JAVA เวอร์ชันก่อนหน้าและแทนที่พา ธ เหล่านั้นเป็น

C:\Program Files\Java\<your new jdk version>\bin

0

มีปัจจัยเพิ่มเติมที่นี่ นอกเหนือจากไฟล์ปฏิบัติการ java ที่การติดตั้ง java วางไว้ที่ใดก็ตามที่คุณขอให้วางไว้บน windows ตัวติดตั้ง java ยังใส่สำเนาของไฟล์ปฏิบัติการเหล่านั้นบางส่วนในไดเร็กทอรี windows system32 ของคุณดังนั้นคุณน่าจะใช้ java ที่รันได้ทุกตัว ติดตั้งล่าสุด


0

ในกรณีที่คุณใช้ไฟล์. BAT เป็น Windows Service ฉันขอแนะนำให้ถอนการติดตั้งบริการ Windows และติดตั้งใหม่อีกครั้งหลังจากเปลี่ยน% JAVA_HOME% ให้ชี้ไปที่เวอร์ชัน Java ที่ถูกต้อง ..


0

หลังจากต่อสู้กับปัญหานี้มาระยะหนึ่งและค้นคว้าเกี่ยวกับเรื่องนี้ในที่สุดฉันก็สามารถแก้ไขได้ตามขั้นตอนต่อไปนี้:

1) ติดตั้ง jdk เวอร์ชัน 12
2) สร้างตัวแปรใหม่ในตัวแปรระบบ
3) ตั้งชื่อเป็น JAVA_HOME และกำหนดเส้นทางการติดตั้ง jdk
4) เพิ่มตัวแปรนี้ในพา ธ และย้ายไปด้านบน
5) ไปที่ C: \ Program Files (86) \ Common Files \ Oracle \ Java \ javapath และแทนที่ java.exe และ javaw.exe ด้วยไฟล์ที่เกี่ยวข้องที่มีชื่อเดียวกันจากโฟลเดอร์ pathtojavajdk / bin

สุดท้ายฉันตรวจสอบเวอร์ชันเริ่มต้นของ java ใน cmd ด้วย "java -version" และใช้งานได้!


0

ฉันมีปัญหาเดียวกันในการตั้งค่าตัวแปรสภาพแวดล้อมของผู้ใช้ฉันได้กำหนดค่า JAVA_HOME และ PATH ไว้อย่างถูกต้อง แต่ใช้งานไม่ได้ เมื่อฉันอัปเดตตัวแปรสภาพแวดล้อมระบบของฉันมันก็เริ่มทำงาน

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