20140429java.lang.NoSuchMethodError com.sun.mail.util.TraceInputStream
2016-04-29 11:09
330 查看
java.lang.NoSuchMethodError com.sun.mail.util.TraceInputStream
在用java实现发送邮件功能时,jdk1.8的两台windows主机上可以正常工作,在jdk1.7的Ubuntu主机上,发送邮件时就会抛异常:java.lang.NoSuchMethodError: com.sun.mail.util.TraceInputStream.(Ljava/io/InputStream;Lcom/sun/mail/util/MailLogger;)V at com.sun.mail.smtp.SMTPTransport.initStreams(SMTPTransport.java:2014) at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1936) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:654) at javax.mail.Service.connect(Service.java:291) at ...
pom中引入的jar包如下:
<dependency> <groupId>javax.mail</groupId> <artifactId>mailapi</artifactId> <version>1.4.3</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.5.5</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.5.0-b01</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.0</version> </dependency>
这个错误其实是很明显的jar包冲突引起的,度娘也说了:说javaEE5已经带了这个方法,但有问题,而程序又没有去加载你pom中的jar,所以就找不到这个类了。Google一下的解决方案是:
By default, Java apps running on latest Heroku stack use OpenJDK 8. Your problem does not seems related to the actual JVM implementation but rather due to the missing smtp-1.5.1.jar in classpath . To be sure to load correctly TraceInputStream try this : java.net.URL classUrl = this.getClass().getResource("com.sun.mail.util.TraceInputStream"); out.println(classUrl.getFile());
我大概明白它的意思其实是去加载你用pom下的jar包里面的这个class,读者也可以尝试用ClassLoader去加载一下这个class试一下,其实,笔者这里用了一个比较变态的不靠谱方法:
我在项目里新建了一个与TraceInputStream同包同名的类,代码原封不动,其实这里的解决方案的本质,也是用到了java的ClassLoader机制,AppClassLoader加载了我的项目的类,自然就不再加载第三方(非java核心类库)中的同一个类,然后程序自然就能找到上面那个Class了。
后面有时间的话,会研究一下用ClassLoader来加载这个Class,感觉这样更靠谱些,您说呢?
相关文章推荐
- 垃圾邮件过滤器 python简单实现
- JDK动态代理VS CgLib
- Ubuntu 安装 JDK 问题
- 使用C#发送带附件的电子邮件的方法的代码示例分析
- C#实现按数据库邮件列表发送邮件的方法
- C#使用自带的email组件发送邮件的方法
- 使用C#编写简单的图形化的可发送附件的邮件客户端程序
- C#.NET采用HTML模板发送电子邮件完整实例
- 使用WordPress发送电子邮件的相关PHP函数用法解析
- php简单实现发送带附件的邮件
- C#发送内置图片html格式邮件的方法
- javascript验证邮件地址和MX记录的方法
- asp+JMAIL实现发送邮件
- C++实现邮件群发的方法
- 使用Java发送带附件的附件的示例
- 用ASP.NET做的个性化的邮件发送系统
- sqlserver数据库使用存储过程和dbmail实现定时发送邮件
- Jmail组件发送邮件之绝对能用的函数
- 我的群发邮件程序
- smtp邮件发送一例