Maven Archetype

来源:互联网 发布:wow淘宝刷坐骑会封号吗 编辑:程序博客网 时间:2024/05/17 07:22
  1. 安装和配置
  2. 坐标和依赖
  3. 仓库
  4. 生命周期和插件
  5. 聚合与继承
  6. 使用 Maven 进行测试
  7. 灵活的构建
  8. Archetype
  9. 附录

Archetype

Archetype 我们可以把它理解成 Maven 项目的模板,例如 maven-archetype-quickstart 就是最简单的 Maven 项目模板,只需要提供基本元素(groupId、artifaceId、version等),它就能生成项目的基本结构及 POM 文件。

Archetype 的使用

  1. Archetype 并不是 Maven 的核心特性,它也是通过插件来实现的,这一插件就是 maven-archetype-plugin。尽管它只是一个插件,但由于其使用范围非常广泛。需要注意的是该插件 1.x 版本和 2.x 版本差异很大。在 1.x 版本中使用 Archetype 创建项目使用的目标是 archetype:create,但这一目标在 2.x 版本中已经不推荐使用了,取而代之的是 archetype:generate。它们主要的差异在于,前者要求用户必须一次性地从命令行输入所有的插件参数,而后者默认使用交互的方式提示用户选择或输入参数。不公如此,archetype:generate 也完全支持 archetype:create 的特性,因此我们已经完全没有必要去使用旧的 archetype:create 目标了。

  2. 使用 Archetype 的一般步骤

    Maven 3 中简单运行:

    $ mvn archetype:generate

    如果是 Maven 2,最好运行如下命令:

    $ mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-5:generate

    因为在 Maven 2 中如果没有指定插件的版本,Maven 会自动去下载最新的版本,进而可能得到不稳定的 SNAPSHOT 版本,导致运行失败。而 Maven 3 只会解析最新的稳定版本,因此是安全的。

    执行完上面的命令后,你就会看到一段长长的输出,有很多可用的 Archetype 可以选择。第一个 Archetype 前面都会对应一个编号,同时命令行会提示一个默认的编号,其对应的 Archetype 为 maven-archetype-quickstart,直接回车选择该 Archetype,紧接着 Maven 会提示输入要创建项目的groupId、artifactId、version 以及包名 package。

  3. 批处理方式使用 Archetype

    有时候用户可能不希望以交互的方式使用 Archetype,例如自动化 Shell 脚本创建
    项目,这时可以使用 mvn 命令的 —B 选项,要求 maven-archetype-plugin 以批处理的方式运行。不过这时用户还必须显式的声明要使用的,例如:

    $ mvn archetype:generate -B \-DarchetypeGroupId = org.apache.maven.archetype \-DarchetypeArtifactId = maven-archetype-quickstart \-DarchetypeVersion = 1.1 \-DgrouId = com.ch.maven \-Dartifactar=arfact = archetype-test \-Dversion = 1.1-SNAPSHOT \ -Dpackage = com.ch.maven 
  4. 常用 Archetype

    • maven-archetype-quickstart

    这可能是最常用的 Archetype,当 maven-archetype-plugin 提示用户选择 Archetyep 的时候,它就是默认值。maven-archetype-quickstart 生成项目十分简单,基本内容如下:

    • 一个包含 JUnit 依赖声明的 pom.xml。
    • src/main/java 主代码目录及该目录下一个名为 App 的输出 “Hello World!” 的类。
    • src/test/java 测试代码目录及目录下一个名为 AppTest 的 JUnit 测试用例。
    • maven-archetype-webapp

    这是一个简单的 Maven war 项目模板,当需要快速创建一个 Web 应用的时候就可以使用它。使用 maven-archetype-wabapp 生成的项目内容如下:

    • 一个 packaging 为 war 且带有 JUnit 依赖声明的 pom.xml。
    • src/main/webapp/ 目录。
    • src/main/webapp/index.jsp 文件,一个简单的 Hello World 页面。
    • src/main/webapp/WEB-INF/web.xml 文件,一个基本为空的 Web 应用配置文件。
  5. 自定义 Archetype

    也许你所有公司的一些项目都使用同样的框架和项目结构,为一个个项目重复同样的配置及同样的目录结构显然是难以让人接受的。更好的做法是创建一个属于自己的 Archetype,这个 Archetype 包含了一些通用的 POM 配置,目录结构,甚至是 Java 类及资源文件,然后在创建项目的时候,就可以直接使用该 Archetype,并提供一些基本参数,如 groupId、artifactId、version,maven-archetype-plugin 会处理其它原本需要手工处理的劳动。这样不仅节省了时间也降低了配置发生的概率。

    自定义 Archetype 参见该 blog。

Archetype Catalog

  1. 什么是 Archetype Catalog

    当我们以不指定 Archetype 坐标的方式使用 maven-archetype-plugin 的时候,会得到一个 Archetype 列表供选择,这个列表的信息来源于一个名为 archetype-catalog.xml 的文件。

    <?xml version="1.0" encoding="UTF-8"?><archetype-catalog  xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  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">  <archetypes>    <archetype>        <groupId>org.appfuse.archetypes</groupId>        <artifactId>appfuse-basic-jsf</artifactId>        <version>2.0</version>        <repository>http://static.appfuse.org/releases</repository>        <description>AppFuse archetype for creating a web application with Hibernate, Spring and JSF</description>    </archetype>    ...  </archetypes></archetype-catalog>

    这个 XML 非常简单,它主要包含了各个 Archetype 的坐标。这样,当用户选择使用某个 Archetype 的时候,Maven 就能立刻定位到 Archetype 构件。

  2. Archetype Catalog 的来源

    archetype-catalog.xml 能够提供 Archetype 的信息,那么 maven-archetype-plugin 可以从哪些位置读取 archetype-catalog.xml 文件呢?下面是一个列表:

    • internal: 这是 maven-archetype-plugin 内置的 Archetype Catalog,包含了约58个 Archetype 信息。
    • local: 指向用户本地的 Archetype Catalog,其位置为~/.m2/archetype-catalog.xml。需要注意的是,该文件默认是不存在的。
    • remote: 指向了 Maven 中央仓库的 Archetype Catalog,其确切的地址为 http://repo1.maven.org/maven2/archetype-Catalog.xml。
    • file://…:用户可以指定本机任何位置的 archetype-catalog.xml 文件。
    • http://…:用户可以指定使用 HTTP 协议指定远程的 archetype-catalog.xml 文件。

    当我们运行 mvn archetype:generate 命令的时候,可以使用 archetypeCatalog 参数指定插件使用 Catalog。例如:

    $ mvn archetype:generate -DarchetyepCatalog=file:// /tmp/archetype-catalog.xml

    上述命令指定 Archetype 插件使用系统 /tmp 目录下的 archetype-catalog.xml 文件。当然用户不需要每次运行 Archetype 目标的时候都去指定 Catalog。在 maven-archetype-plugin 2.0-beta-4 之前的版本中,archetypeCatalog 的默认值为 “internal,local”,即默认使用插件内置加上用户本机的 Catalog 信息,而从 maven-archetype-plugin 2.0-beta-5 开始,这一默认值变成了“remote,local”,即默认使用中央仓库加上用户本机的 Catalog 信息。用户也可以使用逗号分隔多个 Catalog 来源。例如:

    $ mvn archetype:generate -DarchetypeCatalog=file:// /tmp/archetype-catalog.xml,local

    该命令指定 Archetype 从两个位置读取 Catalog 信息。

  3. 生成本地仓库的 Archetype Catalog

    maven-archetype-plugin 提供了一个名为 crawl 的目标,用户可以用它来遍历本地 Maven 仓库的内容并生成 archetype-catalog.xml 文件。例如:

    $ mvn archetype:crawl

    如果不提供任何参数,crawl 目标会遍历用户 setting.xml 定义的 localRepository,并且在该仓库的根目录下生成 archetype-catalog.xml 文件。用户可以使用参数 repository 指定要遍历的 Maven 仓库,使用参数 catalog 指定要更新的 catalog 文件。例如:

    $ mvn archetype:crawl -Drepository=D:/java/repository -Dcatalog=D:/java/archetype-catalog.xml
  4. 使用 nexus-archetype-plugin

    Nexues 团队提供了一个名为 nexus-archetype-plugin 的插件,该插件能够基于 Nexus 仓库索引实时的生成 archetype-catalog.xml 文件。由于 Catalog 内容是基于仓库索引生成而不是逐个遍历仓库文件,因此生成的速度非常快。只要用户安装了该插件,每个 Nexus 仓库都会随时提供一个索引内容一致的 Catalog。

    用户可以从以下地址下载最新的 nexus-archetype-plugin:https://repository.sonatype.org/content/groups/forge/org/sonatype/nexus/plugins/nexus-archetype-plugin/。

    下一步是将 nexus-archetype-plugin 插件的 bundle.zip 包解压到 Nexus 工作目录 sonatype-work/nexus/ 下的 pulgin-repository/ 子目录中,然后重启 Nexus,插件就安装完成了。

    现在,当用户浏览 Nexus 仓库内容的时候,就能够在仓库的根目录下看到 archetype-catalog.xml 文件,右击选择“Download”后就能下载该文件。

原创粉丝点击