Welcome 微信登录

首页 / 软件开发 / JAVA / 精通Grails: 了解插件

精通Grails: 了解插件2011-07-25 IBM Scott Davis在开始阶段,精通 Grails 主要着眼于核心 Grails 功能。对如何将基础部件组合在一起了解得越多 ,将其结合起来构建一个完善的产品应用程序就会变得越容易。尽管我前面多次提到过插件,但我均有意 回避了对插件做深入的介绍。现在,该是介绍的时候了。

在接下来的几篇系列文章中,我将与您一起探索 Grails 插件系统。最早,Grails 平台的构建对可插 入性是有所考虑的。正因为有了这个虽小却十分重要的考虑,我们才能很方便地利用上百个预捆绑的功能 块。

在本文写作之时,清单 1 所示的 Groovy 脚本已经能够返回 225 个插件。(有关此脚本如 何工作的详细信息,请参见 “实战 Groovy:构建和解析 XML”。)

清单 1. 计算可用 Grails 插件的简单 Groovy 脚本

def addr = "http://plugins.grails.org/.plugin-meta/plugins-list.xml"
def plugins = new XmlSlurper().parse(addr)
def count = 0
plugins.plugin.each{
println it.@name
count++
}
println "Total number of plugins: ${count}"

要获得一个更为友好的列表,可以在命令提示符后键入 grails list-plugins 或访问 Grails Plugins 站点。

何为插件?

老练的 Java™ 开发人员都是一些精明的探寻者和收集者。他们从不梦想着去编写自已的日志库 ;而是简单地把 log4j JAR 放入其类路径。需要一个 XML 解析器吗?那好,将 Xerces JAR 添加到您的 项目中即可。这些可插入的功能块是面向对象编程的可重用性的一种体现。

Grails 插件可服务于同样的目的,不过,规模更大。它们可以包括很多 JAR 及 GroovyServer Page (GSP)、控制器、TagLib、服务等。就像 SiteMesh 将两个 GSP 合并成一个一样,插件可以将两个或多个 Grails 应用程序合并成一个。这样您就可以将更多的精力用于核心业务需求,在需要的时候,从外部资 源加入所需的额外功能 — 查询、认证、备用表示层等。

此外,插件实质上也是外部 资源。虽然 Grails 开发团队已经编写了一些有价值的插件,但绝大多数 插件仍来自于社区。实际上,Grails 团队一直致力于在适当的时候将其核心功能整合进插件,这就使得 Grails 自身在每次发布的时候都更小也更为稳定。

那么如何将其应用到 Blogito — 您在本系列中逐步构建的这个 “小型博客” 应用程序中呢?假设 您想添加的下一个功能是本地搜索功能。并且您愿意采用一个现有的解决方案而不是从头构建一个您自已 的搜索基础架构,那么请往下看。

安装一个搜索插件

这个搜索插件能为您的应用程序带来类似 Google 那样的搜索能力。它使用 Apache Lucene 创建索引 ,用 Compass 将索引钩挂到 Grails Object Relational Mapping (GORM)/Hibernate 生命周期。这就意 味着每当您创建、更新或删除一个 domain 类时,Lucene 索引都会相应更新。

要想安装此插件,请键入 grails install-plugin searchable。(下一章节将会深入介绍安装插件时 的技术细节。)

接下来,将这行代码 — static searchable = true — 添加到 grails-app/domain/Entry.groovy, 如清单 2 所示:

清单 2. 让 Entry 类成为可查询的

class Entry {
static searchable = true

static constraints = {
title()
summary(maxSize:1000)
filename(blank:true, nullable:true)
dateCreated()
lastUpdated()
}

static mapping = {
sort "lastUpdated":"desc"
}

static belongsTo = [author:User]

String title
String summary
String filename
Date dateCreated
Date lastUpdated
}