"Невозможно получить доступ к jarfile" в Linux land

у нас есть веб-приложение, работающее под 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

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

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

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

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/ 

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

4 ответов


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

/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-это другой процесс, который не может интерпретировать кавычки.

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


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


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

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


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

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

выполнить .файл jar в каталоге с помощью,

java -jar ./iDesigner.jar

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