调用依赖于外部库的java程序

时间:2009-12-02 13:16:41

标签: java php exec shell-exec

我试图在php中调用java程序,将其与web界面一起使用。

Java程序依赖于外部lib:commons-cli-1.2.jar

所以基本上我需要在调用java程序之前导出它;但如果我先将它导出为:

shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar');

然后将java程序称为:

shell_exec('java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o');

我认为它会为每次通话创建不同的shell;然后导出对java程序没有任何影响。或者我错了吗?

否则,它应该在服务器中输出一个文件。但事实并非如此。那么,有什么不对?有什么想法吗?

编辑:但是可能是因为某些参数如para_i代表输入文件名,所以我必须为此指定完整路径?因为我只是假设输入文件在同一个工作目录中,不会有任何问题,是吗?

edit-2:当我使用命令行时它输出正确;)

4 个答案:

答案 0 :(得分:0)

你是对的,每个shell_exec创建一个单独的shell。

env CLASSPATH=whatever java -switches

答案 1 :(得分:0)

你应该能够这样称呼它。

shell_exec('java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

另一个选择是单独发出2个命令,但是对于同一个shell,如下所示:

shell_exec('export CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

编辑: 在设置变量时,某些shell不允许您调用export。所以这可能比上面的第二个选项更安全:

shell_exec('CLASSPATH=$CLASSPATH:~/lib/commons-cli-1.2.jar; export CLASSPATH; java ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

另一个编辑: 如果上述工作都没有,那么你将不得不在拍摄时遇到更多问题。你的java程序是否在命令提示符下工作?

java -cp $CLASSPATH:/home/user/lib/commons-cli-1.2.jar ComputePagerank -i param1 -d param2 -e param3 -o param4 > message

答案 2 :(得分:0)

我会用

shell_exec('java -cp $CLASSPATH:/home/yourname/dir/lib/commons-cli-1.2.jar ComputePagerank -i $para_i -d $para_d -e $para_e -o $para_o > message');

和(这很重要)将tilde(〜)替换为目录的实际路径(/home/yourname说)。 〜由shell扩展,取决于你正在使用的shell。

答案 3 :(得分:0)

尝试使用您要执行的命令创建一个简单的shell脚本。您可以将参数传递给shell脚本,这也不是问题。

例如

 echo "Running Script..."
 java -cp $CLASSPATH:~/lib/commons-cli-1.2.jar ComputePagerank -i $1 -d $2 -e $3 -o $4 > message

然后尝试使用一些参数从命令行调用它。输出了吗?然后尝试从php脚本中调用它。输出了吗?如果没有,那么您可能需要检查权限。前段时间我有一个简单的经验,一个Java程序根本没有写文件的权限。