自定义idea archetype
编写 archetype 元数据
通过plugin从现有项目中导出
1、引入plugin
<plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-archetype-plugin</artifactId><version>3.2.0</version></plugin>
2、通过maven命令生成archetype元数据
- 在cmd中执行
mvn archetype:create-from-project
- 在idea中执行
生成的archetype元数据在 目录:target\generated-sources\archetype 下。
├─src
│ ├─main
│ │ └─resources
│ │ ├─archetype-resources
│ │ │ ├─.idea
│ │ │ │ ├─inspectionProfiles
│ │ │ │ └─sonarlint
│ │ │ │ └─issuestore
│ │ │ ├─frame-api
│ │ │ │ └─src
│ │ │ │ └─main
│ │ │ │ └─java
│ │ │ │ └─cloud
│ │ │ │ └─frame
│ │ │ │ ├─dto
│ │ │ │ ├─feign
│ │ │ │ └─vo
│ │ │ └─frame-biz
│ │ │ └─src
│ │ │ └─main
│ │ │ ├─java
│ │ │ │ ├─cloud
│ │ │ │ │ └─frame
│ │ │ │ │ ├─config
│ │ │ │ │ ├─constant
│ │ │ │ │ ├─controller
│ │ │ │ │ ├─exception
│ │ │ │ │ ├─mapper
│ │ │ │ │ ├─model
│ │ │ │ │ ├─service
│ │ │ │ │ │ └─impl
│ │ │ │ │ ├─util
│ │ │ │ │ └─vo
│ │ │ │ ├─mapper
│ │ │ │ ├─model
│ │ │ │ └─service
│ │ │ │ └─impl
│ │ │ └─resources
│ │ └─META-INF
│ │ └─maven
│ └─test
│ └─resources
│ └─projects
│ └─basic
注意,通过现有项目生成会出现以下问题:
- 如果源代码中仅有package,而没有类文件,则此package对应的目录会丢失。
- 有些文件例如:.gitignore会丢失
- 生成的模块名称是固定的
因此要对现有archetype进行调整
手工编写
手工编写也是生成上面的archetype,但是可以进行调整,主要包括:
增加一些变量,更精确的进行控制
增加一些文件
生成 archetype
在目录target\generated-sources\archetype 下执行 以下命令
#本地安装
mvn install
#远程发布
mvn deploy
在根目录下执行
#把本地仓库中所有的可用archetype 展示出来
mvn archetype:crawl
使用archetype
在Idea中使用
1、添加archetype
groupId=com.jurassic
artifactId=jurassic-frame-archetype
version=2.0.0
2、通过archetype创建项目
删除自定义archetype
在 下面文件中有对应记录,删除重启IDEA即可
# C:\Users\{用户}\.IntelliJIdea2018.2\system\Maven\Indices\<archetypes><archetype groupId="com.jurassic" artifactId="jurassic-frame-archetype" version="1.0.0" />
</archetypes>
命令行
mvn archetype:generate -DarchetypeGroupId=com.jurassic -DarchetypeArtifactId=jurassic-frame-archetype -DarchetypeVersion=2.0.0 -DprojectName=test
可以给每个属性在命令行中设置参数,如果没有设置,则会提示输入参数值,有默认值的直接回车即可
交互
[INFO] Generating project in Interactive mode
[WARNING] No archetype found in remote catalog. Defaulting to internal catalog
[INFO] Archetype repository not defined. Using the one from [com.jurassic:jurassic-frame-archetype:2.0.0] found in catalog local
[INFO] Using property: groupId = com.jurassic
[INFO] Using property: projectName = Test
Define value for property 'artifactId' cloud-Test: :
Define value for property 'version' 1.0-SNAPSHOT: : 2.0.0
Define value for property 'package' com.jurassic.cloud.Test: :
Confirm properties configuration:
groupId: com.jurassic
projectName: Test
artifactId: cloud-Test
version: 2.0.0
package: com.jurassic.cloud.TestY: : Y
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating project from Archetype: jurassic-frame-archetype:2.0.0
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: com.jurassic
[INFO] Parameter: artifactId, Value: cloud-Test
[INFO] Parameter: version, Value: 2.0.0
[INFO] Parameter: package, Value: com.jurassic.cloud.Test
[INFO] Parameter: packageInPathFormat, Value: com/jurassic/cloud/Test
[INFO] Parameter: package, Value: com.jurassic.cloud.Test
[INFO] Parameter: version, Value: 2.0.0
[INFO] Parameter: projectName, Value: Test
[INFO] Parameter: groupId, Value: com.jurassic
[INFO] Parameter: artifactId, Value: cloud-Test
[INFO] Parent element not overwritten in E:\codes\cloud-test\cloud-Test\cloud-Test-api\pom.xml
[INFO] Parent element not overwritten in E:\codes\cloud-test\cloud-Test\cloud-Test-biz\pom.xml
[INFO] Project created from Archetype in dir: E:\codes\cloud-test\cloud-Test
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 44.414 s
[INFO] Finished at: 2021-01-07T15:22:33+08:00
[INFO] ------------------------------------------------------------------------
[WARNING] The requested profile "env-dev" could not be activated because it does not exist.
如果不想用交互模式,则设置参数: -DinteractiveMode=false
mvn archetype:generate -DinteractiveMode=false -DarchetypeGroupId=com.jurassic -DarchetypeArtifactId=jurassic-frame-archetype -DarchetypeVersion=2.0.0 -DprojectName=Test
archetype详细介绍
文件详解
- 根目录下的pom.xml和一般的maven项目一样主要定义archetype项目的坐标等信息。
- 所有的项目骨架内容都集中在src/main/resources/archetype-resources文件夹下。
- archetype-resources中的pom.xml定义了待生成项目的pom文件的内容,/src/main/java、/src/test/java中分别定义了待生成项目中相应目录下的内容
- /src/main/resources/META-INF/maven/archetype-metadata.xml中定义相关的元数据描述(其中该文件的位置固定为resources/META-INF/maven文件夹下,且名称固定为archetype-metadata.xml)。
- target\generated-sources\archetype\src\test\resources 目录下为插件测试用的配置,如果有自定义参数,需要修改projects\basic\archetype.properties 文件信息
根目录下pom.xml
<groupId>com.jurassic</groupId><artifactId>jurassic-frame-archetype</artifactId><version>2.0.0</version><packaging>maven-archetype</packaging><name>jurassic-frame-archetype</name>
/**/archetype-resources/pom.xml
<parent><groupId>com.jurassic</groupId><artifactId>jurassic-cloud</artifactId><version>2.0.0-RELEASE</version></parent><groupId>${groupId}</groupId><artifactId>${artifactId}</artifactId><version>${version}</version><packaging>pom</packaging>
POM中 ${}标识的变量都是通过maven中的命令行传进来的 ,idea操作会通过输入框输入。
mvn archetype:generate -DgroupId=com.jurassic
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 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd" name="jurassic-frame"xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><fileSets><fileSet filtered="true" encoding="UTF-8"><directory>.idea/inspectionProfiles</directory><includes><include>**/*.xml</include></includes></fileSet><fileSet filtered="true" encoding="UTF-8"><directory>.idea</directory><includes><include>**/*.xml</include></includes></fileSet>... ... <fileSet encoding="UTF-8"><directory/><includes><include>.gitignore</include><include>jurassic-frame.iml</include><include>readme.md</include></includes></fileSet></fileSets><requiredProperties><requiredProperty key="groupId"><defaultValue>com.jurassic</defaultValue></requiredProperty><requiredProperty key="artifactId"><defaultValue>cloud</defaultValue></requiredProperty><requiredProperty key="package"><defaultValue>com.jurassic.cloud</defaultValue></requiredProperty></requiredProperties><modules><module id="${rootArtifactId}-api" dir="__rootArtifactId__-api" name="${rootArtifactId}-api">... ... </module><module id="${rootArtifactId}-biz" dir="__rootArtifactId__-biz" name="${rootArtifactId}-biz">... ... </module></modules>
</archetype-descriptor>
说明:
- packaged="true"标识src/main/resources/archetype-resources/src/main/java中对应的内容是否要放入到package中,比如package为com.jurassic,那么如果该属性为true,则对应的java文件会放到com/jurassic文件夹下,也就是包路径下。
- filtered="true"标识下面提到的**${}是否要进行替换**
module有三个属性,解释如下:
id :定义子模块工程的artifactId.
dir :子模块工程源文件在archetype-resources里对应的directory.
name :子模块的名字.
类文件
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.constant;public class T1Constant {}
${package}是包名变量。
变量/属性
- “ __rootArtifactId__ ”占位符会被parent项目的***artifactId***替换,主要用于路径中
- ${rootArtifactId}也会被parent项目的artifactId替换,主要用于文件中
- src/main/resources/archetype-resources里必须要有一个顶级pom文件(如果是单工程就是工程pom文件),同时子文件夹代表了模块定义
<requiredProperties><requiredProperty key="groupId"><defaultValue>com.jurassic</defaultValue></requiredProperty><requiredProperty key="artifactId"><defaultValue>cloud</defaultValue></requiredProperty><requiredProperty key="package"><defaultValue>com.jurassic.cloud</defaultValue></requiredProperty></requiredProperties>
这些属性可以在资源元文件里的任意一个文件里通过${var}来引用,所以的元文件最终都可以选择通过velocity引擎来执行替换后生成。
默认的属性有:groupId,artifactId,packeage,version等
文件名或者路径中包含 _property_ 则会被属性值替换
注意:如果打包(install deploy等)时,报错说:没有在archetype.properties定义你定义的自定义属性。Missing required properties in archetype.properties: ,是因为集成测试模块造成,请在src/test/resources/projects/basic/archetype.properties中添加对应的属性即可解决。
参考
http://maven.apache.org/archetype/maven-archetype-plugin/specification/archetype-metadata.html
http://maven.apache.org/archetype/archetype-models/archetype-descriptor/archetype-descriptor.html
https://blog.csdn.net/zp820705/article/details/103852642
.gitignore文件丢失
通过变量解决:
1.首先修改下你的.gitignore文件名为(注意是两个_)
__gitignore__
2.在你的archetype-metadata.xml
中添加
<requiredProperties><requiredProperty key="gitignore"><defaultValue>.gitignore</defaultValue></requiredProperty>
</requiredProperties>
<fileSets><fileSet encoding="UTF-8"><directory></directory><includes><include>.editorconfig</include><include>__gitignore__</include></includes></fileSet>
</fileSets>
3.在对应的test包中archetype.properties
中添加变量默认值
gitignore=.gitignore
参考:https://blog.csdn.net/dj7858177/article/details/111948017
自定义idea archetype相关推荐
- 如何创建自定义maven archetype?
如何创建自定义maven archetype? 文章目录 如何创建自定义maven archetype? 1. 什么是archetype 2. 创建项目模板 3. 创建archetype目录结构 4. ...
- 自定义maven archetype,上传到nexus,并使用nexus远程的archetype创建项目
一.需要自定义骨架的需求 有的时候,我们项目中会有很多公共的依赖.公共的代码.公共的配置文件 但是我们又不希望创建一个新项目之后重新从老项目拷贝.所以我们能使用老的项目作为新建项目的maven arc ...
- 自定义Maven Archetype模板工程
文章目录 Maven Archetype介绍 什么是Maven Archetype 为什么要有模板工程 创建模板工程的三种方式 常用的archetype maven-archetype-quickst ...
- (转)Maven之自定义archetype生成项目骨架
背景:最近在开发一个项目的基础构件,在以后项目的开发过程中可以直接使用该构件快速的生成项目骨架进行开发. 摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其 ...
- Maven之自定义archetype生成项目骨架(一)
摘要:使用过Maven的人都知道maven中有许多功能都是通过插件来提供的,今天我们来说一下其中的一个插件:maven-archetype-plugin ,通过该插件可以自定义符合我们自己需求的arc ...
- 如何自定义 maven中的archetype
1.首先使用eclipse创建一个新的maven project,然后把配置好的一些公用的东西放到相应的目录下面比如说会将一些常用的java代码存放到src/main/java目录下面:会将一些通用的 ...
- maven archetype 自定义
archetype是什么 如何创建archetype(简易版,标准版请看后面#更多问题) 第一步 第二步 第三步 如何使用archetype 更多问题 未解决的问题 参考来源 archetype是什么 ...
- maven自定义archetype
在开发过程中我们经常会创建一系列结构类似的新项目,这些项目结构和基础配置基本或完全一致,maven就提供了archetype类型来规定新建项目的结构及基础配置,利用archetype就可以快速简单的搭 ...
- Maven自定义Archetype项目模板
前言:在某课网上学习到可以使用命令mvn archetype:create-from-project来创建自己的项目模板(文中提及的项目模板即 原型 archetype),对此我十分感兴趣.但是,遗憾 ...
最新文章
- 前端就业之vue介绍
- 使用 Label 类在 XNA 中显示文本,WPXNA(七)
- ES6-2 块级作用域与嵌套、let、暂行性死区
- 英语总结系列(二):爽约Pauel叔十五天
- 交叉编译和使用HTOP
- webstorm添加*.vue文件代码提醒支持webstorm支持es6vue里支持es6写法
- You specified a pre-MSA CPU in your CFLAGS
- 三位数除以两位数竖式计算没有余数_北京版二年级数学下册第一单元有余数的除法练习题【都有电子版】...
- 彻底理解View事件体系!
- java楼宇报警器,楼宇智能防盗报警系统毕业设计论文.doc
- 计算机控制人脑的电影,推荐20部全球经典烧脑电影,考验你智商的时刻到了(上)...
- revit 二次开发之创建图纸和放置视图
- 【Java Web基础】(五)实现新增下拉列表—由用户输入内容(Html+JS)
- Python爬虫《自动化学报》数据爬取与数据分析
- Android:单元测试
- LinkedList入门教程
- 人声抑制 深度学习_一种融合骨振动传感器和麦克风信号的深度学习语音提取和降噪方法与流程...
- PMP项目管理学习心得
- vue-cli3以后,关于webpack打包等的相关配置
- 华为--嵌入式软件工程师面试题汇总