此时,您已经准备好让 Maven 知道可以从哪个外部系统库获得相关 Grester Groovy 依赖关系,从而在本地把 Grester 编译和安装成 Maven 插件。您可以通过把两个远程系统库添加到 $MAVEN_HOME/conf/settings.xml 文件中来完成此操作,如下所示:
清单 1. 把 Maven 指向包含 Groovy 依赖关系的远程系统库
2 <profiles>
3 <profile>
4 <id>repositoryDefinitions</id>
5 <repositories>
6 .....
7 .....
8 <!-- You may have other repositories -->
9 ....
10 ....
11 <repository>
12 <id>apache-snapshotsv/id>
13 <name>Apache Snapshots Repository</name>
14 <url>http://people.apache.org/repo/m2-snapshot-repository</url>
15 <layout>default</layout>
16 <snapshots>
17 <enabled>true</enabled>
18 <updatePolicy>daily</updatePolicy>
19 <checksumPolicy>ignore</checksumPolicy>
20 </snapshots>
21 <releases>
22 <enabled>false</enabled>
23 </releases>
24 </repository>
25 .....
26 .....
27 </repositories>
28 ...
29 </profile>
30 </profiles>
31 </settings>
32
接下来是 Maven 的插件配置,该插件配置将指定 Grester 的 Groovy 插件依赖关系的系统库。此插件系统库配置放在为系统库声明的同一个配置文件 中(例如,名称 repositoryDefinitions 被用作配置文件的名称),如下所示:
清单 2. 把 Maven 指向包含 Groovy 插件依赖关系的远程系统库
2 <profiles>
3 <profile>
4 <id>repositoryDefinitions</id>
5 ....
6 ....
7 </repositories>
8 <pluginRepositories>
9 <!-- You may have other plug-in repositories -->
10 ....
11 ....
12 <pluginRepository>
13 <id>apache-snapshots</id>
14 <name>Apache Snapshots Repository</name>
15 <url>http://people.apache.org/repo/m2-snapshot-repository</url>
16 <layout>default</layout>
17 <snapshots>
18 <enabled>true</enabled>
19 <updatePolicy>daily</updatePolicy>
20 <checksumPolicy>ignore</checksumPolicy>
21 </snapshots>
22 <releases>
23 <enabled>false</enabled>
24 </releases>
25 </pluginRepository>
26 ...
27 ...
28 </pluginRepositories>
29 ...
30 </profile>
31 </profiles>
32 </settings>
33
现在您终于可以构建插件直至完成。Grester 要求使用 Maven V2.0.5 或更高版本。如果使用早期版本,则会在编译和使用 Groovy-mojo-support 依赖关系中的功能时遇到问题。如果 $MAVEN_HOME/bin 目录是可执行文件系统路径的一部分,则可以从 maven-grester-plugin 目录(包含 Grester 的 pom.xml 文件的目录)中执行 mvn clean install 命令,如下所示:
图 4. 从命令行构建 Grester
构建通常运行得很快(少于 20 秒)。图 5 显示成功安装窗口。
图 5. 在 Maven 的本地系统库中安装 Grester
必须注意的是 Grester 安装在 Maven 的本地系统库中的位置。如果不熟悉 Maven,则其默认本地系统库为 $USER_HOME/.m2/repository/。默认情况下,在运行 Windows 的计算机中,$USER_HOME 很可能被转换为 Documents and Settings/$USERNAME/(其中 $USERNAME 是登录的用户)。在 Linux/UNIX 计算机中,$USER_HOME 将转换成 /home/$USERNAME/。快速浏览 Windows 本地系统库可以发现 Grester 被安装到 C:/Documents and Settings/$USERNAME/.m2/repository/org/apache/maven/plugins 中,并且创建了一个名为 maven-grester-plugin 的目录。此目录包含版本号目录(最新版本是 V0.3);该目录中有实际的 maven-grester-plugin-x.x.jar 文件。
使用此结构的原因在于 Grester 的 pom.xml 文件。如图 6 所示,Grester 项目的 groupId 是 org.apache.maven.plugins。用包含此字符串作为 groupId 值的 Java 或 Groovy 语言编写的所有 Maven 插件,相比拥有其他一些任意 groupId 的 Maven 插件,都包含更易于通过命令行执行的 mojo。由于 Grester 将使用此字符串,因此在通过命令行执行各个 mojo 目标时,您无需预先考虑 groupId 和 artifactId。
图 6. Grester 的 pom.xml 配置文件中的 groupId
maven-grester-plugin 目录是在安装时创建的(install 目标将创建此目录),如下所示。其他标准 Maven 插件都安装在同一个上级目录中,例如 maven-surefire-plugin 和 maven-install-plugin 目录。
图 7. Maven 的本地系统库中的 Grester
如果项目的自定义组 ID 和工件 ID 太长且很难记或者只是重复键入很麻烦,那么使用特殊的 groupId 字符串十分有利。这是默认插件(例如,maven-compiler-plugin 或 maven-surefire-plugin)的基本 Maven 目标(例如 compile、test,或者 test-compile)在执行时不需要诸如 mvn org.apache.maven.plugin:maven-compiler-plugin:2.0.2:compile 或 mvn org.apache.maven.plugin:maven-surefire-plugin:2.3:test 之类的命令的原因(只需 mvn compile 或 mvn test)。
将 Jester 安装为 Grester 的主要依赖关系
此时,除了 Grester 的核心 —— 实际的 Jester 依赖关系之外其他内容都已就绪。Windows 和 Linux/UNIX 平台提供了两个方便的脚本,它们可以把 Jester(即,实际的 jester-1.37.jar 文件)安装到 Maven 的本地系统库中。为什么提供这些脚本?难道不能在 Maven 获得其编译器、安装程序和其他插件依赖关系时从 Maven 所在的相同外部资源中下载这些脚本么?答案是 Jester 没有放在可公开获得的已知 Maven 系统库中(例如,Maven 的 Ibiblio),因此您不能用包含 Jester 的远程系统库来配置 Maven 的 $MAVEN_HOME/conf/settings.xml 文件(不考虑用 groupId-artifactId 版本组合安装它的方法)。
因此,分别为 Windows 和 Linux/UNIX 提供了 install-jester.bat 和 install-jester.sh 可执行文件。如果任何一个可执行文件在任意平台上执行失败,都可以使用如下所示的命令作为解决方法。
图 8. 建立 Jester 依赖关系
注:我写完这篇文章后,Grester V1.0.1 被发布到 Maven 公共系统库 中。这种持续不断地改进意味着您现在可以直接从著名的 Apache 系统库中获得插件,但是仍然需要有提供结合功能的 Jester 核心 JAR 和指令才能构成完整的架构。