Maven Archetype 原型

从本节开始,我们来介绍一些关于 Maven 的其他技巧,属于锦上添花类型的技巧。这些技巧并不会出现在平时的使用过程中,但是,如果用到的时候,你绝对会有种相见恨晚的感觉。

我们第一个引出来的是 Maven 的 Archetype 原型。我们在最开始的章节中也有所提及,今天我们就来重点讲一下 Archetype 原型在什么情况下会使用到,以及如何使用。

在我们平时的工作中,可能会遇到这种情况:当我们需要创建新工程的时候,可能需要从之前的工程当中移植一些功能过来,或者新工程与之前的工程有着类似的目录结构,这个时候,我们如果直接使用 copy 的方式,就需要做很大的变动,并不是很方便。这个时候,Archetype 原型就能够排上用场了。

1. What is Maven Archetype?

我们从 Maven 的官网可以看到这样一句话:

In short, Archetype is a Maven project templating toolkit. An archetype is defined as an original pattern or model from which all other things of the same kind are made. The name fits as we are trying to provide a system that provides a consistent means of generating Maven projects. Archetype will help authors create Maven project templates for users, and provides users with the means to generate parameterized versions of those project templates.

翻译过来呢是这样子的:简而言之, Archetype 是 Maven 项目模板工具箱。 原型定义为原始的图案或模型,可制成所有其他同类的东西。 这个名称正好适合我们试图提供一个提供生成 Maven 项目的一致方法的系统。 原型将帮助项目创建者为不同用户创建 Maven 项目模板,并为用户提供生成这些项目模板的参数化版本的方法。

通过上述描述,我们可以把 Archetype 简单的理解为我们做蛋糕时候的模子,有了这个模子,我们只需要往里面有选择性的添加原料,就可以做出各种各样美味的蛋糕了

2. How to use Maven Archetype?

上面呢,我们简单介绍了一下 Archetype,也大概了解到它会是一个非常方便的东西,但是我们要怎么制作一个模子呢,制作好了之后,又要怎么使用呢?

2.1 如何制作 Archetype

首先,我们心中要有一个模子的雏形,就像我们现在想要做一个心形的蛋糕,那么我们就要知道心形是什么样子的,才能做出一个心形的模子。

在这里呢,我们就需要一个可以作为模板的工程。例如下图所示:

非常标准的一个小项目。

接下来呢,我们就使用这个项目作为例子,来演示如何使用 Archetype。

第一步,我们进入这个项目的根目录,并执行 如下命令:

mvn -s "D:\SOFT\apache-maven-3.6.3\conf\settings.xml" archetype:create-from-project -DpackageName=com.mic.demo
  • s: 指定 maven 的 setting 文件;
  • DpackageName: 指定项目默认包路径。

看到如下结果的时候,就说明我们的模板制定成功了。

紧接着,我们可以来到 demo 项目的 target/generated-sources 目录下,看到生成的 archetype 项目,如下图:

第二步,我们可以把 archetype 目录复制出来,单独作为一个项目来看。(单独复制出来不是必须的)

导入到 idea 里面后,我们可以看到 Archetype 的项目结构如下:

我们现在要做的就是将这个 Archetype 项目构建到我们的 Maven 本地仓库中。

在 Archetype 项目的的根目录下执行如下命令:

mvn install

执行成功后,我们可以在本地仓库中找到对应的 archetype-catalog.xml 文件:

以及生成的对应 Archetype 的 jar 包:

至此,我们的 Archetype 模板就制作完成了。

2.2 使用已经做好的 Archetype 模型

其实使用起来非常简单,两种方式:

  • 结合 idea 来使用

我们打开 idea 来创建一个 Maven 项目,并选择 add Archetype,将刚刚我们生成的模板坐标添加进去。

选择刚刚添加的模板,下一步,并填写相应的信息,就能生成新的项目了。

跟我们的模板工程一模一样
  • 我们也可以直接使用命令行来进行创建

进入存放代码的目录执行如下命令:

mvn archetype:generate  -DarchetypeGroupId=com.mic /
    					-DarchetypeArtifactId=demo-archetype  /   
    					-DarchetypeVersion=0.0.1-SNAPSHOT  /   
    					-DgroupId=com.mic  /   
    					-DartifactId=archetype-test     /
    					-Dversion=0.1     /
    					-Dpackage=com.mic.ace     /
    					-DinteractiveMode=false

其中 DarchetypeGroupId,DarchetypeArtifactId,DarchetypeVersion 用来指定 Archetype 的坐标信息,DgroupId,DartifactId,Dversion 用来指定新创建项目的坐标信息。

3. 注意事项

  • 在创建 Archetype 模板的时候,其实只需要执行:mvn archetype:create-from-project,但是有时候针对 Maven 不同的配置,有可能会去 .m2 目录下去找 settings.xml,可能会造成创建失败;
  • 另外不指定package的话,可能会造成包路径重复;
  • 我们可以制定一个项目基线用来创建项目模板,而不是通过已有项目来创建模板,这样能够最大程度上减少新创建项目中存在不需要的功能;
  • 我们可以直接在 archetype 目录下执行mvn install 用来将原型构建到本地仓库中去。

4. 小结

在本节中,我们主要讲了 Maven 的 Archetype 原型,如何创建自己的 Archetype 以及如何使用 Archetype。后面再有需要创建新项目的时候,可以拿来试一下,事半功倍。