使用Maven archetype 自定义项目脚手架
An archetype is defined as an original pattern or model from which all other things of the same kind are made.
目录
背景
创建archetype模板
手动创建
通过已有的项目结构生成archetype
通过archetype创建新项目
1.通过maven命令的方式
2.通过IDE方式生成(使用本地install的archetype)
背景
开发中,我们通常会使用maven内置的脚手架也就是archetype来快速生成项目结构。但是在开发中,你会发现maven预先提供的archetyp远远不够,每次新建一个项目,我们都需要从现有的项目copy pom.xml,spring的配置文件,一些公共的工具类等,对于多module项目,我们还需要去创建各个module。在这样的背景下,我们就需要使用maven的archetype去定义一个自己想要的代码脚手架以供更快的生成新的项目骨架,可以进行后续开发。
创建archetype模板
手动创建
1.首先创建一个空的maven项目
2.创建archetype-metadata.xml,位于src/main/resources/META-INF/maven/目录下
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd" name="ibu-itinerary-archetype"xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><!--属性变量定义--><requiredProperties><requiredProperty key="package"><defaultValue>com.chenpp.archetype</defaultValue></requiredProperty></requiredProperties><!--项目子模块定义--><modules><module id="${rootArtifactId}-domain" dir="__rootArtifactId__-domain" name="${rootArtifactId}-domain"><fileSets><fileSet filtered="true" packaged="true" encoding="UTF-8"><directory>src/main/java</directory><includes><include>**/*.java</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-dao" dir="__rootArtifactId__-dao" name="${rootArtifactId}-dao"><fileSets><fileSet filtered="true" packaged="true" encoding="UTF-8"><directory>src/main/java</directory><includes><include>**/*.java</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-service" dir="__rootArtifactId__-service" name="${rootArtifactId}-service"><fileSets><fileSet filtered="true" packaged="true" encoding="UTF-8"><directory>src/main/java</directory><includes><include>**/*.java</include></includes></fileSet></fileSets></module><module id="${rootArtifactId}-controller" dir="__rootArtifactId__-controller" name="${rootArtifactId}-controller"><fileSets><fileSet filtered="true" packaged="true" encoding="UTF-8"><directory>src/main/java</directory><includes><include>**/*.java</include></includes></fileSet></fileSets></module></modules>
</archetype-descriptor>
- requiredProperty:定义通过archetype生成项目时需要提供的参数,这些属性可以在资源元文件里的任意一个文件里通过${var}来引用,所以的元文件最终都可以选择通过velocity引擎来执行替换后生成。
默认的属性有:groupId,artifactId,packeage,version等
- module 定义子模块
1) id :定义子模块工程的artifactId
2) dir :定义子模块源文件在archetype-resources里对应的directory
3) name :定义子模块的名字 - fileSet:定义 通过Archetype插件生成的项目里的文件和脚手架jar里的文件的关联关系
1) packaged="true"标识directory中对应的内容是否要放入到package中,比如package为com.chenpp,那么如果该属性为true,则对应的java文件会放到com/chenpp文件夹下,也就是包路径下。
2) filtered="true"标识下面提到的${}是否要进行替换
3.创建对应的子模块下的pom.xml和java文件
以domain子模块为例
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>${rootArtifactId}</artifactId><groupId>${groupId}</groupId><version>${version}</version></parent><modelVersion>4.0.0</modelVersion><artifactId>${artifactId}</artifactId><dependencies><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>2.6</version></dependency></dependencies></project>
package ${package}.entity;public class User{private String userName;private String sex;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}
}
整个项目的结构如下:
archetype项目写好之后,通过mvn clean install命令安装到本地的maven仓库中
通过已有的项目结构生成archetype
在项目的根目录下(即项目的pom.xml文件所在目录)下执行maven命令:
mvn archetype:create-from-project
这样就可以通过当前项目结构创建一个archetype骨架,生成的archetype的信息,默认是在project根目录下的 target\generated-sources\archetype 目录
然后在archetype的根目录下(即: 项目根目录\target\generated-sources\archetype
)执行mvn clean install命令就可以将archetype安装在本地仓库里了。
通过archetype创建新项目
1.通过maven命令的方式
前面的四个参数是生成的新项目的maven groupId以及package,后面三个参数指定使用的脚手架archetype
mvn archetype:generate -DgroupId=com.chenpp -DartifactId=supermarker-project -Dpackage=com.chenpp.market -Dversion=1.0 -DarchetypeGroupId=com.chenpp -DarchetypeArtifactId=archetype-project -DarchetypeVersion=1.0 -X -DarchetypeCatalog=local
archetypeCatalog用来指定maven-archetype-plugin读取archetype-catalog.xml文件的位置:
internal——maven-archetype-plugin内置的
local——本地的,位置为~/.m2/archetype-catalog.xml
remote——指向Maven中央仓库的Catalog
生成新的项目如下:
2.通过IDE方式生成(使用本地install的archetype)
使用本地的archetype jar来生成新项目
使用Maven archetype 自定义项目脚手架相关推荐
- maven archetype 自定义
archetype是什么 如何创建archetype(简易版,标准版请看后面#更多问题) 第一步 第二步 第三步 如何使用archetype 更多问题 未解决的问题 参考来源 archetype是什么 ...
- 架构师必备技能:Maven Archetype生成项目模板
基本每个公司的项目都有一套模板,只要开新项目直接复制一份改改包名和一些配置就初始化了一个新项目.这种方式有点繁琐,有没有通过命令甚至是可视化的方式从一个模板项目初始化项目.Maven其实有提供这种能力 ...
- (转)Maven之自定义archetype生成项目骨架
背景:最近在开发一个项目的基础构件,在以后项目的开发过程中可以直接使用该构件快速的生成项目骨架进行开发. 摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其 ...
- Maven之自定义archetype生成项目骨架(一)
摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其中的一个插件:maven-archetype-plugin ,通过该插件可以自定义符合我们自己需求的arc ...
- 自定义maven archetype,上传到nexus,并使用nexus远程的archetype创建项目
一.需要自定义骨架的需求 有的时候,我们项目中会有很多公共的依赖.公共的代码.公共的配置文件 但是我们又不希望创建一个新项目之后重新从老项目拷贝.所以我们能使用老的项目作为新建项目的maven arc ...
- maven java archetype_使用Maven Archetype创建Java项目模板
1.over view 简而言之,Archetype是一个Maven项目模板工具包.原型被定义为一种原始的模式或模型,所有其他同类的东西都是从中产生的.当我们试图提供一个提供生成Maven项目的一致方 ...
- java maven restful_使用 maven 生成一个支持端到端自动测试的 RESTful 服务项目脚手架...
额外的话: 我会非常感激如果您在读本文的时候 Follow 文中的操作步骤在你的环境中实践本文所讲内容, 我保证这个过程不会非常复杂, 即便加上你研究代码的时间也不需要超过 15 分钟 和传统后端页面 ...
- 【Maven】高级应用:私服(nexus)搭建及使用、自定义项目骨架(archtype)
当我们执行 Maven 构建命令时,Maven 开始按照以下顺序查找依赖的库: Maven版本: version(SNAPSHOT):快照版本.随时更新不稳定的,每个版本都只是特定时间点的快照.同时, ...
- 如何创建自定义maven archetype?
如何创建自定义maven archetype? 文章目录 如何创建自定义maven archetype? 1. 什么是archetype 2. 创建项目模板 3. 创建archetype目录结构 4. ...
最新文章
- 规模化敏捷中的“三要”和“三不要”
- 机器人控制与感知有感
- pdo mysql like_PHP PDO准备的语句-MySQL LIKE查询
- 使用JDBCTemplate实现与Spring结合,方法公用 ——Spring配置(applicationContext.xml)
- C++(STL):34--- multiset容器详解
- linux module 目录,/sys/module/ 模块信息目录与/proc/modules文件
- Server的Transfer和Response的Redirect
- Linux虚拟化技术KVM入门必看
- python workflow_用 Python 写 Alfred3 workflow 插件,一个最小示例
- 小米CC9BL解锁、root方法测试
- 手机日历便签怎么设置日历开始于周几?
- 网络战武器——震网(Stuxnet)病毒
- 微信转账被拉黑 遇到渣人该怎么追回损失?
- 静态码率(CBR)和动态码率(VBR)
- sentinel实现限流、降级、熔断配置和测试使用
- uniapp引入腾讯防水墙
- 第 2-3 课:迭代法计算定积分
- Jquery 对 身份证号码的验证 (15/18位)
- python九宫格拼图_Python制作九宫格图片
- 与“你”相关,中国移动数据语音与天猫精灵携手打造打造优质智能生活
热门文章
- Spring注解编程基石(一)
- 解决GitHub中头像显示异常、设置不了头像、README图片无法显示等问题
- 【SpringBoot零基础案例05】【IEDA 2021.1】若SpringBoot项目两种配置文件同时存在,哪种文件配置起作用?
- Workbooks 对象的 Open 方法参数说明
- 【Laravel-海贼王系列】第十三章,路由控制器解析
- 编程开发之--Oracle数据库--存储过程在out参数中使用光标(3)
- 第三章 安装apache
- typedef和函数指针定义
- RoboGuice入门
- 2021CCPC(桂林) - Suffix Automaton(后缀树+线段树)