Jetty,强制webapp使用服务器lib / jndi中包含的不同javax.mail

时间:2017-05-10 13:47:14

标签: java jetty javamail jetty-9

我是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中删除该依赖关系吗?

提前非常感谢

3 个答案:

答案 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可供您使用   应用

https://javaee.github.io/javamail/FAQ

答案 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