複数の 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 deps
myappを実行したところ、mymod が正常に検出され、 myapp/modules/mymod
mymod への絶対パスを含むファイルが生成されました。
を使用して 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
明らかな何かが欠けているように感じます。助けていただける方に、事前に感謝します!:)