我有一个独立的库(jar 文件),它被添加到应用程序服务器类路径中,以监视 JVM 中所有正在运行的应用程序,并在发生某些问题时发送电子邮件。
jar 文件将所有依赖项捆绑在 jar 中(使用 maven-shade-plugin),包括 javamail jar 文件。
当应用服务器中的其他 Web 应用程序之一将 javamail 作为依赖项时,我的 jar 文件中的 javamail 会发生一些依赖项冲突,并且出现异常
MessagingException :javax.mail.NoSuchProviderException: No provider for smtp
知道我无法修改正在运行的应用程序,我该如何解决这个冲突。我只能控制我的 jar 文件。
编辑:
我通过 javamail API 进行了调试。我发现 javax.mail.Session 使用反射构造了一个 com.sun.mail.smtp.SMTPTransport 类型的新对象并将两个参数传递给构造函数,而不是使用位于它尝试的同一个 jar 文件中的 SMTPTransport使用位于已部署应用程序之一中的另一个 mail.jar 的 SMTPTransport。