第 12 章 安装和使用SpringExt插件

12.1. SpringExt插件有什么用?
12.2. Maven插件
12.2.1. 在pom.xml中定义插件
12.2.2. 启动schema服务器
12.2.3. 导出所有的schemas
12.2.4. Maven插件的可选参数
12.3. Eclipse插件
12.3.1. 安装插件
12.3.2. 利用插件编辑Webx/SpringExt配置文件
12.3.3. 利用插件编辑SpringExt组件
12.4. 本章总结

12.1. SpringExt插件有什么用?

SpringExt扩展了Spring的schema机制,使得开发者可以借助schema来扩展框架的功能。然而使用schema来编写配置文件时,我们面临一个问题:XML编辑器到哪里去找到schema?

例如,我们在Eclipse中打开一个典型的Webx配置文件:

例 12.1. 在XML中指定Schema Location

<?xml version="1.0" encoding="UTF-8" ?>
<beans:beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:services="http://www.alibaba.com/schema/services"
    xmlns:loaders="http://www.alibaba.com/schema/services/resource-loading/loaders"
    xmlns:beans="http://www.springframework.org/schema/beans"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="
        http://www.alibaba.com/schema/services
            http://localhost:8080/schema/services.xsd 
        http://www.alibaba.com/schema/services/resource-loading/loaders
            http://localhost:8080/schema/services-resource-loading-loaders.xsd 
        http://www.springframework.org/schema/beans
            http://localhost:8080/schema/www.springframework.org/schema/beans/spring-beans.xsd 
    ">
    ...
</beans:beans>

指定schema的位置。

一般Eclispe会用一个XML编辑器来打开这类文件,然后试着从schemaLocation中取得所需要的schemas,并用它们来验证文件。然而,Webx/SpringExt的schema并不存在于网络上的任何一个地方,而是存在于jar包中,或是在内存中自动生成的。显然XML编辑器不能从这样的schemaLocation中得到什么。

因此,当我们试图验证(validate)XML文件的时候,编辑器会警告:无法取得schema或DTD。当我们试图让Eclipse自动提示语法信息时,Eclipse会无所适从。如图所示。

无法验证的XML配置文件

图 12.1. 无法验证的XML配置文件

SpringExt提供了两种插件,可用来解决这个问题:Maven插件,和Eclipse插件。

  • Maven插件 —— 你可以使用它,在localhost本机上启动一个监听8080端口的Schema Server,通过它就可以访问到所有的schemas。

    这也是为什么例 12.1 “在XML中指定Schema Location”中,要把schemaLocation指向localhost:8080的原因。只有这样,才能让任何普通的XML编辑器不需要任何特殊的设置,就可以通过这个插件来读到正确的schemas。

  • Eclipse插件 —— 通过它,XML编辑器可以直接取得所有schemas的内容。除此之外,Eclipse插件也提供了更多的便利功能,例如:自动引入或清除某个namespace/schema定义。

12.2. Maven插件

通过SpringExt Maven插件,你可以在localhost本机上启动一个监听8080端口的Schema Server,通过它就可以访问到所有的schemas。这种机制适合于任何一种支持schema验证的XML编辑器。

12.2.1. 在pom.xml中定义插件

在使用Maven插件之前,必须在要使用插件功能的项目的pom.xml文件中作出定义。如果是多模块的项目(multi-modules),下面的内容必须定义在根项目(即pom项目)中。

例 12.2. 在pom.xml这定义SpringExt Maven插件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    ...
    <properties>
        ...
        <springext-plugin-version>1.2</springext-plugin-version> 
    </properties>
    ...
    <build>
        <plugins>
            ...
            <plugin>
                <groupId>com.alibaba.citrus.tool</groupId> 
                <artifactId>springext-maven-plugin</artifactId>
            </plugin>
        </plugins>
        <pluginManagement>
            <plugins>
                ...
                <plugin>
                    <groupId>com.alibaba.citrus.tool</groupId>
                    <artifactId>springext-maven-plugin</artifactId>
                    <version>${springext-plugin-version}</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

在maven properties中指定插件的版本号,方便以后升级。

在项目中配置插件。

12.2.2. 启动schema服务器

在项目的根目录下,执行以下命令:

mvn springext:run

上述命令执行以后,打开浏览器,输入网址http://localhost:8080/schema就可以看到类似下面的内容:

用SpringExt maven插件罗列schemas

图 12.2. 用SpringExt maven插件罗列schemas

如果这时你重新打开刚才的XML配置文件(最好重启eclipse以清除缓存),就可以看到Eclipse已经能够弹出语法提示了。

启动schema服务器以后,可以看到语法提示

图 12.3. 启动schema服务器以后,可以看到语法提示

12.2.3. 导出所有的schemas

在项目的根目录下,执行以下命令:

mvn springext:export

上述命令执行以后,将生成一个target/schemas文件夹,里面包含了所有的可用的schemas。

12.2.4. Maven插件的可选参数

SpringExt Maven插件还包含了一系列可选的参数。

表 12.1. SpringExt Maven插件的可选参数

参数名适用于命令默认值说明
contextPath mvn springext:run /schema

指定Schema URL的路径:

http://localhost:8080 /contextPath /myschema.xsd

port mvn springext:run 8080

指定Schema URL的端口:

http://localhost :8080 /contextPath/myschema.xsd

noTestClasspath

mvn springext:run

mvn springext:export

false

是否在单元测试的classpath中寻找schemas?

destdir mvn springext:export target/schemas

导出schemas到指定的文件夹。

uriPrefix mvn springext:export 导出schemas的目标文件夹的绝对路径

在导入的schemas中,如果有引用其它的schema的地方,使用指定的URL前缀。

http://localhost:8080/schema /myschema.xsd

这些参数可以通过两种方法来设定。以参数port为例:

  • 通过pom.xml来设定

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        ...
        <build>
            <plugins>
                ...
                <plugin>
                    <groupId>com.alibaba.citrus.tool</groupId>
                    <artifactId>springext-maven-plugin</artifactId>
                    <configuration>
                        <port>9090</port>
                    </configuration>
                </plugin>
            </plugins>
            ...
        </build>
    </project>
  • 或者,通过命令行来设定

    mvn springext:run -Dport=9090

12.3. Eclipse插件

如果你用Eclipse来作为你的应用开发的工具,那么SpringExt Eclipse插件能够为你提供最方便、更强大的功能。

12.3.1. 安装插件

  1. 下载并安装Eclipse,建议安装最新版的Eclipse:http://www.eclipse.org/

  2. 运行Eclipse,从Help菜单中,打开Eclipse Marketplace。

    打开Eclipse Marketplace

    图 12.4. 打开Eclipse Marketplace

  3. 搜索关键词webx,找到Webx/SpringExt Plugin,点击Install按钮。

    搜索并找到Webx/SpringExt Plugin

    图 12.5. 搜索并找到Webx/SpringExt Plugin

  4. 开始安装插件。

    勾选要安装的features

    图 12.6. 勾选要安装的features

    确认License授权

    图 12.7. 确认License授权

    忽略关于签名的安全警告,选择OK继续安装

    图 12.8. 忽略关于签名的安全警告,选择OK继续安装

    重启Eclipse

    图 12.9. 重启Eclipse

12.3.2. 利用插件编辑Webx/SpringExt配置文件

安装完成Eclipse插件以后,然后打开任何一个Webx/SpringExt的配置文件。你会发现,打开的是一个稍微有点不同的XML编辑器。

SpringExt配置文件编辑器的界面

图 12.10. SpringExt配置文件编辑器的界面

假如你看到的并不是类似这样的编辑器界面,那么很有可能是因为你的Eclipse中还安装了其它的插件(例如:你安装了Spring IDE、或者OxygenXML编辑器等),导致该文件被其它的编辑器打开了。如果是这样,请尝试用鼠标右键点击文件,然后选择Open With > SpringExt Configuration File Editor。如图所示。

用Open With菜单打开文件

图 12.11. 用Open With菜单打开文件

在这个编辑器中,你可以做如下的事情:

  • 验证配置文件是否合乎schema语法 —— 按鼠标右键,选择validate。

  • 自动语法提示 —— 在键入时,eclipse会自动弹出语法提示;或者,你也可以通过eclipse的快捷键来激活语法提示(完全类似于编辑Java代码)。

  • 引入Namespaces —— 在键入时,eclipse会提示你引入可用的namespaces。每个namespace代表一个SpringExt Configuration Point或Spring的一个可扩展功能。引入一个namespace,就会创建一个xmlns条目,以及相应的schemaLocation

    在<beans:beans>中引入services namespace

    图 12.12. 在<beans:beans>中引入services namespace

    在<services:pipeline>中引入valves namespace

    图 12.13. 在<services:pipeline>中引入valves namespace

  • 按住CTRL键(Mac下为CMD键),将鼠标移到任何一个链接上,或者namespace前缀及对应的标签上,都是可以点击查看的。

    表 12.2. 可作为超链接打开的内容

    分类可点击的内容说明
    SpringExt Configuration Point http://www.alibaba.com/schema/services

    这是一个Namespace URI,它代表一个SpringExt的扩展点(Configuration Point)。

    点击它就可以打开相应Configuration Point的编辑器。

    http://localhost:8080/schema/services.xsd

    这是一个Schema Location的链接,它代表一个SpringExt的扩展点(Configuration Point)的schema。

    点击它就可以打开相应Configuration Point的编辑器。

    services :resource-loading

    这是一个Namespace前缀,它代表一个SpringExt的扩展点(Configuration Point)。

    点击它就可以打开相应Configuration Point的编辑器。

    SpringExt Contribution http://localhost:8080/schema/services/resource-loading.xsd"

    这是一个Schema Location的链接,它代表一个SpringExt的捐献(Contribution)的schema。

    点击它就可以打开相应Contribution的编辑器。

    services :resource-loading

    这是一个XML标签,它代表一个SpringExt的捐献(Contribution)。

    点击它就可以打开相应Contribution的编辑器。

    Spring Pluggable Schema http://www.springframework.org/schema/beans

    这是一个Namespace URI,它代表一个Spring所定义的schema。

    点击它就可以打开相应的Spring Pluggable Schema的编辑器。

    http://localhost:8080/schema/www.springframework.org/schema/beans/spring-beans.xsd

    或者:http://www.springframework.org/schema/beans/spring-beans.xsd

    这是一个Schema Location的链接,它代表一个Spring所定义的schema。

    点击它就可以打开相应的Spring Pluggable Schema的编辑器。

    beans :bean

    这是一个Namespace前缀,它代表一个Spring所定义的schema。

    点击它就可以打开相应的Spring Pluggable Schema的编辑器。

  • 点击Namespaces标签,即可管理配置文件中所引入的namespaces。

    Namespaces编辑界面

    图 12.14. Namespaces编辑界面

    在这里,你可以:

    • 浏览所有可用的namespaces。

      你可以用层次状,或是扁平状两种视图来查看。点击namespaces列表顶上的按钮即可切换视图。

      对于层次状列表,点击namespaces列表顶上的按钮即可实现全部展开,或点击按钮可全部收拢。

      你也可以在过滤框里输入任何字符,来过滤列表,使之只显示你感兴趣的条目。

    • 选中某行namespace(注意不是打勾),可查看这个namespace的详细信息。

      例如:namespace的类型、定义在何处、有哪些schema版本等等。

    • 点击详细信息中的超链接可打开相应的内容的编辑器。

    • 勾选或清除namespace,可在配置文件中插入或清除相应的xmlns和schemaLocation条目。

  • 清除未使用的namespaces —— 选择SpringExt菜单中的“ Cleanup Unused Namespaces”、或者点击工具栏上的、或者按快捷键CTRL-SHIFT-O(Mac上为CMD-SHIFT-O)。

  • 升级到Webx 3.2.x的配置风格 —— 从Webx 3.2.x开始,改进了配置文件的格式 —— 对于非contribution element采用unqualifed风格,也就是无namespace前缀,使配置文件更易读。

    表 12.3. 新老风格对比

    老风格Webx 3.2.x 新风格
    <services:form>
        <services:group name="register">
            <services:field name="name" displayName="你的名字">
                <fm-validators:required-validator>
                    <fm-validators:message>必须填写 ${displayName}</fm-validators:message>
                </fm-validators:required-validator>
            </services:field>
        </services:group>
    </services:form>
    <services:form>
        <group name="register">
            <field name="name" displayName="你的名字">
                <fm-validators:required-validator>
                    <message>必须填写 ${displayName}</message>
                </fm-validators:required-validator>
            </field>
        </group>
    </services:form>

    但是这样配置文件会和以前的版本有所不兼容。如果你决定要升级Webx到3.2.0,只需要选择SpringExt菜单中的“ Upgrade to Webx 3.2.x Format”,或者点击工具栏上的按钮,即可立即转换格式。

    如果你要升级的配置文件不止一个,最简单的方法是在项目的根目录下执行下面的命令:

    mvn springext:convert

    这样所有的Webx/SpringExt配置文件都会被转换成新的格式。

12.3.3. 利用插件编辑SpringExt组件

当你在配置文件中,点击任何一个超链接时,就会打开并转到另一个编辑器。在那里,你可以浏览或修改(如果可写的话)SpringExt的组件的内容。

  • 编辑Configuration Point

    编辑Configuration Point

    图 12.15. 编辑Configuration Point

  • 编辑Contribution

    编辑Contribution

    图 12.16. 编辑Contribution

  • 编辑Spring Pluggable Schema

    编辑Spring Pluggable Schema

    图 12.17. 编辑Spring Pluggable Schema

12.4. 本章总结

SpringExt提供了可扩展的schema机制,虽然很强大,但是如果没有插件的帮助,使用起来很不便。用好插件,可帮助你成倍地提高工作效率。