所以这可能是一个有趣的问题。 我在centos 5.5 x64上安装了tomcat5,并能够启动并运行。 我的问题是,其中一个webapps需要使用javamail,但在catalina日志中,我得到的错误:
javax.mail.NoSuchProviderException:smtp
(+我们都知道和爱的几百行完全有意义的“堆栈跟踪”)
现在我读了很多地方,这意味着smtp.jar不在我的类path – 但我不知道如何确保这是事实。 在catalina日志中我收到通知:
INFO: The Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64/server: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/lib/amd64: /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64/jre/../lib/amd64: /usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
(我添加了新行,所以你可以阅读它)。 这是我的class级路线吗? 我可以回答这个问题,并说不是它不是这个java库的path。
所以我可以find一些名为:
/usr/share/java/classpathx-mail
其中包含:
imap-1.3.1.jar mail-1.3.1-api.jar mailapi.jar pop3-1.3.1.jar smtp-1.3.1.jar imap.jar mail-1.3.1-providers-1.1.1.jar nntp-1.3.1.jar pop3.jar smtp.jar mail-1.3.1-api-1.1.1.jar mail-1.3.1-providers.jar nntp.jar providers.jar
这看起来像我想要的…另外,在$ CATALINA_HOME / common / lib我有以下条目:
[javamail].jar -> /usr/share/java/javamail.jar
这导致我相信我有javamail,并且path设置正确,除了javamail与openjdk1.6(tomcat5的默认安装)不兼容。 我注意到在rpm -ql openjdk1.6给出的文件列表中没有提到javamail。 aslo这是我的替代品configuration:
alternatives --config java There are 3 programs which provide 'java'. Selection Command ----------------------------------------------- *+ 1 /usr/lib/jvm/jre-1.6.0-openjdk.x86_64/bin/java 2 /usr/lib/jvm/jre-1.4.2-gcj/bin/java 3 /opt/jre1.6.0_22/bin/java
(忽略/opt/jre1.6.0_22/bin/java这是一个失败的尝试,我将被删除 – 它与其他安装完全隔离)。 我觉得gcc和openjdk javas是冲突的,我可以安全地删除它吗?
所以最后,给出这个信息是:
所以它看起来有点像我有javamail,我只是不知道它的正确版本(以及tomcat5当然不喜欢它)。
另外我运行的是我在Ubuntu上运行的相同的代码(我用Sun jdkconfiguration了它),并且所有的代码都在那里运行,所以这不是一个实现错误,只是configuration错误。
所以基本上这就是我从这个经验中学到的东西:不要使用gjc的打包版本,然后在其上安装其他java(即使使用替代品!)。
我想这可能是“最佳做法”的规则:
所以现在我有一个不错的新版本的tomcat(tomcat 7),运行的是新版本的sun jdk1.6。 闻起来几乎和新鲜的ECC服务器内存一样好 – MMMMMMMMMM rammmmm。