สาเหตุข้อผิดพลาด "ไม่สามารถเข้าถึง jarfile" คืออะไร


141

ฉันต้องการเรียกใช้โปรแกรมของฉันโดยไม่ใช้ IDE ฉันได้สร้างไฟล์ jar และไฟล์ jar ที่สามารถถอดออกได้ เมื่อฉันคลิกสองครั้งที่ไฟล์ exe jar ไม่มีอะไรเกิดขึ้นและเมื่อฉันพยายามใช้คำสั่งใน cmd มันให้สิ่งนี้กับฉัน:

Error: Unable to access jarfile <path>

ฉันใช้คำสั่ง: java -jar Calculator.jar

ฉันสร้างขวดได้อย่างไร:

  1. คลิกขวาที่โฟลเดอร์โครงการ (เครื่องคิดเลข)
  2. เลือก
  3. คลิกที่ Java Folder และเลือก "Exectuable Jar File" จากนั้นเลือกถัดไป
  4. เรียกใช้การกำหนดค่า: หลัก - เครื่องคิดเลข
  5. สร้างปลายทางการส่งออก
  6. กด "เสร็จสิ้น" และทำกำไร! ดีไม่จริง

1
ดูเหมือนว่า Jar จะเสียหายไม่ทางใดก็ทางหนึ่งอาจไม่มีรายการ Manifest
MadProgrammer

คุณควรแสดงให้เห็นว่าคุณสร้าง JAR อย่างไรมีอะไรอยู่ในนั้นและคุณพยายามเรียกใช้โปรแกรมอย่างไร โค้ด Java ไม่เกี่ยวข้องที่นี่
Jochen

คุณได้ลองเปิด elcipse และ recompiling ใหม่แล้วหรือยัง? บางครั้ง Eclipse ได้ทำสิ่งแปลก ๆ บางอย่างที่สามารถหลีกเลี่ยงได้โดยการเปิดใหม่
MattS

ฉันคิดว่ารหัสอ่านยาก อะไรคือจุดสำคัญของการมีทุกอย่างในฟังก์ชันหลักแบบคงที่และมีวิธีการอินสแตนซ์เดียวเพื่อล้างคอนโซล
Dave Newton

1
ฉันไม่มีคำตอบสำหรับปัญหาของฉันฉันตอบด้วยตัวเองและไม่มีวิธีใดที่จะแสดงความขอบคุณในความคิดเห็นนอกจากขอบคุณผ่านการตอบกลับ กรุณาอ่านความคิดเห็นของคุณอีกครั้ง
โจเซฟสมิ ธ

คำตอบ:


82

ฉันเคยพบปัญหานี้เมื่อฉันเรียกใช้ไฟล์ Jar เป็นไฟล์

java -jar TestJar

แทน

java -jar TestJar.jar

การไม่มีนามสกุล. jarทำให้เกิดปัญหานี้เช่นกัน


1
นี่คือคำตอบที่ถูกต้อง นามสกุล. jar จะต้องต่อท้ายชื่อไฟล์ jar
Abhijay Kumar

12
ไม่ใช่คำตอบที่ถูกต้องเสมอไปฉันต่อท้ายและไม่ได้ผล
Alan B

ในกรณีของฉันฉันคิดว่ามันเป็นไฟล์ในขณะที่มันเป็นโฟลเดอร์บนคอนโซล ไฟล์ jar อยู่ในโฟลเดอร์ที่มีชื่อเดียวกัน
Willy Makend

63

แก้ไขแล้ว

ฉันเพิ่งวางไว้ในโฟลเดอร์อื่นและใช้งานได้


64
ใครสามารถอธิบายได้ว่าทำไมถึงเกิดขึ้น?
Anastasios Andronidis

8
ดูเหมือนว่าอาจเป็นปัญหาการอนุญาตไฟล์อย่างไรก็ตามการคาดเดาทั้งหมด
Aiden Fry

2
ฉันมีปัญหาคล้ายกันใน WIndows โดยใช้ cygwin ดังนั้น cygwin จึงใช้เส้นทางที่แตกต่างจาก windows /cygdrive/c/เทียบกับC:\ ฉันแก้ไขสิ่งนี้โดยใช้realpath --relative-to=$(pwd) path/to/jarfileดังนั้นมันจะบังคับใช้ iso พา ธ สัมพัทธ์โดยใช้เสมอ/cygdrive/c/.../path/to/jarfile
Rik

1
ฉันมีปัญหาเดียวกันกับโถของฉันฉันพิมพ์เส้นทางของโถผิดโดยบังเอิญ
Ori Wiesel

1
@Rik ความคิดเห็นของคุณมีประโยชน์แม้ว่ามันจะไม่ทำงานในเส้นทาง dos และไฟล์ java ในเส้นทาง cygwin วิธีแก้ปัญหาที่นี่จะเป็นjava -jar $(cygpath -a -d `realpath --relative-to=$(pwd) $HOME/opt/javafile.jar`)
cy8g3n

34

[อาจเป็นไปได้เฉพาะ Windows]

ระวังช่องว่างในเส้นทางแม้ว่า jar ของคุณจะอยู่ในไดเร็กทอรีการทำงานปัจจุบันก็ตาม ตัวอย่างเช่นสำหรับฉันสิ่งนี้ล้มเหลว:

java -jar myjar.jar

ฉันสามารถแก้ไขสิ่งนี้ได้โดย givng เส้นทางที่ยกมาแบบเต็มไปยังโถ:

java -jar "%~dp0\myjar.jar" 

เครดิตไปที่คำตอบนี้เพื่อให้ฉันมาถูกทาง ....


ขอบคุณสำหรับสิ่งนี้. จำเป็นต้องให้เส้นทางแบบเต็มใน Linux ด้วยหากพยายามเรียกใช้จากไดเร็กทอรีอื่น
Pubudu

คำตอบนี้บางส่วนซ้ำกับคำตอบที่ให้ไว้แล้วสำหรับคำถามนี้ นี่คือคำตอบก่อนหน้านี้ด้วยวิธีการเดียวกัน: เส้นทางที่ยกมาแบบเต็ม 6 ก.ย. 58 โดย @benez
sophievda

18

ฉันมีปัญหานี้ภายใต้ CygWin ใน Windows ฉันได้อ่านที่อื่น ๆ ที่ Java ไม่เข้าใจเส้นทาง Cygwin ( /cygdrive/c/some/dirแทนC:\some\dir) - ../../some/dir/sbt-launch.jarดังนั้นผมจึงใช้เส้นทางสัมพันธ์แทน:


ฉันมีปัญหานี้แน่นอนใน CygWin! ขอบคุณตลอดไป!
Rhyuk

1
ในกรณีที่คุณต้องการให้ cygwin ใช้เส้นทางที่จัดรูปแบบ windows แทนเส้นทาง cygwin คุณสามารถใช้คำสั่ง cygpath -w / path / here เพื่อแปลงเส้นทางให้เทียบเท่ากับ windows
Jason Slobotski

@JasonSlobotski ขอบคุณสำหรับเคล็ดลับฉันคิดว่าความคิดเห็นของคุณควรเป็นคำตอบด้วยตัวของมันเอง
Roberto Bonvallet

14

ฉันมีปัญหาเดียวกันเมื่อพยายามเปิดไฟล์ jar เส้นทางมีช่องว่างฉันจึงต้องใส่เครื่องหมายคำพูดไว้รอบ ๆ แทน:

java -jar C:\Path to File\myJar.jar

ฉันต้องเขียน

java -jar "C:\Path to File\myJar.jar"

ใบเสนอราคาเป็นเคล็ดลับสำหรับฉันเนื่องจากฉันมีช่องว่างระหว่างกัน จากนั้นฉันก็ลองโดยไม่มีช่องว่างในเส้นทางและไม่มีเครื่องหมายคำพูดแล้วมันก็ใช้ได้เช่นกัน
ทิโมธี

Anno 2019: โซลูชันนี้ช่วยฉันด้วยเครื่องหมายคำพูด! หากไม่มีเครื่องหมายคำพูดและไม่มีช่องว่างก็ไม่ได้ผลในกรณีของฉัน
sophievda

11

เพิ่งเจอปัญหาเดียวกันกับการพยายามสร้าง USB ที่ไม่ดี ...

ฉันพยายามเรียกใช้คำสั่งนี้ใน admin cmd

java -jar c:\fw\ducky\duckencode.jar -I c:\fw\ducky\HelloWorld.txt  -o c:\fw\ducky\inject.bin

แต่ได้รับข้อผิดพลาดนี้:

Error: unable to access jarfile c:\fw\ducky\duckencode.jar

วิธีการแก้

ขั้นตอนที่ 1

คลิกขวาที่ jarfile ที่เป็นปัญหา คลิกคุณสมบัติ คลิกแท็บปลดบล็อกที่มุมล่างขวา ไฟล์ถูกบล็อกเนื่องจากถูกดาวน์โหลดและไม่ได้สร้างบนพีซีของฉัน

ขั้นตอนที่ 2

ใน cmd ฉันเปลี่ยนไดเร็กทอรีเป็นที่ตั้งของไฟล์ jar

cd C:\fw\ducky\

จากนั้นฉันพิมพ์dirและเห็นไฟล์ถูกตั้งชื่อduckencode.jar.jar

ดังนั้นใน cmd ฉันเปลี่ยนคำสั่งเดิมเพื่ออ้างอิงไฟล์ด้วย .jar.jar

java -jar c:\fw\ducky\duckencode.jar.jar -I c:\fw\ducky\HelloWorld.txt  -o c:\fw\ducky\inject.bin

คำสั่งนั้นดำเนินการโดยไม่มีข้อความแสดงข้อผิดพลาดและตอนนี้ inject.bin ฉันพยายามสร้างอยู่ในไดเร็กทอรี

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


ขอบคุณเช่นกันฉันได้รับการตั้งชื่อเป็น apktool.jar.jar
Mayank Kumar

8

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

สิ่งพื้นฐานคือต้องแน่ใจว่าได้เปลี่ยนDirectoryใน cmd เป็นไดเร็กทอรีปัจจุบันที่ไฟล์ jar ของคุณอยู่

ทำตามขั้นตอนต่อไปนี้:

  1. คัดลอกไฟล์ jar ไปยังเดสก์ท็อป

  2. เรียกใช้ CMD

  3. พิมพ์คำสั่ง cd desktop

  4. จากนั้นพิมพ์ java -jar filename.jar

สิ่งนี้ควรใช้งานได้


แก้ไข : ตั้งแต่ JDK-11 เป็นต้นไป ( JEP 330 : เปิดโปรแกรมซอร์สโค้ดไฟล์เดียว)

ตั้งแต่ Java 11 เครื่องมือบรรทัดคำสั่ง java สามารถรันซอร์สโค้ดไฟล์เดียวได้โดยตรง เช่น

java filename.java

6

หากคุณใช้ OSX ไฟล์ที่ดาวน์โหลดจะถูกแท็กด้วยแฟล็กความปลอดภัยที่ป้องกันไม่ให้แอปพลิเคชันที่ไม่ได้ลงชื่อทำงาน

เพื่อตรวจสอบสิ่งนี้คุณสามารถดูแอตทริบิวต์เพิ่มเติมในไฟล์

$ ls -l@
-rw-r--r--@ 1 dave  staff  17663235 13 Oct 11:08 server-0.28.2-java8.jar
com.apple.metadata:kMDItemWhereFroms         619
com.apple.quarantine          68

จากนั้นคุณสามารถล้างแอตทริบิวต์ด้วย

xattr -c file.jar



3

นอกจากนี้ยังสามารถเกิดขึ้นได้หากคุณระบุรายการพารามิเตอร์ไม่ถูกต้อง นี่คือสิ่งที่ฉันกำลังทำ:

java -jar test@gmail.com testing_subject file.txt test_send_emails.jar

แทนที่จะเป็นเวอร์ชันที่ถูกต้อง:

java -jar test_send_emails.jar test@gmail.com testing_subject file.txt

3

บางครั้งมันเกิดขึ้นเมื่อคุณพยายาม (เรียกใช้หรือสร้าง) ไฟล์. jar ภายใต้โฟลเดอร์ / libs โดยคลิกขวาใน android studio คุณสามารถเลือกแบบเลื่อนลงในด้านบนของหุ่นยนต์ stuio และเปลี่ยนเป็นแอป วิธีนี้จะได้ผล

ป้อนคำอธิบายภาพที่นี่


2

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


2

ปัญหาเฉพาะของฉันเกิดจากฉันทำงานกับไดเรกทอรีที่เกี่ยวข้องกับลิงก์สัญลักษณ์ (ทางลัด) ดังนั้นการพยายามjava -jar ../../myJar.jarไม่ได้ผลเพราะฉันไม่ได้อยู่ที่ฉันคิดว่าตัวเองอยู่

การไม่คำนึงถึงเส้นทางไฟล์สัมพัทธ์ได้รับการแก้ไขแล้ว


2

ในกรณีของฉันชื่อไฟล์ที่แนะนำให้ใช้อยู่jarFile*.jarในบรรทัดคำสั่ง ไฟล์ในโฟลเดอร์คือjarFile-1.2.3.jar. ดังนั้นฉันจึงเปลี่ยนชื่อไฟล์เป็นjarFile. จากนั้นฉันใช้jarFile.jarแทนjarFile*.jarแล้วปัญหาได้รับการแก้ไข


หลังจากทำสิ่งนี้ปัญหาไม่สามารถเข้าถึงไฟล์ jar ของฉันได้รับการแก้ไข
Developine

2

อาจเกิดขึ้นในเครื่อง windows เมื่อคุณมีช่องว่างในชื่อของโฟลเดอร์ วิธีแก้ปัญหาคือการเข้าสู่เส้นทางระหว่าง "" ตัวอย่างเช่น:

java -jar c:\my folder\x.jar    --> 
java -jar "c:\my folder\x.jar"

2
สิ่งนี้ไม่ตอบคำถามคุณควรใช้ความคิดเห็นเพื่อขอข้อมูลเพิ่มเติม
ส.ค.

2

เพื่อหลีกเลี่ยงปัญหาการอนุญาตให้ลองเรียกใช้ในฐานะผู้ดูแลระบบ สิ่งนี้ใช้ได้ผลกับฉันใน Win10


แล้ว mac ล่ะ?
GvSharma

2

ฉันรู้ว่าเธรดนี้เป็นปีที่แล้วและปัญหาได้รับการแก้ไขแล้วด้วย แต่ฉันหวังว่านี่จะช่วยคนอื่นได้ในอนาคตเนื่องจากฉันพบปัญหาที่คล้ายกันในขณะที่ฉันพยายามติดตั้ง Oracle WebLogic 12c และ Oracle OFR ซึ่งตัวติดตั้งอยู่ใน.jarรูปแบบ สำหรับกรณีของฉันมันไม่ได้รวมไดเรกทอรี JDK ไว้ในเครื่องหมายคำพูดหรือเพียงแค่พิมพ์ผิด

เรียกใช้Command Promptในฐานะผู้ดูแลระบบและดำเนินการคำสั่งในรูปแบบนี้ ตรวจสอบประโยคอีกครั้งหากมีการพิมพ์ผิด

"C:\Program Files\Java\jdk1.xxxxx\bin\java" -jar C:\Users\xxx\Downloads\xxx.jar

หากแสดงสิ่งที่ต้องการJRE 1.xxx is not a valid JDK Java Homeตรวจสอบให้แน่ใจว่าตัวแปรระบบสำหรับตัวแปรJAVA_HOMEสภาพแวดล้อมชี้ไปที่ไดเร็กทอรี JDK ที่ถูกต้อง แนะนำให้ใช้ JDK 1.8 ขึ้นไป (2018)

เธรดที่มีประโยชน์ที่นี่คุณสามารถอ้างถึงได้: เหตุใดจึงแสดง JDK c: program files \ java \ jre7 ของคุณไม่ใช่ JDK ที่ถูกต้องขณะติดตั้งเซิร์ฟเวอร์เว็บบล็อก


1

ฉันมีปัญหาที่คล้ายกันที่ TextMate หรือบางสิ่งบางอย่างแทนที่เครื่องหมายคำพูดคู่ด้วยเครื่องหมายคำพูดคู่ยูนิโคด

การเปลี่ยนSELENIUM_SERVER_JARคำพูดคู่ของฉันจาก Unicode เป็นเครื่องหมายคำพูดคู่ปกติและนั่นช่วยแก้ปัญหาของฉันได้


1

นี่เป็นเพราะคุณกำลังมองหาไฟล์ในเส้นทางที่ไม่ถูกต้อง 1. มองหาเส้นทางของโฟลเดอร์ที่คุณวางไฟล์ 2. เปลี่ยนไดเร็กทอรี cd ใน cmd ใช้เส้นทางที่ถูกต้อง


1

ฉันใช้ NetBeans และมีปัญหาเดียวกัน หลังจากที่ฉันรัน build and clean project โปรแกรมของฉันก็สามารถเรียกทำงานได้ เอกสาร Java ระบุว่าคำสั่ง build / clean ใช้สำหรับสร้างโปรเจ็กต์ใหม่ตั้งแต่เริ่มต้นโดยพื้นฐานและลบคอมไพล์ที่ผ่านมา ฉันหวังว่านี่จะช่วยได้. นอกจากนี้ฉันอ่านเอกสารประกอบ Oracle มีเส้นทางการเรียนรู้ NetBeans และ Java เป็นประโยชน์มาก โชคดี!



1

ในที่สุดฉันก็วางไฟล์ jar ของฉันลงในโฟลเดอร์เดียวกับ JDK ของฉันดังนั้นฉันจึงไม่ต้องรวมพา ธ ฉันต้องเปิดพรอมต์คำสั่งในฐานะผู้ดูแลระบบด้วย

  1. คลิกขวาที่ Command Prompt และ "Run as administrator"
  2. ไปที่ไดเร็กทอรีที่คุณบันทึก jdk ไว้
  3. ในประเภทพรอมต์คำสั่ง: java.exe -jar <jar file name>.jar

1

เก็บไฟล์ไว้ในไดเร็กทอรีเดียวกับที่คุณกำลังแตกไฟล์ ที่ได้ผลสำหรับฉัน


1

สำหรับฉันมันเกิดขึ้นเพราะฉันรันด้วยเวอร์ชัน java เริ่มต้น (7) และไม่ใช่เวอร์ชัน java ที่คอมไพล์ (8) ที่ใช้สร้าง jar

ฉันจึงใช้:

%Java8_64%\bin\java -jar myjar.jar

แทนที่จะเป็นเวอร์ชัน java 7:

java -jar myjar.jar

0

คุณได้พยายามเรียกใช้ภายใต้สิทธิ์ของผู้ดูแลระบบหรือไม่? หมายถึงรันคำสั่งใน "Run As" จากนั้นเลือกผู้ดูแลระบบที่มีข้อมูลประจำตัวของผู้ดูแลระบบที่เหมาะสม

ทำงานให้ฉัน


0

ฉันกำลังลองสิ่งนี้:

หลังจากให้ไฟล์อ่านเขียนรันสิทธิพิเศษแล้ว:

chmod 777 java-repl.jar

alias jr="java -jar $HOME/Dev/java-repl/java-repl.jar"

ไม่สามารถเข้าถึง bla bla ... นี่เป็นบน Mac OS แม้ว่า

ฉันจึงลองสิ่งนี้:

alias jr="cd $HOME/Dev/java-repl/ && java -jar java-repl.jar"


0

สิ่งนี้ใช้ไม่ได้ "ไม่สามารถเข้าถึง jarfile"

"C:\Program Files\java\jdk-13+33-jre\bin\javaw.exe" -jar "C:\Program Files\Maxim Integrated Products\1-Wire Drivers x64\ OneWireViewer.jar"

สิ่งนี้ได้ผล

"C:\Program Files\java\jdk-13+33-jre\bin\javaw.exe" -jar "C:\Program Files\Maxim Integrated Products\1-Wire Drivers x64\OneWireViewer.jar"

ความแตกต่างคือช่องว่างด้านหน้า OneWireViewer.jar ที่ไม่สามารถต้านทานได้ว่าล้อมรอบด้วยเครื่องหมายคำพูดและยังมีช่องว่างอื่น ๆ


0

หากคุณอยู่ใน WSL และปฏิบัติตามคำแนะนำที่ระบุว่าสิ่งนี้:

java -Djava.library.path=./DynamoDBLocal_lib -jar DynamoDBLocal.jar -sharedDb

คุณต้องระบุเส้นทางแบบเต็มแม้ว่าคุณจะระบุไว้ในjava.library.pathส่วนนั้นก็ตาม

java -Djava.library.path=/mnt/c/dynamodb_local/DynamoDBLocal_lib -jar /mnt/c/dynamodb_local/DynamoDBLocal.jar -sharedDb

0

นี่เป็นปัญหาการอนุญาตโปรดดูว่าไดเร็กทอรีอยู่ภายใต้ผู้ใช้ของคุณหรือไม่ นั่นเป็นเหตุผลที่ทำงานในโฟลเดอร์อื่น!


0

เปลี่ยนชื่อไฟล์ jar แล้วลอง

คำอธิบาย: ใช่ฉันรู้ว่ามีคำตอบมากมายที่ฉันยังต้องการเพิ่มอีกหนึ่งจุดที่ฉันเผชิญที่นี่

ฉันสร้าง jar และย้ายไปไว้ในเซิร์ฟเวอร์ที่ฉันปรับใช้ (นี่เป็นกระบวนการปกติ) ที่นี่ชื่อไฟล์ที่ฉันย้ายไปแล้วมีอยู่ในเซิร์ฟเวอร์ที่นี่ไฟล์จะถูกแทนที่อย่างชัดเจน ในกรณีนี้ฉันประสบปัญหานี้ บางทีในขณะที่มีการลบล้างอาจมีปัญหาในการคัดลอกสิทธิ์

หวังว่านี่จะช่วยใครบางคนได้

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