maven-archetype
介绍
{** idea新建项目后每次都需要自己补充项目结构,所以自定义了骨架https://gitee.com/enterprises}
自定义使用说明
四个关键词不要使用简单词汇。
四个关键词之间不要存在包含关系
groupid:com.zxr.temp
artifactId:temp-xxx
version:1.0.0-TEMP
package:com.temp
安装教程
1 clone
2 骨架修改
3 mvn archetype:create-from-project
4 cd archetype
5 mvn install
6 add archetype
com.zxr.temp
springbootweb-archetype
1.0.0
使用说明
mvn archetype这个插件花了近一天总算搞明白了,尽管过程中踩了很多不应该的坑,但能得出结论还是令人开心的。
这里主要介绍一下 mvn archetype:create-from-project 这个命令的一些原理
但需要特别强调的是,以下原理不是通过源码推理出来的,而是通过无数次使用后的结果对比演绎出来的。所以并不保证完全的正确性。有错误的地方欢迎指出来。
1 在使用此指令(mvn archetype:create-from-project)时
不知道出于何种原因,一直出现以下错误提示
Invoker process ended with result different than 0!
但奇怪的是,骨架还是正常生成了,所以这个问题我也没多研究(其实研究了,但研究不出就放弃了)
2 在执行此命令(mvn archetype:create-from-project)后
插件会按照以下两个影响比较大的规则
1 空包自动忽略
2 特定字符串自动替换为变量
第一点,会导致很多项目中会用到的resource/static这种空文件夹就无法保存到骨架中。
解决方案
1:第一种方法很简单,在空包中添加占位文件
在可以使用第一种方法的情况下尽可能使用第一种方法。因为第二种方法实在不符合程序员的风格
2: 在/archetype/pom.xml中加入
org.apache.maven.plugins
maven-resources-plugin
2.4.3
true
然后在archetype中手动添加空文件夹,还要修改fileset的路径
第二种方法不想多讲,因为操作太low,也不推荐,实在想知道多百度几次就行了。
3: 大佬推荐方法,手写一个可以代替archetype的插件。
第二点,首先要知道一个项目的几个主要key:
${groupId}
${artifactId}
${version}
${package}
archetype在做文件输出时主要关注的就是这几个key
你的任何文件里只要出现这些key,全部会被替换成变量。
举例
假设你在配置文件中做了如下配置
mybatis.typeAliasesPackage=com.zxr.temp.springboot.pojo
archetype会将上述配置输出为
mybatis.typeAliasesPackage=${package}.pojo
这种特定字符替换成变量的操作是骨架建设的前提,他可以让你新建项目时不需要自己手动去改包的路径
我们所有的java类都需要导包,如果不对这些java类中的导包进行替换操作,那我们每次使用骨架还要自己去排错,违背了骨架快速创建的初衷。
但这种操作本身也存在问题,举例来说:
${version}这个变量
我新建一个骨架,由于个人习惯,版本号我设置成了1.0。
然后问题就来了。
在输出时,我骨架中所有的"1.0"字符串全部被替换成了${version}
当我再通过这个骨架新建项目时,
输入groupId:com.demo
输入artifactId:hello
输入versionId:0.0.1-SNUdSHOT(idea默认值,差不多是这个样子,大概^ ^)
然后,当项目生成时,骨架中的${version}全部变成了0.0.1-SNUdSHOT
总之,每个idea项目天生自带很多配置文件,而
${groupId}
${artifactId}
${version}
${package}
这四个参数,最好不要与这些天生的配置文件中的任何字符有重叠。
也是理解了为啥版本号的默认值是1.0.0-一串英文。纯数字确实很容易出问题。
第二点就是archetype的主要原理,本质上archetype就是一个文本转换器。
不喜欢archetype的大佬可以自己写一个插件代替,修复空文件夹被忽略的问题,应该不难
参与贡献
Fork 本仓库
新建 Feat_xxx 分支
提交代码
新建 Pull Request
码云特技
使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
GVP 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目