2

複数の Play アプリ間で共通のロジックを共有するために、Play Framework モジュールを作成しています。私のモジュールでやりたいことの 1 つは、サードパーティ製モジュール (優れたMarkdown モジュールなど) を介して、頻繁に使用される機能を提供することです。

まず、これは可能ですか?.markdown().raw()Markdown モジュールを依存関係として明示的に宣言しなくても、モジュールを含むすべてのアプリで String 拡張機能を使用できるようにしたいと考えています。Play Framework Cookbookの第5 章は、私の読み方が間違っていない限り、それが可能であることを暗示しているようです。

第二に、可能であれば、どのように機能しますか? 次のバニラのサンプル ケースを作成しましたが、まだエラーが発生します。

新しい空のアプリケーション「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

play depsmyappを実行したところ、mymod が正常に検出され、 myapp/modules/mymodmymod への絶対パスを含むファイルが生成されました。

を使用して myapp を実行し、 http://localhost:9000/play runでウェルカム ページを表示できました。ここまでは順調ですね。

次に、次のように変更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()}

myapp を再起動しましたが、次のエラーが表示されます。

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 -> markdown [1.5,)行を追加して再起動し、動作することを確認しました.myapp/conf/dependencies.yml

明らかな何かが欠けているように感じます。助けていただける方に、事前に感謝します!:)

4

1 に答える 1

0

はい、同じ問題がありました。カスタムの自家製モジュールによる推移的な依存関係が機能しないようです

于 2012-04-25T07:09:17.480 に答える