【问题标题】:How to use a dependency of a module within a Play app如何在 Play 应用中使用模块的依赖项
【发布时间】:2012-05-05 16:11:35
【问题描述】:

我正在编写一个 Play Framework 模块,以便在多个 Play 应用程序之间共享一些通用逻辑。我希望我的模块做的一件事是通过 3rd-party 模块提供一些常用功能,例如优秀的Markdown module

首先,有可能做到这一点吗?我希望包含我的模块的所有应用程序都能够使用 .markdown().raw() String 扩展名,而无需将 Markdown 模块显式声明为依赖项。 Play Framework Cookbook 第 5 章似乎暗示这是可能的,除非我读错了。

其次,如果可能的话,它是如何工作的?我创建了以下 vanilla 示例案例,但仍然出现错误。

我在同一个父目录中创建了一个新的空应用程序“myapp”和一个新的空模块“mymod”。然后我将mymod/conf/dependencies.yml修改为:

self: mymod -> mymod 0.1

require:
    - play
    - play -> markdown [1.5,)

我在 mymod 上运行了play deps,它成功下载并安装了 Markdown 模块。运行 play build-module 也运行良好,没有错误。

然后,我将myapp/conf/dependencies.yml修改为:

# Application dependencies

require:
    - play
    - mymod -> mymod 0.1

repositories:
    - Local Modules:
        type: local
        artifact: ${application.path}/../[module]
        contains:
            - mymod

我在 myapp 上运行 play deps,它成功找到了 mymod,并生成了 myapp/modules/mymod 文件,其中包含 mymod 的绝对路径。

我使用play run 运行了myapp,并且能够在http://localhost:9000/ 上看到欢迎页面。到目前为止一切顺利。

接下来,我将myapp/app/views/Application/index.html修改为:

#{extends 'main.html' /}
#{set title:'Home' /}

${"This is _MarkDown_, by [John Gruber](http://daringfireball.net/projects/markdown/).".markdown().raw()}

我重新启动了我的应用程序,现在我收到以下错误。

09:03:23,425 ERROR ~

@6a6eppo46
Internal Server Error (500) for request GET /

Template execution error (In /app/views/Application/index.html around line 4)
Execution error occured in template /app/views/Application/index.html. Exception raised was MissingMethodException : No signature of method: java.lang.String.markdown() is applicable for argument types: () values: [].

play.exceptions.TemplateExecutionException: No signature of method: java.lang.String.markdown() is applicable for argument types: () values: []
        at play.templates.BaseTemplate.throwException(BaseTemplate.java:86)
        at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:257)
        at play.templates.Template.render(Template.java:26)
        at play.templates.GroovyTemplate.render(GroovyTemplate.java:187)
        at play.mvc.results.RenderTemplate.<init>(RenderTemplate.java:24)
        at play.mvc.Controller.renderTemplate(Controller.java:660)
        at play.mvc.Controller.renderTemplate(Controller.java:640)
        at play.mvc.Controller.render(Controller.java:695)
        at controllers.Application.index(Application.java:13)
        at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:548)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:502)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:478)
        at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:473)
        at play.mvc.ActionInvoker.invoke(ActionInvoker.java:161)
        at Invocation.HTTP Request(Play!)
Caused by: groovy.lang.MissingMethodException: No signature of method: java.lang.String.markdown() is applicable for argument types: () values: []
        at /app/views/Application/index.html.(line:4)
        at play.templates.GroovyTemplate.internalRender(GroovyTemplate.java:232)
        ... 13 more

为了确认我没有发疯,我尝试将 play -&gt; markdown [1.5,) 行添加到 myapp/conf/dependencies.yml 并重新启动应用程序,并确认它可以正常工作。

我觉得我错过了一些明显的东西。非常感谢任何可以提供帮助的人! :)

【问题讨论】:

    标签: module playframework dependencies playframework-1.x


    【解决方案1】:

    是的,我遇到了同样的问题,似乎通过自定义自制模块的传递依赖不起作用

    【讨论】:

      猜你喜欢
      • 2012-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2015-04-19
      相关资源
      最近更新 更多