"Невозможно получить доступ к 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: отличное предложение Андреа Спадаччини, однако кажется, что у нас уже есть разрешения на обход через путь: Edit: С Eva мы можем подтвердить, что выполнение строки через командную строку (bash), что она работает, но она выдает ошибку, если мы выполним строку из класса ProcessBuilder, встроенного в файл jar, в Linux. Так же, как сделал бы наш JBoss. Двойные кавычки параметры являются наиболее вероятной причиной проблемы здесь.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/
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
это сработало для меня.