Unable to access jarfile что делать linux

Обновлено: 04.07.2024

У нас есть веб-приложение под управлением JBoss 5, которое периодически запускает процесс "java" (используя ProcessBuilder) для компиляции файлов в Linux. Процесс работает без проблем на машине разработки Windows и на виртуальной машине Ubuntu, которую мы установили. Команда выглядит следующим образом:

Что создает ошибку:

Все пути подтверждены как правильные, а путь к файлу ja заключен в двойные кавычки. После двух сортов пива и Big Mac системный отдел подтвердил, что пользователь (jbossadmin), работающий с JBoss, также является владельцем файла:

Я подозреваю, что это проблема поэтому мы попросили их измените разрешения для выполнения, но, увы, все равно не удовлетворены.

Единственное, о чем я могу думать, это то, что это ошибка перевода пути или что мы не применили права на право место!

Изменить: Отличное предложение Андреа Спадэччини, однако кажется, что у нас уже есть разрешения прохождения через путь:

Изменить:. С помощью Eva мы можем подтвердить, что выполнение строки через командную строку (bash) выполняется, но она выдает ошибку, если мы выполним строку из класса ProcessBuilder, встроенную в файл jar, в Linux. Так же, как и наш JBoss. Наиболее вероятной причиной проблемы здесь являются двойные кавычки вокруг параметров.

@ian_scho Привет! Я думаю, что проблема здесь в том, что кавычки командной строки разрешены, потому что интерпретируется процессом bash в linux (который интерпретируется командной строкой). Когда класс ProcessBuilder используется внутри java code, кавычки интерпретируются как часть пути. для этого показана ошибка "Невозможно получить доступ к jarfile". Вы можете увидеть родительский процесс с помощью команды ps -adf , попробуйте запустить вашу коменную линию в фоновом режиме (&) следующим образом:

а затем вызовите команду

вы увидите, что процесс bash является родительским. Если вы выполняете то же самое при запуске jboss, вы можете видеть, что родительский элемент процесса java-процесса является другим процессом, который не может интерпретировать кавычки.

Я хочу выполнить свою программу без использования IDE. Я создал JAR-файл и исполняемый JAR-файл. Когда я дважды щелкаю по файлу exe jar, ничего не происходит, и когда я пытаюсь использовать команду в cmd, это дает мне следующее:

Я использую команду: java -jar Calculator.jar

Как я создал банку:

  1. Щелкните правой кнопкой мыши папку проекта (Калькулятор)
  2. Выбрать
  3. Нажмите на папку Java и выберите «Exableuable Jar File», затем выберите следующий
  4. Конфигурация запуска: Главная - Калькулятор
  5. Создать пункт назначения экспорта
  6. Хит "Готово" и прибыль! Ну не совсем.
Похоже, что Jar поврежден, возможно, отсутствует запись Manifest. Вы должны показать, как вы создали файлы JAR, что в них и как вы пытаетесь запустить программу. Код Java здесь не имеет значения. Вы пробовали перезапустить elcipse и перекомпилировать? Иногда Eclipse делает некоторые странные вещи, которых можно избежать путем перезапуска. Я нахожу код сложным для чтения и обдумывания. И какой смысл иметь все в статической главной функции и иметь метод единственного экземпляра для очистки консоли?

Я столкнулся с этой проблемой, когда я запустил файл Jar как

java -jar TestJar

java -jar TestJar.jar

Отсутствие расширения .jar также вызывает эту проблему.

Это правильный ответ. Расширение .jar должно быть добавлено к имени файла jar. Это не всегда правильный ответ, я добавляю его, и он не работает. В моем случае я думал, что это был файл, а это была папка на консоли. Файл jar находился в папке с таким же именем.

Исправлена

Я просто поместил его в другую папку, и это сработало.

Звучит так, как будто это может быть проблема с правами доступа к файлам, как бы то ни было. У меня была похожая проблема в Windows с использованием Cygwin. Таким образом, cygwin использует пути, отличные от Windows, по /cygdrive/c/ сравнению с тем, как C:\ я это исправил, используя. realpath --relative-to=$(pwd) path/to/jarfile Поэтому он всегда будет применять относительный путь iso, используя /cygdrive/c/. /path/to/jarfile У меня была такая же проблема, с моей банкой, я случайно набрал неверный путь к банке @Rik Ваш комментарий полезен, хотя он не будет работать в DOS-путях и Java-файле в Cygwin-пути. Решение здесь будет java -jar $(cygpath -a -d `realpath --relative-to=$(pwd) $HOME/opt/javafile.jar`)

[Возможно только для Windows]

Остерегайтесь пробелов в пути, даже когда ваш jar находится в текущем рабочем каталоге. Например, для меня это было неудачно:

Кредит идет на этот ответ для установки меня на правильный путь .

Спасибо за это. Необходимо также указать полный путь в Linux, если вы пытаетесь запустить его из другого каталога. Этот ответ является частично дубликатом уже данного ответа на этот вопрос. Это более ранний ответ тем же методом: полный путь в кавычках. 6 сентября '15 @benez

У меня была эта проблема под CygWin в Windows. Я читал в другом месте , что Java не понимает пути Cygwin ( /cygdrive/c/some/dir вместо C:\some\dir ) - так что я использовал относительный путь вместо этого: ../../some/dir/sbt-launch.jar .

У меня была именно эта проблема в CygWin! Спасибо тебе навсегда! В случаях, когда вам нужно, чтобы cygwin использовал пути в формате Windows вместо путей cygwin, вы можете использовать команду cygpath -w / path / here, чтобы преобразовать путь в эквивалент Windows. @JasonSlobotski спасибо за совет, я думаю, что ваш комментарий должен быть ответом сам по себе.

У меня была такая же проблема при попытке запустить файл jar. Путь содержал пробел, поэтому я должен был поместить цитаты вокруг. Вместо того:

я должен был написать

Цитаты помогли мне, так как между ними были пробелы. Затем я попробовал это без пробелов в пути и без кавычек, а затем это сработало Anno 2019: мне помогло это решение с кавычками! Без кавычек и без пробелов это не работает в моем случае.

Просто наткнулся на ту же проблему, пытаясь сделать плохой USB .

Я пытался запустить эту команду в админ cmd

Но получил эту ошибку:

Решение

1-й шаг

Щелкните правой кнопкой мыши по указанному файлу. Нажмите свойства. Нажмите на вкладку разблокировки в правом нижнем углу. Файл был заблокирован, потому что он был загружен, а не создан на моем компьютере.

2-й шаг

В cmd я изменил каталог, где находится файл jar.

Затем я набрал dir и увидел, что файл был назван duckencode.jar.jar

Таким образом, в cmd я изменил исходную команду для ссылки на файл с .jar.jar

Надеюсь это поможет.

У меня была похожая проблема, и я даже попытался запустить CMD с правами администратора, но это не решило проблему.

Основным является то, что убедитесь, что смените каталог в cmd на текущий каталог где находится ваш jar-файл.

Выполните следующие шаги:

1. Скопируйте файл на рабочий стол.

введите команду cd desktp

затем введите java -jar filename.jar

Это должно работать.

Изменить : Начиная с JDK-11 ( JEP 330 : запускать однофайловые программы с исходным кодом)

Начиная с Java 11, инструмент командной строки Java может напрямую запускать исходный код из одного файла. например

Это сработало для меня.

Если вы используете OSX, загруженные файлы помечаются флагом безопасности, который запрещает запуск неподписанных приложений.

чтобы проверить это, вы можете просмотреть расширенные атрибуты в файле

Затем вы можете очистить атрибуты с

Это также может произойти, если вы неправильно указали свой список параметров. Вот что я делал:

Вместо правильной версии:

иногда это происходит, когда вы пытаетесь (запустить или создать) файл .jar в папке / libs, щелкнув его правой кнопкой мыши в Android Studio. Вы можете выбрать раскрывающийся список в верхней части Android Stuio и изменить его на приложение . Это будет работать

введите описание изображения здесь

Для меня это произойдет, если вы используете родные польские символы в foldername, что в PATH. Так что, возможно, использование нетипичных символов было причиной проблемы.

Моя конкретная проблема была вызвана тем, что я работал с каталогами, которые содержали символические ссылки (ярлыки). Следовательно, попытки java -jar ../../myJar.jar не сработали, потому что я был не там, где я думал.

Независимо от относительных путей к файлам это исправлено.

В моем случае предлагаемое имя файла для использования было jarFile*.jar в командной строке. Файл в папке был jarFile-1.2.3.jar . Поэтому я переименовал файл в jarFile . Затем я использовал jarFile.jar вместо, jarFile*.jar а затем проблема была решена

Это может произойти на компьютере с Windows, если в именах папок есть пробелы. Решением было бы ввести путь между "". Например:

это не отвечает на вопрос, вы должны использовать комментарии, чтобы запросить дополнительную информацию.

Чтобы избежать проблем с разрешениями, попробуйте запустить его как администратор. Это работало для меня на Win10.

Я знаю, что эта тема существует много лет назад, и проблема тоже была исправлена. Но я надеюсь, что это поможет кому-то еще в будущем, так как я столкнулся с некоторыми подобными проблемами, когда пытался установить 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).

у нас есть веб-приложение, работающее под JBoss 5, которое периодически запускает процесс "java" (используя ProcessBuilder) для компиляции файлов в Linux. Процесс работает без проблем на машине разработки Windows и на виртуальной машине Ubuntu, которую мы установили. Команда следующая:

все пути подтверждаются правильными и путь к файлу jar заключен в двойные кавычки. После двух пива и Биг-Мака системный отдел подтвердил, что пользователь (jbossadmin) запуск JBoss также является владельцем файла:

Я подозреваю, что это проблема прав поэтому мы предложили им измените разрешения на выполнение

единственное, о чем я могу думать, это то, что это ошибка перевода пути или что мы не применили право на правильное место!

Edit: отличное предложение Андреа Спадаччини, однако кажется, что у нас уже есть разрешения на обход через путь:

Edit: С Eva мы можем подтвердить, что выполнение строки через командную строку (bash), что она работает, но она выдает ошибку, если мы выполним строку из класса ProcessBuilder, встроенного в файл jar, в Linux. Так же, как сделал бы наш JBoss. Двойные кавычки параметры являются наиболее вероятной причиной проблемы здесь.

@ian_scho Привет!, Я думаю, проблема здесь в том, что кавычки командной строки разрешены, потому что интерпретируется процессом bash в linux (который является интерпретацией командной строки). Когда класс ProcessBuilder используется внутри кода java, кавычки интерпретируются как часть пути. для этого отображается ошибка "невозможно получить доступ к jarfile". Вы можете увидеть процесс parent с командой ps -adf , попробуйте запустить строку comand в фоновом режиме ( & ) как следуйте:

и затем вызвать команду

вы увидите, что процесс bash является родителем. Если вы сделаете то же самое, когда JBoss работает, вы можете увидеть, что родительский процесс выполнения java-это другой процесс, который не может интерпретировать кавычки.

надеюсь, что это вам поможет:)

проверьте, все ли каталоги, ведущие к файлу JAR, имеют разрешения на чтение и перемещение ( +rx ) для jbossadmin пользователей.

Если вы выполняете команду Java из сценария оболочки, проверьте, что сценарий оболочки имеет Терминаторы строк Linux/Unix, а не Windows, как это может произойти, если сценарий оболочки был создан на платформе Windows. Заявленная ошибка, безусловно, произойдет в этом случае.

используйте редактор Kate в Linux для проверки и исправления или утилиту dos2unix, если она доступна.

Я новичок, когда дело доходит до использования Java в Linux. Я клонировал репозиторий, в котором я заинтересован, и я не могу запустить код с моей машины. Команда, которую я пытаюсь сделать:

Ошибка, которую я получаю:

Сначала я подумал, что это была правка, поэтому я попытался запустить команду с sudo (получил ту же ошибку), я также видел один пример с файловым путем в кавычках, поэтому я пробовал это, но у меня также была такая же ошибка.

Я просмотрел файлы проекта, и на самом деле это не файл с именем example.jar. Есть ли команда, которую я должен запустить сначала, чтобы ее создать?

Заранее благодарим за помощь!

1 ответ

Да, чтобы запустить банку, она должна существовать.

При его создании вам необходимо сопоставить структуру каталогов с структурой пакета.

Например, ваши каталоги могут быть:

для источников и для файлов классов:

(часто вы найдете классы в ../bin/ .. вместо ../classes/ .. именованная папка или исходные файлы и файлы классов смешиваются в тех же каталогах)

соответствует структуре пакета:

, тогда вы должны перейти в базовый каталог иерархии:

или установите его с параметром -C jar -C /home/ellen/proj/java/foo/example/classes . или из home jar -C proj/java/foo/example/classes . в качестве относительного пути.

Вы создаете файл jar, например:

и проверьте его:

Обратите внимание, что есть файл манифеста, автоматически сгенерированный и полезный, в качестве шаблона, где вы можете добавить информацию о том, что ваш основной класс, если у вас есть такой, но который довольно строгий в отношении синтаксиса (верхний / нижний регистр, разрывы строк).

Такая запись основного класса должна быть добавлена, если вы хотите запустить ее без указания основного класса:

, иначе вы должны использовать:

В сущности, файл jar представляет собой zip-архив и может работать с этими инструментами.

Чистое разделение src / и bin / files полезно, когда у вас более нескольких классов и, возможно, глубокая структура пакетов.

будет тогда, начиная с классов каталога / включать все, что часто вам нужно. (пример / class, example / util / .class, example / net / * class . )

Error: Unable to access jarfile server.jar

Error: Invalid or corrupt jarfile server.jar
Error: An unexpected error occurred while trying to open file server.jar

Связанные статьи

Если у вас не получается войти в игру и вы видите ошибку указанную в заголовке (или другую.

Следующие рекомендации помогут вам решить проблемы с подключением к серверу:1) Проверьте точность.

I use the command: java -jar Calculator.jar

How I created the jar:



27 Answers 27

I had encountered this issue when I had run my Jar file as

java -jar TestJar

java -jar TestJar.jar

Missing the extension .jar also causes this issue.


Fixed

I just placed it in a different folder and it worked.


[Possibly Windows only]

Beware of spaces in the path, even when your jar is in the current working directory. For example, for me this was failing:

I was able to fix this by givng the full, quoted path to the jar:

Credit goes to this answer for setting me on the right path.


Just came across the same problem trying to make a bad USB.

I tried to run this command in admin cmd

But got this error:

Solution

1st step

Right click the jarfile in question. Click properties. Click the unblock tab in bottom right corner. The file was blocked, because it was downloaded and not created on my PC.

2nd step

In the cmd I changed the directory to where the jar file is located.

Then I typed dir and saw the file was named duckencode.jar.jar

So in cmd I changed the original command to reference the file with .jar.jar

That command executed without error messages and the inject.bin I was trying to create was now located in the directory.

Hope this helps.

i had the same issue when trying to launch the jar file. the path contained a space, so i had to place quotes around. instead of:

This worked for me.


I had similar problem and i even tried running my CMD with administrator rights, but it did not solved the problem.

The basic thing is that make sure to change the Directory in cmd to current directory where your jar file is.

Do following steps:

1.Copy jar file to Desktop.

type command cd desktp

then type java -jar filename.jar

This should work.


Instead of the correct version:

sometime it happens when you try to (run or create) a .jar file under /libs folder by right click it in android studio. you can select the dropdown in top of android stuio and change it to app. This will work



If you are using OSX, downloaded files are tagged with a security flag that prevents unsigned applications from running.

to check this you can view extended attributes on the file

You can then clear the attributes with


For me it happens if you use native Polish chars in foldername that is in the PATH. So maybe using untypical chars was the reason of the problem.

Disregarding relative file paths fixed it right up.

In my case the suggested file name to be used was jarFile*.jar in the command line. The file in the folder was jarFile-1.2.3.jar . So I renamed the file to jarFile . Then I used jarFile.jar instead of jarFile*.jar and then the problem got resolved


To avoid any permission issues, try to run it as administrator. This worked for me on Win10.

Run Command Prompt as administrator and execute the command in this format. Double check the sentence if there is typo.

If it shows something like JRE 1.xxx is not a valid JDK Java Home , make sure the System variables for JAVA_HOME in Environment Variables is pointing to the correct JDK directory. JDK 1.8 or above is recommended (2018).

Читайте также: