繁体   English   中英

依赖外部库调用Java程序

[英]Calling java program dependent on external library

我正在尝试在php中调用Java程序以将其与网络界面一起使用。

Java程序依赖于外部库: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');

我认为它为每个调用创建不同的外壳; 那么导出对Java程序没有任何影响。 还是我错了?

否则,它将在服务器中输出文件。 但事实并非如此。 那么,怎么了? 任何想法?

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

编辑2:当我使用命令行时,它会正确输出;)

没错,每个shell_exec都会创建一个单独的shell。

env CLASSPATH=whatever java -switches

您应该可以这样称呼它。

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

我会用

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');

并且(这很重要)将波浪号(〜)替换为目录的实际路径( /home/yourname )。 〜由外壳扩展,并且取决于您使用的外壳。

尝试使用要执行的命令创建一个简单的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程序有类似的体验,而Java程序根本没有写文件的权限。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM