从PHP调用Java程序


Call Java program from PHP

我创建了一个Java程序,它从我的gmail帐户发送电子邮件。我在Eclipse中对它进行了编程,它运行得很好。但是当我尝试从PHP调用它时,我得到了以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Address
  at sendVerificationEmail.main(sendVerificationEmail.java:3)
Caused by: java.lang.ClassNotFoundException: javax.mail.Address
  at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
  at java.security.AccessController.doPrivileged(Native Method)
  at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
  at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
  at java.lang.ClassLoader.loadClass(ClassLoader.java:266)

以下是Eclipse使用的命令:

/usr/lib/jvm/java-6-openjdk/bin/java -agentlib:jdwp=transport=dt_socket,suspend=y,address=localhost:53094 -Dfile.encoding=UTF-8 -classpath /home/****/dir/to/program/java/bin:/home/****/dir/to/program/java/lib/javamail-1.4.4/mail.jar sendEmail

以下是PHP使用的命令:

exec("java -classpath /home/****/dir/to/program/java/bin:/home/****/dir/to/program/java/lib/javamail-1.4.4/mail.jar sendVerificationEmail $name $email $comments");

您需要将包含javax.mail…类的jar文件添加到命令中:

例如,下面将把当前目录(.)和javax.jar添加到类路径:

(linux)   java -classpath .:javax.jar com.me.MyMailClient
(windows) java -classpath .;javax.jar com.me.MyMailClient

javax.jar并不是它的名字,这只是为了告诉你它放在哪里。要了解Eclipse从哪里获得javax.mail.*项,请查看您的Project->Properties->Build Path->Libraries选项卡。其中列出的一个jar就是您所需要的(您可以通过解压缩来查看jar的内容)。它可能被称为mail.jar、j2ee.jar、javamail.jar——可能有几种不同的候选者。由于你的测试应用程序很简单,它应该很少有依赖项,所以你可以很容易地发现它。

您需要将这个jar文件的副本放在运行脚本附近(上面的示例假设它与您运行java命令的目录相同)。

希望能有所帮助。

问题是您的Web服务器(例如APACHE)无法在类路径中定位java类文件您要做的是使用CLASSPATH环境变量将类路径更改为Jar/classes所在的位置,或者将classes/Jar文件放在APACHE的lib目录(APACHE/lib)中,然后重新启动服务器。

希望它能帮助