2012-04-25 9 views
2

複数のPlayアプリケーション間で共通のロジックを共有するために、Play Frameworkモジュールを作成しています。私のモジュールがしたいことの1つは、サードパーティのモジュールを使って頻繁に使用されるいくつかの機能を提供することです(例えば、優れたMarkdown module)。Playアプリケーション内でモジュールの依存関係を使用する方法

まず、これは可能ですか?モジュールを含むすべてのアプリケーションが、Markdownモジュールを依存関係として明示的に宣言する必要なく、.markdown().raw()文字列拡張を使用できるようにしたいと思います。 Play Framework Cookbook 5章は、私が間違って読んでいない限り、可能であることを示唆しているようです。

第2に、可能であればどうしますか?私は次のバニラの例を作成しましたが、まだエラーが発生しています。

新しい空のアプリケーション "myapp"と空の新しいモジュール "mymod"を同じ親ディレクトリに作成しました。私はMYMODにplay depsを実行し、それが正常にダウンロードし、マークダウンモジュールをインストールし

self: mymod -> mymod 0.1 

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

:私はその後にmymod/conf/dependencies.ymlを修正しました。 play build-moduleもエラーなく正常に動作しました。

その後、私はにmyapp/conf/dependencies.ymlを修正:私はmyappの上play deps走っ

# Application dependencies 

require: 
    - play 
    - mymod -> mymod 0.1 

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

、それが成功しMYMODを見つけ、MYMODへの絶対パスを含む、myapp/modules/mymodファイルを生成しました。

私はplay runを使ってmyappを実行し、http://localhost:9000/のようこそページを見ることができました。ここまでは順調ですね。私はmyappの再起動、そして今、私は次のエラーを取得する

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

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

次に、私はにmyapp/app/views/Application/index.htmlを修正しました。

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 

そして、ちょうど、私はクレイジーじゃない確認するために、私はmyapp/conf/dependencies.ymlからplay -> markdown [1.5,)行を追加しようとしたアプリを再起動し、それが動作することを確認しました。

私は何かが明らかに欠けているように感じる。助けることができる誰にも事前に感謝します! :)

答えて

0

はい私は同じ問題を抱えていました。カスタム家庭用モジュールによる過渡的な依存関係は機能しません。

関連する問題