从PHP调用Java程序

时间:2012-03-30 02:14:52

标签: 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.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");

2 个答案:

答案 0 :(得分:1)

您需要将包含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选项卡。其中一个罐子就是你需要的(你可以通过解压缩看到罐子的内容)。它可能被称为mail.jar,j2ee.jar,javamail.jar - 有一些不同的可能候选者。由于您的测试应用程序非常简单,因此它应该具有很少的依赖性,因此您可以轻松地发现它。

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

希望有所帮助。

答案 1 :(得分:0)

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

希望有所帮助