Grails 1.1 插件仓库 - 理解插件的结构

如前所提到的,一个插件除了包含一个插件描述文件外,几乎就是一个常规的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 下边,因此在运行时也不会出现类找不到的问题.