Co powoduje błąd „Unable to access jarfile”?

135

Chcę uruchomić mój program bez używania IDE. Utworzyłem plik jar i wykonywalny plik jar. Kiedy dwukrotnie klikam plik jar exe, nic się nie dzieje, a kiedy próbuję użyć polecenia w cmd, daje mi to:

Error: Unable to access jarfile <path>

Używam polecenia: java -jar Calculator.jar

Jak stworzyłem słoik:

  1. Kliknij prawym przyciskiem myszy folder projektu (Kalkulator)
  2. Wybierz
  3. Kliknij folder Java i wybierz „Plik wykonywalny Jar”, a następnie wybierz następny
  4. Uruchom konfigurację: Główna - Kalkulator
  5. Utwórz miejsce docelowe eksportu
  6. Kliknij „Zakończ” i zyskaj! No nie bardzo.
Józef Smith
źródło
1
Wygląda na to, że Słoik jest w jakiś sposób uszkodzony, prawdopodobnie brakuje wpisu Manifestu.
MadProgrammer
Powinieneś pokazać, jak utworzyłeś pliki JAR, co w nich jest i jak próbujesz uruchomić program. Kod Java nie ma tu znaczenia.
Jochen
Czy próbowałeś ponownie uruchomić elcipse i przekompilować? Czasami Eclipse robi dziwne rzeczy, których można uniknąć, uruchamiając ponownie.
MattS
Uważam, że kod jest trudny do odczytania i przemyślenia. A jaki jest sens posiadania wszystkiego w statycznej funkcji głównej i jednej metody instancji do wyczyszczenia konsoli?
Dave Newton,
1
Nie mam odpowiedzi na swój problem, sam na nie odpowiedziałem i nie ma innego sposobu, aby wyrazić swoje uznanie w komentarzach, poza podziękowaniem im w odpowiedzi. Przeczytaj ponownie swój komentarz.
Joseph Smith

Odpowiedzi:

78

Napotkałem ten problem, gdy uruchomiłem plik Jar jako

java -jar TestJar

zamiast

java -jar TestJar.jar

Brak rozszerzenia .jar również powoduje ten problem.

Vinay Kadalagi
źródło
1
To jest poprawna odpowiedź. Do nazwy pliku jar należy dodać rozszerzenie .jar.
Abhijay Kumar
10
Nie zawsze jest to poprawna odpowiedź, dołączam ją i nie działa.
Alan B
W moim przypadku myślałem, że to plik, podczas gdy był to folder na konsoli. Plik jar znajdował się w folderze o tej samej nazwie.
Willy Makend
58

Naprawiony

Po prostu umieściłem go w innym folderze i zadziałało.

Józef Smith
źródło
62
Czy ktoś może wyjaśnić, dlaczego tak się stało?
Anastasios Andronidis,
7
Wygląda na to, że mógł to być problem z uprawnieniami do pliku, jednak całkowite przypuszczenie.
Aiden Fry
2
Miałem podobny problem z Windows, używając cygwin. Więc cygwin używa innych ścieżek niż Windows /cygdrive/c/vs C:\ Naprawiłem to za pomocą realpath --relative-to=$(pwd) path/to/jarfileWięc zawsze wymusi względną ścieżkę ISO używając/cygdrive/c/.../path/to/jarfile
Rik
1
Miałem ten sam problem, ze słoikiem też, przypadkowo błędnie wpisałem ścieżkę słoika
Ori Wiesel,
1
@Rik Twój komentarz jest pomocny, chociaż nie będzie działał w ścieżkach dos i pliku java w ścieżce cygwin. Rozwiązaniem tutaj będziejava -jar $(cygpath -a -d `realpath --relative-to=$(pwd) $HOME/opt/javafile.jar`)
cy8g3n
31

[Prawdopodobnie tylko Windows]

Uważaj na spacje w ścieżce, nawet jeśli plik jar znajduje się w bieżącym katalogu roboczym. Na przykład dla mnie to się nie udało:

java -jar myjar.jar

Udało mi się to naprawić, podając pełną, zacytowaną ścieżkę do słoika:

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

Zasługa tej odpowiedzi do ustawiania mnie na właściwą drogę ....

Robert Brown
źródło
Dzięki za to. Musisz podać pełną ścieżkę również w Linuksie, jeśli próbujesz uruchomić go z innego katalogu.
Pubudu
Ta odpowiedź jest po części duplikatem już udzielonej odpowiedzi na to pytanie. To jest wcześniejsza odpowiedź z tą samą metodą: pełna ścieżka w cudzysłowie. Września 6 '15 przez @benez
sophievda
18

Miałem ten problem pod CygWin w Windows. Czytałem gdzie indziej, że Java nie rozumie ścieżki Cygwin ( /cygdrive/c/some/dirzamiast C:\some\dir) - więc użyłem ścieżki względnej zamiast: ../../some/dir/sbt-launch.jar.

radumanolescu
źródło
Miałem dokładnie ten problem w CygWin! Dziękuję na zawsze!
Rhyuk
1
W przypadkach, w których chcesz, aby cygwin używał ścieżek sformatowanych w systemie Windows zamiast ścieżek cygwin, możesz użyć polecenia cygpath -w / path / here, aby przekonwertować ścieżkę na odpowiednik systemu Windows.
Jason Slobotski
@JasonSlobotski dzięki za podpowiedź, myślę, że Twój komentarz powinien być odpowiedzią samą w sobie.
Roberto Bonvallet
14

Miałem ten sam problem podczas próby uruchomienia pliku jar. Ścieżka zawierała spację, więc musiałem umieścić wokół niej cudzysłowy. Zamiast:

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

musiałem napisać

java -jar "C:\Path to File\myJar.jar"
benez
źródło
Cytaty załatwiały sprawę, ponieważ między nimi miałem również spacje. Potem wypróbowałem to bez spacji w ścieżce i bez cudzysłowów, a potem zadziałało
Timothy,
Anno 2019: To rozwiązanie pomogło mi, dzięki cudzysłowom! Bez cudzysłowów i bez spacji w moim przypadku nie działa.
sophievda
11

Właśnie natknąłem się na ten sam problem, próbując zrobić zły USB ...

Próbowałem uruchomić to polecenie w admin cmd

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

Ale otrzymałem ten błąd:

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

Rozwiązanie

1 krok

Kliknij prawym przyciskiem myszy, którego dotyczy problem. Kliknij właściwości. Kliknij kartę odblokowania w prawym dolnym rogu. Plik został zablokowany, ponieważ został pobrany i nie został utworzony na moim komputerze.

2. krok

W cmd zmieniłem katalog na miejsce, w którym znajduje się plik jar.

cd C:\fw\ducky\

Potem wpisałem diri zobaczyłem, że plik został nazwanyduckencode.jar.jar

Więc w cmd zmieniłem oryginalne polecenie, aby odwoływało się do pliku .jar.jar

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

To polecenie wykonane bez komunikatów o błędach, a plik inject.bin, który próbowałem utworzyć, znajdował się teraz w katalogu.

Mam nadzieję że to pomoże.

Leon Thomas
źródło
Dzięki, mój też został nazwany apktool.jar.jar
Mayank Kumar
8

Miałem podobny problem i nawet próbowałem uruchomić CMD z uprawnieniami administratora, ale to nie rozwiązało problemu.

Podstawową rzeczą jest to, aby zmienić katalog w cmd na bieżący katalog, w którym znajduje się plik jar.

Wykonaj następujące kroki:

1. skopiuj plik jar na pulpit.

  1. Uruchom CMD

  2. wpisz polecenie cd desktp

  3. następnie wpisz java -jar filename.jar

To powinno działać.


Edycja : począwszy od JDK-11 ( JEP 330 : uruchamianie programów z pojedynczym plikiem źródłowym)

Od wersji Java 11, narzędzie wiersza poleceń java było w stanie bezpośrednio uruchamiać kod źródłowy pojedynczego pliku. na przykład

java filename.java
Vishwa Ratna
źródło
5

To zadziałało dla mnie.

cd /path/to/the/jar/

java -jar ./Calculator.jar
Bastian Cáceres Pino
źródło
5

Jeśli używasz OSX, pobrane pliki są oznaczane flagą bezpieczeństwa, która uniemożliwia uruchomienie niepodpisanych aplikacji.

aby to sprawdzić, możesz wyświetlić rozszerzone atrybuty pliku

$ 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

Następnie możesz wyczyścić atrybuty za pomocą

xattr -c file.jar
nick fox
źródło
3

Może się to również zdarzyć, jeśli nie podasz prawidłowo listy parametrów. Oto, co robiłem:

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

Zamiast poprawnej wersji:

java -jar test_send_emails.jar test@gmail.com testing_subject file.txt
Bawół
źródło
3

czasami zdarza się, gdy próbujesz (uruchomić lub utworzyć) plik .jar w folderze / libs, klikając go prawym przyciskiem myszy w Android Studio. możesz wybrać menu rozwijane u góry stuio Androida i zmienić je na aplikację . To zadziała

wprowadź opis obrazu tutaj

anand krish
źródło
2

U mnie dzieje się tak, jeśli używasz rodzimych polskich znaków w nazwie folderu, czyli w PATH. Może więc przyczyną problemu było używanie nietypowych znaków.

Huxwell
źródło
2

Mój szczególny problem był spowodowany tym, że pracowałem z katalogami zawierającymi dowiązania symboliczne (skróty). W rezultacie próbowanie java -jar ../../myJar.jarnie działało, ponieważ nie byłem tam, gdzie myślałem, że jestem.

Zignorowanie względnych ścieżek plików naprawiło to od razu.

MattSayar
źródło
2

W moim przypadku sugerowana nazwa pliku do użycia była jarFile*.jarw linii poleceń. Plik w folderze to jarFile-1.2.3.jar. Więc zmieniłem nazwę pliku na jarFile. Następnie użyłem jarFile.jarzamiast jarFile*.jari wtedy problem został rozwiązany

suku
źródło
po wykonaniu tej czynności problem z niemożnością dostępu do pliku jar został rozwiązany.
Developine
2

Może się to zdarzyć na komputerze z systemem Windows, gdy w nazwach folderów są spacje. Rozwiązaniem byłoby wprowadzenie ścieżki pomiędzy „”. Na przykład:

java -jar c:\my folder\x.jar    --> 
java -jar "c:\my folder\x.jar"
assaf
źródło
2
to nie odpowiada na pytanie, powinieneś użyć komentarzy, aby poprosić o więcej informacji.
awd
2

Aby uniknąć problemów z uprawnieniami, spróbuj uruchomić go jako administrator. To działało dla mnie na Win10.

Gico
źródło
co z mac?
GvSharma
2

Wiem, że ten wątek powstał lata temu i problem też został naprawiony. Mam jednak nadzieję, że w przyszłości pomoże to komuś innemu, ponieważ napotkałem podobne problemy, gdy próbowałem zainstalować Oracle WebLogic 12c i Oracle OFR, w których ich instalator jest w .jarformacie. W moim przypadku albo nie zawinięto katalogu JDK w cudzysłowy, albo po prostu literówka.

Uruchom Command Promptjako administrator i wykonaj polecenie w tym formacie. Sprawdź dokładnie zdanie, jeśli jest literówka.

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

Jeśli pokazuje coś podobnego JRE 1.xxx is not a valid JDK Java Home, upewnij się, że zmienne systemowe dla zmiennych JAVA_HOMEśrodowiskowych wskazują właściwy katalog JDK. Zalecany jest JDK 1.8 lub nowszy (2018).

Przydatny wątek tutaj, możesz go polecić : Dlaczego pokazuje twój JDK c: program files \ java \ jre7 nie jest prawidłowym JDK podczas instalacji serwera weblogic?

Boosted Nub
źródło
1

Miałem podobny problem, w którym TextMate lub coś zastępowało podwójne cudzysłowy podwójnymi cudzysłowami Unicode.

Zmiana SELENIUM_SERVER_JARz podwójnych cudzysłowów Unicode na zwykłe podwójne cudzysłowy rozwiązała mój problem.

TankorSmash
źródło
1

dzieje się tak, ponieważ szukasz pliku w złej ścieżce 1. poszukaj ścieżki do folderu, w którym umieściłeś plik 2. zmień katalog cd w cmd użyj prawidłowej ścieżki

felipe
źródło
1

Używam NetBeans i miałem ten sam problem. Po uruchomieniu kompilacji i czyszczenia projektu mój program był wykonywalny. Dokumentacja Javy mówi, że polecenie build / clean służy do przebudowy projektu od podstaw i usunięcia wcześniejszych kompilacji. Mam nadzieję, że to pomoże. Przeczytałem też dokumentację. Oracle oferuje ścieżki nauczania NetBeans i Java. Bardzo pomocne. Powodzenia!

user8315373
źródło
1

Może podałeś złą wersję swojego słoika.

cosbor11
źródło
1

W końcu wkleiłem plik jar do tego samego folderu, co mój JDK, więc nie musiałem dołączać ścieżek. Jako administrator musiałem też otworzyć wiersz polecenia.

  1. Kliknij prawym przyciskiem myszy Wiersz polecenia i „Uruchom jako administrator”
  2. Przejdź do katalogu, w którym zapisałeś swój jdk
  3. W wierszu polecenia wpisz: java.exe -jar <jar file name>.jar
Michaela Burns
źródło
1

Zachowaj plik w tym samym katalogu, w którym go rozpakowujesz. To zadziałało dla mnie.

Aishwary joshi
źródło
0

Czy próbowałeś uruchomić go jako administrator privoleges? co oznacza uruchomienie polecenia w „Uruchom jako”, a następnie wybranie administratora z odpowiednimi poświadczeniami administratora

pracował dla mnie

Nick_Stubborn_Mex.
źródło
0

Próbowałem tego:

Po nadaniu plikowi uprawnień do odczytu, zapisu, wykonywania:

chmod 777 java-repl.jar

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

Nie można uzyskać dostępu do bla bla ..., to było jednak w systemie Mac OS

Więc spróbowałem tego:

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

Kinglee
źródło
0

To nie zadziałało „Unable to access 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"

To działa

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

Różnica polega na tym, że pojedyncza spacja przed OneWireViewer.jar nie wytrzymuje tego, że jest otoczona cudzysłowami, a nawet zawiera inne spacje.

angar
źródło
0

U mnie dzieje się tak, ponieważ uruchamiam go z domyślną wersją java (7), a nie ze skompilowaną wersją java (8) użytą do stworzenia tego jar.

Więc użyłem:

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

Zamiast wersji java 7:

java -jar myjar.jar
Adir D
źródło
0

Jeśli jesteś na WSL i postępujesz zgodnie z przewodnikiem, który mówi, to:

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

W rzeczywistości musisz określić pełną ścieżkę, nawet jeśli podałeś ją w java.library.pathczęści.

java -Djava.library.path=/mnt/c/dynamodb_local/DynamoDBLocal_lib -jar /mnt/c/dynamodb_local/DynamoDBLocal.jar -sharedDb
Pureferret
źródło
-1

najpierw utworzyłem zmienną %JAVA_HOME% :

Po pobraniu pliku pamiętaj o UNBLOCK TABwpisaniu właściwości pliku, jak pokazano powyżej w poście „maartencls”.

c:\users\my user\downloads\location of the file\all> java -jar yourfilename.jar

mam nadzieję, że to rozwiąże problem :)

mufa niska
źródło
-1

Pierwszy bieg: java -version

a następnie uruchom: java -jar Calculator.jar

To zadziałało dla mnie.

Sruthy
źródło
Nie wiesz, dlaczego java -versionjest tu potrzebny? Ponadto, bieganie java -jar Calculator.jarjest tym, co zrobił i nie działał OP ...
ArielGro