"Невозможно получить доступ к jarfile" на земле Linux - PullRequest
6 голосов
/ 06 апреля 2011

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

/usr/java/jdk1.6.0_18/bin/java -Xmx256M -DiDesigner.javabin=java -jar "/aplicaciones/jboss/nfs/pmc_tdt/bin/lib/iDesigner.jar" --compiler --obfuscate --in "81.ida" --out "directory:OUTPUT"

При этом возникает ошибка:

Unable to access jarfile "/aplicaciones/jboss/nfs/pmc_tdt/bin/lib/iDesigner.jar"

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

[root@miv-multicanalidad-01 lib]# pwd
/aplicaciones/jboss/nfs/pmc_tdt/bin/lib
[root@miv-multicanalidad-01 lib]# ls -l iDesigner.jar
-rw-r--r-- 1 jbossadmin jbossadmin 1329162 ene 22  2010 iDesigner.jar

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

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

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

drwxr-xr-x 3 root root 4096 abr  6  2010 /aplicaciones/
drwxr-xr-x+ 16 jbossadmin jbossadmin 4096 mar  7 10:13 /aplicaciones/jboss/
drwxrwxr-x+ 5 jbossadmin jbossadmin 4096 ene 25 09:21 /aplicaciones/jboss/nfs/
drwxr-xr-x 4 jbossadmin jbossadmin 4096 abr  6 16:03 /aplicaciones/jboss/nfs/pmc_tdt
drwxr-xr-x 4 jbossadmin jbossadmin 4096 sep  3  2010 /aplicaciones/jboss/nfs/pmc_tdt/bin/
drwxr-xr-x 3 jbossadmin jbossadmin 4096 abr  6 16:03 /aplicaciones/jboss/nfs/pmc_tdt/bin/lib/ 

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

Ответы [ 4 ]

8 голосов
/ 19 апреля 2011

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

/usr/java/jdk1.6.0_18/bin/java -Xmx256M -DiDesigner.javabin=java -jar "/aplicaciones/jboss/nfs/pmc_tdt/bin/lib/iDesigner.jar" --compiler --obfuscate --in "81.ida" --out "directory:OUTPUT" &

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

ps -adf

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

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

4 голосов
/ 06 апреля 2011

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

2 голосов
/ 06 октября 2012

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

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

1 голос
/ 06 марта 2017

Перейдите в каталог, где находится файл JAR.

cd /aplicaciones/jboss/nfs/pmc_tdt/bin/lib/

Затем выполните файл .jar в каталоге, используя,

java -jar ./iDesigner.jar

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...