Archetype 创建项目的时候,如果没有指定具体的 Archetype 插件的坐标,maven-archetype-plugin 会提供一个 Archetype 列表选择。
在基于 M2Eclipse 插件的 MyEclipse 中创建项目的时候,也会可视化地显示所有的 Archetype 插件供选择。那这些列表 内容来源于哪里呢?这就涉及了 Archetype 数据库。
Archetype 数据库实际上就是 archetype-catalog.xml 文件,里面描述了对应 Archetype 插件的坐标。当使用 maven-archetype-plugin 创建 Maven 项目的时候,如果没有指定具体的插件坐标,maven-archetype-plugin 就会读取 archetype-catalog.xml 中的信息,形成列表供用户选择使用。
如下是一个简单的 archetype-catalog.xml 样例,包含了 webapp-jee5 和 webapp-javaee6 两个 Archetype。
<?xml version="1.0" encoding="UTF-8"?>
<archetype-catalog
xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0
http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<archetypes>
<archetype>
<groupId>org.codehaus.mojo.archetypes</groupId>
<artifactId>webapp-jee5</artifactId>
<version>1.3</version>
<repository>
https://mvnrepository.com/artifact/org.codehaus.mojo.archetypes/webapp-jee5
</repository>
</archetype>
<archetype>
<groupId>org.codehaus.mojo.archetypes</groupId>
<artifactId>webapp-javaee6</artifactId>
<version>1.3</version>
<repository></repository>
</archetype>
</archetypes>
</archetype-catalog>
通过上面 archetype-catalog.xml 的了解,Archetype 也是通过坐标(groupId、artifactId、version)唯一定位的。另外,还有一个 repository 元素,指定查找 Archetype 的位置,默认是 Maven 的中央仓库。
maven-archetype-plugin 能读到的 archetype-catalog.xml 有如下几种。
maven-archetype-plugin 内置的 Archetype Catalog,有五六十个 Archetype。
用户本地的 Archetype Catalog,目录是:用户/.m2/archetype-catalog.xml。默认情况该文件不存在,可以在对应目录下添加。
Maven 中央仓库的 Archetype Catalog,具体位置是 http://repo1.maven.org/maven2/archetype-catalog.xml。
指定本地任何位置的 archetype-catalog.xml。
使用 HTTP 协议,指定网络中的远程 archetype-catalog.xml。
如果执行 Maven 命令的话,可以在“mvn archetype:generate”后面使用 archetypeCatalog 参数,指定 maven-archetype-plugin 使用的 Catalog。例如:
在执行“mvn archetype:generate”时,可以使用 archetypeCatalog 参数指定多个 XML 文件,中间用逗号隔开。同时,maven 的 archetypeCatalog 的默认值是“remote,local”。
用户不仅可以基于 maven-archetype-plugin 使用在 archetype-catalog.xml 中描述的插件,也可以使用 maven-archetype-plugin 中的 crawl 目标搜索指定仓库中的 Archetype,生成 archetype-catalog.xml。比如:
Maven 会自动遍历 repository 中的 Archetype,生成 catalog 文件到 catalog 指定的位置。如果没有指定 repository 参数,Archetype 插件自动搜索 settings.xml 中定义的 localRepository 目录。
这样就可以将任意地方的 Archetype(包括网络中的)都集中本地的一个 archetype-catalog.xml 描述,形成 Archetype 列表。
基于项目开发的实际需要,用户可以在 M2Eclipse 开发工具中配置 Archetype Catalogs。下面介绍安装好了 M2Eclipse 的 MyEclipse 中的操作方式。
单击 MyEclipse 中的菜单,选择 Preferences 选项,展开左边的 Maven 选项,选中 Archetypes,如图 1 所示。
图 1 Maven 的 Archetypes 列表
单击 Add Local Catalog… 按钮,在如图 2 所示的界面中,选择要加入的本地 archetype-catalog.xml 文件和描述,就可以完成本地 Catalogs 的添加。
图 2 添加本地Archetype数据库
同样,单击 Add Remote Catalog… 按钮,在弹出的对话框中输入远程 archetype-catalogs.xml 的地址和描述,可以完成一个 Remote Catalog 的添加。