我们有一个在JBoss 5下运行的Web应用程序,它定期启动一个'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 file path is enclosed by double quotes。在两台啤酒和一台巨无霸之后,系统部门确认运行JBoss的用户( jbossadmin )也是该文件的所有者:
[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
我怀疑它是rights issue所以我们要求他们change the permissions to execute,但唉,仍然没有满足感。
我唯一能想到的是path translation error或者我们没有将正确的权利应用到正确的地方!
编辑:Andrea Spadaccini的一个很好的建议,但似乎我们已经通过路径获得了遍历权限:
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那样。参数周围的双引号是此问题的最可能原因。
答案 0 :(得分:8)
@ian_scho嗨!,我认为这里的问题是命令行引号是允许的,因为linux中的进程bash解释了(这是命令行解释)...当在java代码中使用ProcessBuilder类时,引号被解释为路径的一部分......因为显示错误“无法访问jar文件”。您可以使用命令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执行的父进程是另一个无法解释引号的进程。
我希望这会对你有所帮助:)。
答案 1 :(得分:4)
检查导致JAR文件的所有目录是否具有+rx
用户的读取和遍历权限(jbossadmin
)。
答案 2 :(得分:2)
如果从shell脚本运行Java命令,请检查shell脚本是否具有Linux / Unix行终止符而不是Windows脚本,如果shell脚本是在Windows平台上创建的,则可能会发生这种情况。在这种情况下肯定会出现所述错误。
使用Linux上的Kate编辑器检查&正确,或dos2unix实用程序(如果有)。
答案 3 :(得分:1)
转到jar文件所在的目录。
cd /aplicaciones/jboss/nfs/pmc_tdt/bin/lib/
然后使用
执行目录中的.jar文件java -jar ./iDesigner.jar
这对我有用。