2012-04-25 2 views
2

여러 Play 응용 프로그램간에 몇 가지 공통 논리를 공유하기 위해 Play Framework 모듈을 작성 중입니다. 모듈에서 수행하고자하는 작업 중 하나는 제 3 자 모듈을 통해 자주 사용되는 기능을 제공하는 것입니다 (예 : 우수한 Markdown module).Play 응용 프로그램 내에서 모듈의 종속성을 사용하는 방법

우선이 작업을 수행 할 수 있습니까? 모듈을 포함하는 모든 응용 프로그램이 명시 적으로 Markdown 모듈을 종속성으로 선언 할 필요없이 .markdown().raw() 문자열 확장을 사용할 수 있기를 바랍니다. Play Framework Cookbook 5 장은 내가 잘못 읽지 않는 한 그것이 가능하다는 것을 암시하는 것처럼 보입니다.

둘째, 가능한 경우 어떻게 작동합니까? 다음 바닐라 예제를 만들었지 만 여전히 오류가 발생하고 있습니다.

나는 빈 부모 응용 프로그램 인 "myapp"와 새로운 빈 모듈 "mymod"를 동일한 상위 디렉토리에 만들었습니다.

self: mymod -> mymod 0.1 

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

내가 mymod를에 play deps를 실행하고 성공적으로 다운로드 및 마크 다운 모듈을 설치 : 나는 다음에 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.ymlplay -> markdown [1.5,) 줄을 추가 시도하고 응용 프로그램을 다시 시작하고 작동하는지 확인했다.

나는 분명히 뭔가 빠져있는 것 같아. 도움을 줄 수있는 사람에게 미리 감사드립니다! :)

답변

0

예 동일한 맞춤형 홈 모듈을 통한 전이 의존성이 작동하지 않는 것으로 보입니다.