使用Maven Archetype创建Java项目模板
1.over view
简而言之,Archetype是一个Maven项目模板工具包。原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的。当我们试图提供一个提供生成Maven项目的一致方法的系统时,这个名字就合适了。Archetype将帮助作者为用户创建Maven项目模板,并为用户提供生成这些项目模板的参数化版本的方法。
使用原型提供了一种很好的方法,可以与您的项目或组织所采用的最佳实践一致的方式快速地使开发人员受益。您可能希望在组织内部实现J2EE开发的标准化,因此您可能希望提供EJB,WAR或Web服务的原型。一旦创建了这些原型并将其部署在组织的存储库中,组织中的所有开发人员就可以使用它们。
2.do it
⚠️:我们将使用springboot项目来演示如何生成一个maven archetype(原型),本文中(模板)(原型)交替使用,二者意思相同。
示例,我们有一个现成的项目,其结构如下:
.
├── Dockerfile
├── README.md
├── last-demo.iml
├── mvnw
├── mvnw.cmd
├── pom.xml
├── src
├── main
│ ├── java
│ │ └── com
│ │ └── demo
│ │ └── data
│ │ ├── Application.java
│ │ └── your_business_package
│ │ ├── client
│ │ │ └── DemoClient.java
│ │ ├── constants
│ │ │ └── YourBusinessConstants.java
│ │ ├── enumerate
│ │ │ └── DemoStatus.java
│ │ ├── presistence
│ │ │ ├── DemoRepository.java
│ │ │ └── entity
│ │ │ └── DemoDO.java
│ │ ├── service
│ │ │ └── DemoService.java
│ │ └── web
│ │ ├── dto
│ │ │ └── DemoDTO.java
│ │ └── rest
│ │ └── DemoController.java
│ └── resources
│ ├── application.yml
│ └── logback-spring.xml
└── test
├── java
│ └── com
│ └── demo
│ └── data
│ └── ApplicationTests.java
└── resources
└── application.yml
我们将使用maven archetype来创建以该项目为基础的模板。
2.1 生成模板文件夹
执行以下maven命令:
mvn archetype:create-from-project
此时项目中会生成target/generated-sources/archetype文件夹,其中存放的就是我们的模板相关文件。
2.2 自定义模板
探索target/generated-sources/archetype我们可以得知:
generated-sources
└── archetype
├── pom.xml
├── src
│ ├── main
│ │ └── resources
│ │ ├── META-INF
│ │ │ └── maven
│ │ │ └── archetype-metadata.xml ##⚠️原型描述符,描述了我们原型的结构
│ │ └── archetype-resources ##⚠️经过maven转换后的项目文件包
│ └── test
│ └── resources
│ └── projects
│ └── basic
└── target
├── classes
│ └── archetype-resources
├── your_project_name.jar
└── test-classes
└── projects
└── basic
我们随机打开一个archetype-resources中的源文件,可以看到如下:

上图中我们看到的${package}占位符,这个就是maven原型插件自动处理的结果,到时候我们根据原型生成项目的时候,这些占位符就会变成我们新生成项目的相关的值。类似,maven还提供了groupId,artifactId, version等关键字。如果我们项目中有其他地方也需要这种定制化,我们可以手动进行更改。
例如我们把项目配置文件改为如下(应用名用占位符代替),目的是实现项目的名称随新建的项目变动。

接下来来分析archetype-metadata.xml,他是原型描述符号,我们可以指定那些文件进入原型里,那些文件需要排除,还能指定上面说的占位符需不需要被替换 等等。
如下为archetype-metadata.xml示例:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
<!--下面还有更多项-->
⚠️:fileSet属性标签指定的那些文件需要纳入原型中,我们把不需要的删掉。
⚠️:filtered属性标签表示是否替换文件中的占位符,若为true则会替换,否则不会,所以我们如果想要占位符最后会被替换为项目相关的信息,还需要通过这个标签指定。
⚠️:packaged属性标签指定文件是否在项目的包里面,true或false。
2.3 生成模板(原型)
我们进入target/generated-sources/archetype目录,执行以下命令:
mvn install
此时模板将在我们本地生成。
2.4 使用模板(原型)生成新项目
我们使用以下命令:
mvn archetype:generate \
-DarchetypeCatalog=local \
-DgroupId=新建项目的groupId \
-DartifactId=新建项目的artifactId \
-DarchetypeGroupId=你的原型group \
-DarchetypeArtifactId=你的原型项目名字-archetype \
-DarchetypeVersion=你的原型版本 \
-DinteractiveMode=false
之后,我们会生成新项目。项目的结构符合我们的原型结构。查看我们手动指定的application.yml

可以看到我们的占位符被我们项目的相关信息给替换了。
2.5 将模板上传至maven仓库
我们进入target/generated-sources/archetype目录,打开pom.xml
添加仓库信息:
<distributionManagement>
<repository>
<id>my-releases</id>
<url>你的仓库地址</url>
</repository>
<snapshotRepository>
<id>my-snapshots</id>
<url>你的仓库地址</url>
</snapshotRepository>
</distributionManagement>
<servers>
<server>
<id>my-snapshots</id>
<username>对应仓库的username</username>
<password>对应仓库的password</password>
</server>
<server>
<id>my-releases</id>
<username>对应仓库的username</username>
<password>对应仓库的password</password>
</server>
</servers>
随后指定如下命令:
mvn deploy
随后,原型将被上传至你的mavne仓库。
3.summary
本文我们介绍的maven的原型及其特性带来的好处,并且我们演示了如何生成一个原型,并且利用原型来创建一个新项目。
关注笔者公众号,推送各类原创/优质技术文章 ⬇️

使用Maven Archetype创建Java项目模板的更多相关文章
- Jersey入门一:从Maven Archetype创建jersey项目
1.用Ctrl+空格调出Spotlight搜索,输入ter调出终端窗口  2.在终端窗口进入将创建jersey项目的目录:  3.输入如下命令,创建一个名为的simple-service项目: m ...
- Maven命令创建java项目
------------------------------java项目搭建--------------------------- 使用Maven构建一个简单的Java项目 1.进入命令行,执行下面的 ...
- IntelliJ IDEA14 和 Maven 系列:使用IntelliJ IDEA 14和Maven 7 创建java web项目(一)
Intellij IDEA作为最好的Java IDE,创建Maven项目还是比较简单的,但是创建一个Maven Web项目还是要修改一些配置的,下面进行总结整理. 1前言 在创建项目中,IDEA提供了 ...
- 使用Maven创建Java项目
在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...
- Maven学习(十)-----使用Maven创建Java项目
所需要的工具: Maven 3.3.3 Eclipse 4.2 JDK 8 注意:请确保 Maven 是正确安装和配置(在Windows,*nix,Mac OSX系统中),然后再开始本教程,避免 mv ...
- maven 学习---使用Maven创建Java项目
在本教程中,我们将向你展示如何使用 Maven 来创建一个 Java 项目,导入其到Eclipse IDE,并打包 Java 项目到一个 JAR 文件. 所需要的工具: Maven 3.3.3 Ecl ...
- maven archetype生成自定义项目原型(模板)
maven archetype可以将一个项目做成项目原型,之后只需要以此原型来创建项目,那么初始创建的项目便具有原型项目中的一切配置和代码.通俗讲就是一个项目模板. eclipse中那些快速生成mav ...
- 将 Maven生成的java项目转化为支持 Eclipse IDE的项目
转自: http://www.xuebuyuan.com/1297046.html 将 Maven生成的java项目转化为支持 Eclipse IDE的项目 在前一篇文章中,我们使用maven创建 ...
- 使用Maven来创建WEB项目
IDE: Eclipse Tool:Maven 1. 下载JDK,配置java环境变量 2.下载Maven,配置Maven环境变量 3. 利用Maven来创建WEB项目 (1)按照下面的截图流程创建m ...
随机推荐
- XiaoQi.Study项目(一)
项目地址:https://github.com/xiaoqiyaozou1/XiaoQi.Study 感谢:“老张的哲学”.“晓晨”.“杨旭”等大佬的知识分享 一.项目创建 vs 2019 创建 as ...
- CentOS7采用tar.gz包方式安装Mysql5.7
软件:VMware Linux版本:CentOS 7 一.安装mysql(采用tar.gz包安装Mysql5.7) 1.安装开发工具包 [root@localhost ~]# yum groups m ...
- 建议14:灵活使用Arguments
Javascript支持Arguments机制.Arguments是一个为数组,可以通过数组下标形式获取该集合中传递给函数的参数值.例如:下面函数中,没有指定形参,但在函数体内通过Arguments对 ...
- Layui select下拉框改变之 change 监听事件(转)
在layui中使用 jquery 触发select 的 change事件无效 使用layui.use监听select事件 <select lay-filter="demo" ...
- 我用STM32MP1做了个疫情监控平台3—疫情监控平台实现
目录 1.前言 2.数据接口的获取 3.Qt界面的实现 4.在开发板上运行Qt程序 5.使用无线模块联网 6.代码下载 @ 1.前言 之前我使用桌面版本Qt实现了肺炎疫情监控平台:基于Qt的新冠肺炎疫 ...
- 项目部署Django+celery+redis
celery介绍 1.celery应用举例 1.Celery 是一个 基于python开发的分布式异步消息任务队列,通过它可以轻松的实现任务的异步处理, 如果你的业务场景中需要用到异步任务,就可以 ...
- Django 后台管理xadmin
一. xadmin的使用 后台管理在开发中可以给我们提供很大的便利,django自带了一个后台管理admin,不过还有一个xadmin比django自带的好用一些,功能更加强大,为模型提供了版本控制, ...
- Selenium系列(五) - 键盘操作详细解读
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式
(一)MySQL多实例概述 实例是进程与内存的一个概述,所谓MySQL多实例,就是在服务器上启动多个相同的MySQL进程,运行在不同的端口(如3306,3307,3308),通过不同的端口对外提供服务 ...
- 数据源管理 | 主从库动态路由,AOP模式读写分离
本文源码:GitHub·点这里 || GitEE·点这里 一.多数据源应用 1.基础描述 在相对复杂的应用服务中,配置多个数据源是常见现象,例如常见的:配置主从数据库用来写数据,再配置一个从库读数据, ...