如何在 play 2.4 中使用 CommonsMailerPlugin

Posted

技术标签:

【中文标题】如何在 play 2.4 中使用 CommonsMailerPlugin【英文标题】:How to use CommonsMailerPlugin in play 2.4 【发布时间】:2015-07-15 02:42:04 【问题描述】:

我刚刚从 play 2.2->play 2.3 迁移了我的应用程序,现在无法从 play 2.3->play 2.4 迁移它,尤其是使用 CommonsMailerPlugin。我收到以下运行时错误:

play.api.UnexpectedException: Unexpected exception[ClassNotFoundException: play.api.libs.mailer.CommonsMailerPlugin]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:165) ~[play-server_2.11-2.4.0.jar:2.4.0]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1$$anonfun$1.apply(DevServerStart.scala:121) ~[play-server_2.11-2.4.0.jar:2.4.0]
at scala.Option.map(Option.scala:146) ~[scala-library-2.11.6.jar:na]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:121) ~[play-server_2.11-2.4.0.jar:2.4.0]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1$$anonfun$apply$1.apply(DevServerStart.scala:119) ~[play-server_2.11-2.4.0.jar:2.4.0]
at scala.util.Success.flatMap(Try.scala:230) ~[scala-library-2.11.6.jar:na]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:119) ~[play-server_2.11-2.4.0.jar:2.4.0]
at play.core.server.DevServerStart$$anonfun$mainDev$1$$anon$1$$anonfun$get$1.apply(DevServerStart.scala:111) ~[play-server_2.11-2.4.0.jar:2.4.0]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.liftedTree1$1(Future.scala:24) ~[scala-library-2.11.6.jar:na]
at scala.concurrent.impl.Future$PromiseCompletingRunnable.run(Future.scala:24) ~[scala-library-2.11.6.jar:na]
    Caused by: java.lang.ClassNotFoundException: play.api.libs.mailer.CommonsMailerPlugin
at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[na:1.8.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[na:1.8.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_45]
at java.lang.Class.forName0(Native Method) ~[na:1.8.0_45]
at java.lang.Class.forName(Class.java:348) ~[na:1.8.0_45]
at play.utils.Reflect$.getClass(Reflect.scala:142) ~[play_2.11-2.4.0.jar:2.4.0]
at play.api.Plugins$$anonfun$loadPlugins$1.apply(Plugins.scala:88) ~[play_2.11-2.4.0.jar:2.4.0]
at play.api.Plugins$$anonfun$loadPlugins$1.apply(Plugins.scala:87) ~[play_2.11-2.4.0.jar:2.4.0]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) ~[scala-library-2.11.6.jar:na]
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:245) ~[scala-library-2.11.6.jar:na]

【问题讨论】:

【参考方案1】:

只需按照Play 2.4 Mailer 的说明进行操作,然后从 conf/play.plugins 文件中删除对 Mailer 插件的引用即可。

就我而言,这是文件中唯一的一行,所以我删除了该文件。

【讨论】:

【参考方案2】:

据我所知,Play 2.4 有新版本的 Mailer 插件。 并且有一个包更改:

com.typesafe.plugin.CommonsMailerPlugin - 2.4.1 版 play.api.libs.mailer.CommonsMailerPlugin - 2.3.x 版

【讨论】:

感谢您的回复,我的 build.sbt 和 1500:com.typesafe.plugin 中有一个 libraryDependency "com.typesafe.play" %% "play-mailer" % "3.0.1" .CommonsMailerPlugin 在 play.plugins 但它仍然显示相同的错误。 我在使用securesocial插件时遇到了同样的问题。旧版本的 securesocial 依赖于旧版本的 play-mailer,但我在尝试迁移到 Play 2.4 时使用了新版本。所以我不得不更新securesocial。当您的项目中的某些其他库依赖于旧版本的 play-mailer 并尝试导入它时,可能就是这种情况... 你是对的,我使用的是play-authenticate,但是切换到支持play 2.4的最新版本。仍然不确定为什么会这样,你知道为什么会这样吗? 没有。但是您是否查看了日志文件中的完整错误堆栈跟踪?

以上是关于如何在 play 2.4 中使用 CommonsMailerPlugin的主要内容,如果未能解决你的问题,请参考以下文章

插件如何在 play 2.4 中使用注入和对象而不是类

在 Play 2.4 中使用 DI 时如何进行数据库初始化?

如何在 play framework(scala) 2.4 中获取当前会话或请求对象?

如何使用 Jenkins 在本地自动部署 Play Framework (2.4) 应用程序?

如何以编程方式将 Play 2.4 模块的执行限制为单个主机?

在play framework 2.4中,如何访问ssl socket(或ssl client cert)