Maven Archetype 插件介绍

更新于:2020-06-23     浏览:1207 次  

从前文的介绍中,我们已经知道,把一堆文件(夹)按照某种规则堆列起来,就是 "项目"


在上古时代,都是我们自己手动的去创建项目的目录结构,那 Maven 中有没有自带创建目录结构的功能呢?答案是当然有的,使用的是 archetype 插件,其用于创建符合 Maven 规定的目录骨架。archetype 插件可以创建类似于下面的 Maven 项目骨架:

src
  -main
    -java
  -test
    -java

Archetype 插件使用方式介绍

方式一:archetype:generate

mvn archetype:generate    ##(按照提示进行选择)
## 在执行过程中会提示你输入groupid、artifactid等,以此完成项目的骨架

方式二:在命令中直接写入所有的信息,一键生成。

mvn archetype:generate -DgroupId:com.mvnbook -DartifactId:demo -Dversion:1.0.0SNAPSHOT -Dpackage=com.mvnbook.mydemo

目前有数千种 archetype,我们只需要关心和自身项目相关的或者了解一些通用的就可以了。


## 下面会列出上千种原型供我们选择,虽然种类非常丰富,但是令我们眼花缭乱:
...
1498: remote -> org.apache.maven.archetypes:maven-archetype-quickstart (An archetype which contains a sample Maven project.)
...

## 幸好 Maven 默认为我们选择了 1498 ,我们只需回车即可。
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 1498:
Choose org.apache.maven.archetypes:maven-archetype-quickstart version:
1: 1.0-alpha-1
2: 1.0-alpha-2
3: 1.0-alpha-3
4: 1.0-alpha-4
5: 1.0
6: 1.1
7: 1.3
8: 1.4

## Maven 再次默认为我们选择了最新版本,我们只需回车即可。
Choose a number: 8:

项目构建完成,我们可以浏览一下文件目录:

-- pom.xml
`-- src
    |-- main
    |   `-- java
    |       `-- com
    |           `-- mvnbook
    |               `-- mydemo
    |                   `-- App.java
    `-- test
        `-- java
            `-- com
                `-- mvnbook
                    `-- mydemo
                        `-- AppTest.java

提醒:groupId 标识构件上传到仓库的位置,package 标识代码存放的包。

常用 Archetype 介绍

我们在命令行输入 mvn archetype:generate 后,Archetype 插件会输出一个 Archetype 列表供我们选择,我们根据自己的需要选择不同的 Archetype 模板,然后根据提示输入groupId、artifactId、version等必要的信息,就可以创建不同的 Maven 项目。虽然不是非常友好的UI界面,但是使用起来也是非常简单的。


由于 Archetype 列表比较多,我们在选择的时候难免就会出现选择恐惧症,所以,对于一些常用的 Archetype,大家需要有所熟悉。常用的 Archetype 主要有三个,如下所示:


(1)cocoon-22-archetype-webapp,主要用于构建 Spring 项目,这个项目结构里包含了applicationContext.xml、log4j.xml、web.xml等配置文件。


(2)maven-archetype-quickstart,主要用于构建普通的 Java 项目,除了pom.xml外,没有其他的xml了,但是有main、test两个包,包里放了一个App、AppTest类。


(3)maven-archetype-webapp,主要用于构建普通的 Java Web 项目,有WEB-INF目录,并且有web.xml和一个index.jsp。