2011-02-03 3 views
6

나는 다른 여러 Grails 프로젝트 (CSS, JS 파일 등)에 의해 사용될 공유 정적 리소스를 기본적으로 컨테이너로 사용하는 Grails 플러그인을 가지고있다. 플러그인을 사용한다는 아이디어는 단지 이런 것들을 공유하는 것이 었습니다. 플러그인은 정말 재미있는 것을하지 않습니다. 플러그인 내부의 리소스를 직접 참조하는 가장 좋은 방법은 무엇입니까? 나는 실제로 여기에 어떤 기능도 추가하지 않기 때문에, custom taglibs를 만들지는 않을 것이다. 난 그냥 플러그인 내부의 리소스에 액세스하려는 - GSP에서 CSS 파일을 참조하기 위해이 같은 예를 :Grails : 설치된 플러그인 내부에있는 리소스를 참조하는 방법은 무엇입니까?

<g:link rel="stylesheet" url="${resource(dir:'css', file:'mycss.css', 
plugin:'myplugin')}"/> 

이 아이디어는 플러그인의 개념을 위반 하는가, 그것의 특정 측면이 있어야 할 곳에 노출되고 나머지는 블랙 박스입니까? 관련 Grails 프로젝트간에 정적 리소스를 공유하는 또 다른 접근법도 환영합니다.이 경우에도 미친, 잘못된 방향의 경로로 넘어갈 수 있습니다. :)

답변

3

먼저 Grails에서 플러그인은 블랙 박스로 간주되지 않습니다. 반대로 모든 코드는 공개됩니다. 정말로 블랙 박스로 만들고 싶다면 다른 플러그인 Binary Artifacts을 사용해야합니다.

둘째로, 귀하의 접근 방식은 매우 합리적인 것입니다.

def res = { attrs -> 
    attrs.dir=pluginContextPath 
    //Do whatever you want here 
    out << g.resource(attrs) 
} 

<g:resource>와 같은 방법으로 호출 : 플러그인 리소스에 액세스하기 위해, 나는 같은 태그 라이브러리를 만든 것입니다. 그렇게하면 플러그인의 리소스 경로를 노출 할 필요조차 없습니다. Nimble plugin은이 방법을 사용하고 있습니다.

또한 Grails 플러그인과 프로젝트 사이의 정적 리소스 의존성의 악몽을 처리하려고 시도하는 Grails Resources plugin을 살펴볼 수 있습니다. 필자는 결코 그것을 사용하지 않았지만, 다음 Grails 프로젝트에서 필자는 그것을 통합 할 것이다 (BTW, Grails 1.4에 포함될 것이다).

관련 문제