我是Jetty的新手,我已经使用Tomcat很多年了,我想知道强制我的webapp使用javax.mail 1.5.5的最佳做法,因为它使用的是javax.mail.glassfish- 1.4.1.v201005082020.jar在/ srv / jetty / lib / jndi of jetty 9.3.10上找到。
我不相信用我的网络应用程序那个版本替换那个版本是安全的,是真的吗?
最后,如果最佳做法是更新jar,将其保留在原来的位置,那么我应该从WEB-INF / lib中删除该依赖关系吗?
提前非常感谢
答案 0 :(得分:0)
我对Jetty了解不多,但您可能只需更换jar文件。
如果您想使用与您的应用程序捆绑在一起的JavaMail版本而不是Jetty安装中的版本,可能有一种方法可以告诉Jetty更喜欢您的版本。
请注意current version of JavaMail is 1.5.6所以我不知道您为什么要使用1.5.5。
答案 1 :(得分:0)
据我所知,没有机制强制像jetty这样的servlet容器使用war文件中的捆绑邮件jar。
如果您不需要jetty jndi - mail - 功能,记录here只需摆脱jar。
有趣的是,Java Mail FAQ指出了tomcat:
问:如何配置Tomcat以允许我在网络中使用JavaMail 应用?答:要使用JavaMail运行Web应用程序,您可以添加 JavaMail javax.mail.jar文件,如果您不使用JDK 1.6或 更新,JavaBeans Activation Framework的javax.activation.jar文件到 安装Tomcat的目录下的lib目录。 这将导致Tomcat将这些jar文件包含在其类路径中 自动。有关详细信息,请参阅Tomcat中的JNDI Resources HOW-TO 文档。或者,您可以打包mail.jar文件和 您的Web应用程序的lib目录中的activation.jar文件 包(战争文件)。
因此,Java Mail错误地指出您只需将其与war文件捆绑在一起。
同样来自FAQ
如果您在Web服务器或应用程序服务器中运行,则可能是 在其中一个目录中提供自己的mail.jar版本。您 应该只有一个版本的mail.jar可供您使用 应用
答案 2 :(得分:0)
我得到了码头用户的帮助,其中撰稿人Jan Bartel对我说:
我可能会制作一个新的jndi.mod,例如my-jndi.mod 从$ JETTY_HOME / modules / jndi.mod复制并放入 $ JETTY_BASE /模块。然后我会改变它的最后一行来引用a 不同的lib,例如lib / my-jndi。所以模块看起来像这样:
[name] myjndi
[depend]服务器
[lib] lib / jetty-jndi - $ {jetty.version} .jar lib / my-jndi / * .jar放入 javax.mail jars以及你需要的任何其他内容到$ JETTY_BASE / lib / my-jndi。 然后你需要做的就是用java -jar激活它 ../start.jar --add-to-start = my-jndi,你已经完成了。好事 关于这种方法是它可以在任何更新中移植 不同版本的码头。
此外还打开了issue