从PHP调用Java程序

从PHP调用Java程序,java,php,exec,Java,Php,Exec,我创建了一个Java程序,可以从我的gmail帐户发送电子邮件。我在Eclipse中对其进行了编程,效果很好。但是,当我尝试从PHP调用它时,会出现以下错误: Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Address at sendVerificationEmail.main(sendVerificationEmail.java:3) Caused by: java.lang.ClassNotF

我创建了一个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.*项,请查看项目->属性->构建路径->库选项卡。这里列出的其中一个罐子是您需要的(您可以通过解压缩查看罐子的内容)。它可能被称为mail.jar、j2ee.jar、javamail.jar——可能有几个不同的候选者。因为你的测试应用程序很简单,所以它应该很少依赖,所以你可以很容易地发现它

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


希望对您有所帮助。

您需要添加包含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.*项,请查看项目->属性->构建路径->库选项卡。这里列出的其中一个罐子是您需要的(您可以通过解压缩查看罐子的内容)。它可能被称为mail.jar、j2ee.jar、javamail.jar——可能有几个不同的候选者。因为你的测试应用程序很简单,所以它应该很少依赖,所以你可以很容易地发现它

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


希望这会有所帮助。

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


希望对您有所帮助

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


希望它能有所帮助

为什么不改用PHP发送呢?是的,我同意minitech的观点。我不知道为什么不能使用php发送邮件。但是这里有一个链接将向您展示如何用java执行外部程序->也许我们可以假设java程序足够复杂,不值得用PHP重写。即使不是这样,用PHP发送邮件也是可能的,这个错误可能发生在更合理地使用Java的情况下。@Paul如果从命令行运行它(不是用PHP)会出现同样的错误吗?为什么不直接用PHP发送呢?是的,我同意minitech的观点。我不知道为什么不能使用php发送邮件。但是这里有一个链接将向您展示如何用java执行外部程序->也许我们可以假设java程序足够复杂,不值得用PHP重写。即使不是这样,用PHP发送邮件也是有可能的,但是为了更合理地使用Java,这个错误可能会发生。@Paul如果从命令行(不是用PHP)运行它,是否也会出现同样的错误?