여러 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.yml
에 play -> markdown [1.5,)
줄을 추가 시도하고 응용 프로그램을 다시 시작하고 작동하는지 확인했다.
나는 분명히 뭔가 빠져있는 것 같아. 도움을 줄 수있는 사람에게 미리 감사드립니다! :)