如前所提到的,一个插件除了包含一个插件描述文件外,几乎就是一个常规的Grails应用。
尽管如此,当安装以后,插件的结构还是有些许的差别。比如一个插件目录的结构如下:[code]+ grails-app
- controllers
- domain
- taglib
etc. - lib
- src
- java
- groovy
- web-app
- js
- css[/code]从本质上讲,当一个插件被安装到Grails工程以后, grails-app 下边的内容将被拷贝到以plugins/example-1.0/grails-app(以example为例)目录中.
这些内容 不会 被拷贝到工程的源文件主目录,即插件永远不会跟工程的主目录树有任何接口上的关系。
然而,那些在特定插件目录中 web-app 目录下的静态资源将会被拷贝到主工程的 plugins目录下.
比如 web-app/plugins/example-1.0/js.
因此,要从正确的地方引用这些静态资源也就成为插件的责任。比如,你要在GSP中引用一个JavaScript文件,你可以这样:<g:createLinkTo dir="/plugins/example/js" file="mycode.js" />
这样做当然可以,但是当你开发插件并且单独运行插件的时候,将产生相对链接(link)的问题.
为了应对这种变化即不管插件是单独运行还是在Grails应用中运行,特地新增一个特别的pluginContextPath 变量,用法如下:<g:createLinkTo dir="${pluginContextPath}/js" file="mycode.js" />
这样在运行期间 pluginContextPath 变量将会等价于/ 或 /plugins/example 这取决于插件是单独运行还是被安装在Grails应用中在lib 和 src/java 以及 src/groovy 下的Java、Groovy代码将被编译到当前工程的 webapp/WEB-INF/classes 下边,因此在运行时也不会出现类找不到的问题.