从PHP和shell调用Java - java.lang.NoClassDefFoundError:

时间:2013-08-30 06:42:20

标签: java php shell unix

我有两个java类,它们位于... / jtest / StepRegTest目录中并包含“package StepRegTest;”指令。

选项1 。我直接从shell调用它:

[jtest]# java StepRegTest.Main

一切正常。

选项2 。我通过PHP exec

调用java
<?php
echo getcwd() . "\n";
exec("java StepRegTest.Main 2>&1", $output);
print_r( $output );
?>

当我从shell调用它时,PHP文件与选项1位于同一目录 jtest 中。但是,它会返回错误:

线程“main”中的异常java.lang.NoClassDefFoundError:com / quinncurtis / matpackjava / DMatBase

引用这些缺失类的jar存档位于CLASSPATH中。 该类的导入参考是:

import com.quinncurtis.matpackjava.DDMat;

请注意,当我从shell执行代码时,一切正常。

这是什么问题?为什么它可以从shell运行,而不是从PHP运行?

谢谢!

1 个答案:

答案 0 :(得分:1)

如果正在使用CLASSPATH环境变量,请在php exec()调用时验证它是否已设置;它可能会迷路。

一种简单的检查方法是:

<?php
echo getcwd() . "\n";
exec("env", $output);
print_r( $output );
?>

要在php脚本中设置CLASSPATH变量,可以执行以下操作:

putenv("CLASSPATH=/path/to/lib.jar");

这是一个描述putenv()的页面:

http://php.net/manual/en/function.putenv.php