前言
又要开发新我的项目了,还是创立新我的项目,怎么办?老大说依照 xxx 我的项目的构造创立一个新我的项目就能够了。
公众号:liuzhihangs,记录工作学习中的技术、开发及源码笔记;时不时分享一些生存中的见闻感悟。欢送大佬来领导!
在工作中常常有新我的项目须要创立,此时就会有三种罕用的形式
CC 大法 新建我的项目,而后找到之前的各种工具类,复制粘贴进来,此时还不肯定能跑起来,而后再进行各种调试。
CD 大法 复制老我的项目,而后改 module 名字,依赖名字,删除老代码,当然也不肯定能跑起来,此时再进行各种调试。
当然,这里必定不是应用这两种方法,上面咱们介绍一种更简洁的形式,应用 maven archetype 生成我的项目模版,一键创立我的项目。
Action!!!
什么是 Archetype?
简而言之,Archetype 是 Maven 我的项目模板工具箱。
An archetype is defined as an original pattern or model from which all other things of the same kind are made.
原型被定义为原始款式或模型,从中能够制成所有其余同类我的项目。
官网解释,简洁明了,就是应用已有的我的项目,生成一个模版。当前应用这个模版就能够疾速生成构造雷同的我的项目了。在团队开发中很有用。
其实就是官网解释,地址贴上来:http://maven.apache.org/arche…
上面应用 IDEA 作为演示工具,一步一步开始介绍。
筹备模版我的项目
这里还是要有一个模版我的项目,比方这样:
这是一个多 module 我的项目,一个简略的 demo
- 应用了 nacos 作为注册核心;
- fegin 作为调用工具;
- 有通用校验 token 工具类;
- 假如外面也有一些公司的公共配置(MQ,链路监控,对立日志等)。
当然这个我的项目是能够跑起来的。新创建的我的项目也是这个模版。
进入主题
应用命令
archetype:generate
这样是基于以后我的项目生成,你也能够应用官网的用法别离指定参数
- mvn archetype:generate 而后一步一步依照提醒输出;
- 一次性输出,其中
DarchetypeGroupId
、DarchetypeArtifactId
、DarchetypeVersion
为生成的 Archetype 我的项目的组织版本。
mvn archetype:generate \
-DarchetypeGroupId=<archetype-groupId> \
-DarchetypeArtifactId=<archetype-artifactId> \
-DarchetypeVersion=<archetype-version> \
-DgroupId=<my.groupid> \
-DartifactId=<my-artifactId>
高级用法 mvn clean archetype:create-from-project
执行图示如下:
执行后返回 IDEA 查看我的项目,在 target/generated-sources
目录下的 archetype
即生成的我的项目模版。
构造如图所示:
-
main/resources/archetype-resources:我的项目的模版,生成新我的项目,就是依据这块的代码进行生成的。
- .idea 无用,删除掉。
- __rootArtifactId__xxx 我的项目的各个 module
- main/resources/META-INF/maven/archetype-metadata.xml:模版工程的元数据配置。
能够把 archetype 拷进来,这是一个独自的工程模版,拷进来之后,应用 IDEA 关上。
上面开始介绍 archetype 外面都有什么。
archetype 模版我的项目介绍
应用 IDEA 关上之后发现,还是一个 Maven 我的项目。
archetype-resources
关上 pom 文件,能够看到外面 ${groupId}
、${artifactId}
、${version}
应用占位符指定的组织版本,这些就是新创建我的项目时指定的。
archetype-metadata.xml
archetype-metadata.xml 外面为元数据配置。
- fileSet:用来生成一些我的项目中的文件。如果文件或目录名称蕴含
__property__
模式,则将其替换为相应的属性值。
属性 | 类型 | 形容 |
---|---|---|
filtered | boolean | 过滤文集,将指定文件间接复制不须要批改。 默认值为:false。 |
packaged | boolean | 打包文件,指定文件将在 package 属性之前的目录构造中生成 / 复制。它们能够是非打包的,这意味着所选文件将在没有该前缀的状况下生成 / 复制。 默认值为:false。 |
encoding | String | 过滤内容时应用的编码。 |
fileSet 蕴含以下元素:
元素 | 类型 | 形容 |
---|---|---|
directory | String | 生成我的项目文件的目录 |
includes/include* | List<String> | 蕴含文件 |
excludes/exclude* | List<String> | 排除文件 |
因为生成我的项目不须要 .idea *.iml 文件,所以间接删除:
- module 就是要生成的我的项目一共几个 module
属性 | 类型 | 形容 |
---|---|---|
id | String | The module’s artifactId. |
dir | String | The module’s directory. |
name | String | The module’s name. |
元素 | 类型 | 形容 |
---|---|---|
fileSets/fileSet* | List<FileSet> | 文件 |
modules/module* | List<ModuleDescriptor> | 模块 |
能够看出外面就是本人的我的项目模版。
__rootArtifactId__-controller
在生成的时候,就会依据传入的 artifactId 生成指定的 module 名字。
应用
- clean install
- IDEA Add Archetype
- 抉择应用 Archetype 生成新我的项目
- 填写新生成我的项目的名字等
- 生成新我的项目
扩大
Q: 如何自定义包门路?
A: 能够应用 requiredProperties
自定义参数。通过传入自定义的参数,来生成自定的包门路。
比方发现新生成我的项目的包门路都是 com.liuzhihang.archetype
,这样必定是不行的,每个我的项目有每个我的项目本人的包门路。只须要做以下批改:
- 将
requiredProperties
增加到我的项目中,而后增加新变量middlePackage
。
<requiredProperties>
<!-- 应用 archetype 时候必须要求输出的参数 -->
<requiredProperty key="groupId">
<!-- 能够设置默认值,应用 archetype 会应用默认值 -->
<defaultValue>com.liuzhihang</defaultValue>
</requiredProperty>
<requiredProperty key="package">
<defaultValue>com.liuzhihang</defaultValue>
</requiredProperty>
<requiredProperty key="middlePackage">
<defaultValue>${rootArtifactId}</defaultValue>
</requiredProperty>
</requiredProperties>
- 批改模版的文件名
如果文件或目录名称蕴含 __property__
模式,则将其替换为相应的属性值。到这里还不行,因为生成的包名还没改。
- 批改外部文件的包门路。包含 .java、 .xml、 .properties 等。
- 从新 clean install
注:此时可能会报错,须要在 src/test/resources/projects/basic/archetype.properties
下增加 middlePackage=basic
再从新尝试下。
在生成时留神指定 middlePackage
属性。
Q: 我想自定义 Application 的名字怎么弄?
A: 同样应用 requiredProperties
自定义参数。
<requiredProperty key="appName">
</requiredProperty>
当然也能够起一个通用的名字。
Q: 别的小伙伴怎么用?
A: 当然是 deploy 到私服了,在 pom 外面增加如下配置,指定本人公司的私服。deploy,这样就能够和小伙伴一起欢快的应用啦。
<!-- 近程仓库 -->
<distributionManagement>
<repository>
<id>releases</id>
<name>Nexus Release Repository</name>
<url>http://liuzhihang.com:xxxx/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>snapshots</id>
<name>Nexus Snapshot Repository</name>
<url>http://liuzhihang.com:xxxx/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
Q: 我要怎么从 IDEA 删除 Archetype ?
A: 这么好用怎么舍得删除呢?只有找到以下门路
liuzhihang % > pwd
/Users/liuzhihang/Library/Caches/JetBrains/IntelliJIdea2020.1/Maven/Indices
外面有一个 UserArchetypes.xml
,关上,删除掉外面的 archetype 就行。
相干材料
代码:https://github.com/liuzhihang…