我有一个Grails插件,我使用它作为一些共享静态资源的容器,将由内部的各种其他Grails项目(CSS,JS文件等)使用。使用插件的想法只是为了分享这些东西 - 插件并没有真正做任何其他非常有趣的事情。直接引用插件内资源的最佳方法是什么?我宁愿不创建自定义标记库,因为我实际上并没有在这里添加任何功能;我只想访问插件中的资源 - 例如,从GSP引用CSS文件:
<g:link rel="stylesheet" url="${resource(dir:'css', file:'mycss.css',
plugin:'myplugin')}"/>
这个想法是否违反了插件的概念,其中只有暴露的某些方面,其余部分是黑盒子?在相关的Grails项目之间共享静态资源的替代方法也是受欢迎的,以防我试图通过这种方式走向疯狂,错误的道路。 :)
答案 0 :(得分:3)
首先,在Grails中,插件不被视为黑盒子。相反,所有代码都暴露出来;如果你真的想把它变成一个黑盒子,那么你应该使用另一个插件Binary Artifacts。
其次,你的方法非常明智。要访问插件资源,我会创建一个像:
这样的标记库def res = { attrs ->
attrs.dir=pluginContextPath
//Do whatever you want here
out << g.resource(attrs)
}
并以与<g:resource>
相同的方式调用它。这样,您甚至不必公开插件的资源路径。 Nimble plugin正在使用这种方法。
你也可以看一下Grails Resources plugin,它试图处理Grails插件和项目中静态资源依赖的噩梦。我从来没有使用它,但在我的下一个Grails项目中肯定会集成它(BTW,它将包含在Grails 1.4中)。