“无法访问jarfile”在Linux的土地

我们有一个在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" 

所有的path被证实是正确的, jar文件path被双引号括起来 。 系统部门在两杯啤酒和一台巨无霸之后证实,运行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 

我怀疑这是一个权利问题,所以我们要求他们改变执行的权限,但唉,仍然没有满足。

我唯一能想到的是这是一个path转换错误,或者我们没有把正确的权利应用到正确的地方!

编辑: Andrea Spadaccini的一个很好的build议,但是,似乎我们已经通过path的遍历权限:

 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)执行该行,但是如果我们从embedded在Linux文件中的ProcessBuilder类中执行该行,则会引发错误。 就像我们的JBoss所做的一样。 参数周围的双引号是这个问题最可能的原因。

Solutions Collecting From Web of "“无法访问jarfile”在Linux的土地"

@ian_scho嗨!,我认为这里的问题是通过命令行引号是允许的,因为是由在Linux中的进程bash解释(这是命令行解释)…当在java代码中使用ProcessBuilder类,引号被解释为路径的一部分…为了显示错误“无法访问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进程的父进程是另一个不能解释引号的进程。

我希望这会帮助你:)

检查导致JAR文件的所有目录是否具有jbossadmin用户的读取和遍历权限( +rx )。

如果从shell脚本运行Java命令,请检查shell脚本是否具有Linux / Unix行终止符,而不是Windows脚本终结符,如果在Windows平台上创建了shell脚本,则可能会发生这种情况。 这种错误肯定会发生在这种情况下。

使用Linux上的Kate编辑器检查并更正,或使用dos2unix工具(如果可用)。

转到jar文件所在的目录。

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

然后使用执行目录中的.jar文件,

 java -jar ./iDesigner.jar 

这对我有效。