有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Play Framework 2.4 docker映像运行错误

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

    sudo docker run appname -Dconfig.file=/tmp/application.conf -Dapplication.home=/root/targer/universal/stage

,提供外部配置文件和应用程序。主环境变量

问题是,使用自定义绑定的DI类有问题,也就是说,我在应用程序中使用了这一行。形态:

    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

对于所有定制绑定组件,它会重复46次相同的错误。不用说,activator run就像一种魅力。看来我的剧本是这样的。模块。在启动过程中,启用的设置会被忽略

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


共 (1) 个答案

  1. # 1 楼答案

    问题很小。我通过了-Dconfig。来自主机FS的文件,这是一个荒谬的错误。所以,我把我的开始脚本改为

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

    将我的本地路径映射到图像的fs。Play Framework使用了一个应用程序。来自classpath的conf(它就在那里,因为我对另一个Play!项目有一个库依赖)