maven java archetype_15579903729

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 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值