Java 播放框架2.4 docker映像运行错误

Java 播放框架2.4 docker映像运行错误,java,dependency-injection,guice,playframework-2.4,Java,Dependency Injection,Guice,Playframework 2.4,我已经为我的应用程序设置了docker映像。目标平台是debian jessie。 图像的构建没有错误。当我试着运行它时,麻烦就发生了。我是这样做的: sudo docker run appname -Dconfig.file=/tmp/application.conf -Dapplication.home=/root/targer/universal/stage ,提供外部配置文件和application.home env变量 问题是,使用自定义绑定的DI类有问题,例如,我在appl

我已经为我的应用程序设置了docker映像。目标平台是debian jessie。 图像的构建没有错误。当我试着运行它时,麻烦就发生了。我是这样做的:

    sudo docker run appname -Dconfig.file=/tmp/application.conf -Dapplication.home=/root/targer/universal/stage
,提供外部配置文件和application.home env变量

问题是,使用自定义绑定的DI类有问题,例如,我在application.conf中放了这一行:

    play.modules.enabled += "me.example.inject.SetupInjectors"
在这个扩展AbstractModule的类中,我绑定了我的实现,如下所示:

    bind(Interface.class).to(InterfaceImplementation.class);
错误是

    Oops, cannot start the server. com.google.inject.ProvisionException: Unable to provision, see the following errors:

  1) No implementation for core.notification.email.MailTemplateService was bound.
  while locating core.notification.email.MailTemplateService
    for parameter 2 at core.services.impl.user.service.UserServiceImpl.<init>(UserServiceImpl.java:55)
  while locating core.services.impl.user.service.UserService
    for field at controllers.Application.userService(Application.java:34)
  while locating controllers.Application
    for parameter 1 at router.Routes.<init>(Routes.scala:108)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router
Oops,无法启动服务器。com.google.inject.ProvisionException:无法设置,请查看以下错误:
1) 未绑定core.notification.email.MailTemplateService的实现。
查找core.notification.email.MailTemplateService时
对于core.services.impl.user.service.UserServiceImpl.(UserServiceImpl.java:55)中的参数2
查找core.services.impl.user.service.UserService时
用于controllers.Application.userService(Application.java:34)处的字段
定位控制器时。应用程序
用于router.Routes处的参数1。(Routes.scala:108)
定位路由器时。路由
查找play.api.inject.routeProvider时
查找play.api.routing.Router时
对于所有自定义绑定组件,它会重复46次相同的错误。不用说,activator run就像一个魔咒。在启动过程中,我的play.modules.enabled设置似乎被忽略了


另外,值得一提的是,我对其他Play项目有一个库依赖,该项目打包为库并存储在sonatype nexus服务器上。

问题很小。我从主机FS传递了-Dconfig.file,这是一个荒谬的过程。因此,我将我的开始脚本更改为

sudo docker run -v /home/myapp/conf:/conf myapp-Dconfig.file=/conf/application.conf -Dapplication.home="/root/target/universal/stage"

将我的本地路径映射到映像的fs。Play Framework使用了classpath中的application.conf(它就在那里,因为我对另一个Play!项目有库依赖关系)。

经过两天的努力,您的回答帮助我找到了解决方案。谢谢!请注意,myapp和-Dconfig之间有一个空格。。。