【maven】使用archetype将现有项目做成模板,并用模板创建新项目

背景

每个企业对代码的维护都有自己的通用标准,比如WEB框架,ORM框架,包名,自定义依赖等等。
如果企业是以提供客制项目营收为主导就会频繁的创建新项目,那么创建新项目时怎么才能高效的复用这些通用标准?

  • 将通用标准复制到空项目。缺点:大量的代码、配置复制过程中容易出现问题
  • 将已有项目复制为新项目。缺点:项目名称相关的包名,关键字等都需要调整
  • 通用配置做成内部依赖包,新项目引入。缺点:通用配置包含框架入口不适合封装成依赖

以上办法都有各自的缺点,使用maven archetype能够很好的解决这些问题。以下过程原理是依赖已有项目生成模板工程(groupId,artifactId,version,packageName替换为变量),然后使用模板工程创建新项目。

maven archetype create-from-project创建模板

已有项目准备

pom添加plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-archetype-plugin</artifactId>
    <version>3.2.0</version>
</plugin>

根目录添加archetype.properties

# 添加不需要放到模板的正则匹配
excludePatterns=.idea/**,README.md,.mvn/wrapper/*,.gitignore
# 需要替换处理的文件后缀,默认没有yml
archetype.filteredExtensions=java,yml,xml,txt,groovy,cs,mdo,aj,jsp,gsp,vm,html,xhtml,properties,.classpath,.project
模板准备
cd 已有项目根目录

# 如果多次执行一定要clean,防止文件污染
mvn clean

mvn compile

# 多模块的项目必须要执行这个,否则生成模板时会找不到依赖
mvn install 

# 参数packageName就是当前项目的包名
mvn archetype:create-from-project -DpackageName=com.xxold

cd 模板项目根目录\target\generated-sources\archetype

# 这里打开java文件可以看到变量${package}等
# 将模板项目install到本地仓库,用于下一步创建新项目
mvn install

maven archetype generate创建新项目

创建项目只需要一行命令

mvn archetype:generate -DgroupId=com.xxnew  -DartifactId=xxnew-project -Dpackage=com.xxnew.package -Dversion=1.0.0-SNAPSHOT -DarchetypeGroupId=com.xxold -DarchetypeArtifactId=xxold-project-archetype -DarchetypeVersion=1.0.0-SNAPSHOT -DinteractiveMode=false

参数说明:
-DgroupId=com.xxnew -DartifactId=xxnew-project -Dversion=1.0.0-SNAPSHOT
新项目组名,新项目项目名,新项目版本
-Dpackage=com.xxnew.package
新项目包名
-DarchetypeGroupId=com.xxold -DarchetypeArtifactId=xxold-project-archetype -DarchetypeVersion=1.0.0-SNAPSHOT
模板项目组名,模板项目项目名,模板项目版本。这个三个可以从路径《已有项目根目录\target\generated-sources\archetype》里面的pom里面查看
-DinteractiveMode=false
声明为非交互式,没有这个参数需要手动确认

可能遇到的问题

  1. 如果需要将模板deploy到私服,需要在路径《已有项目根目录\target\generated-sources\archetype》下面的pom.xml里面添加distributionManagement,并执行maven deploy。create-from-project并不会将已有项目pom的distributionManagement配置添加到模板工程里
  2. 项目内的文件符合替换条件但是没有被处理,是因为archetype.properties中的属性archetype.filteredExtensions,只有配置了文件后缀的才会处理,默认是不包含yml的
  3. git的配置文件.gitignore是不能自动添加到模板工程里面去的,需要创建新项目后手动复制一个过去。
  4. maven执行过程出现异常:Error configuring command-line. Reason: Maven executable not found at: xxx\bin\mvn.bat。将maven环境目录\bin下面的mvn.cmd和mvnDebug.cmd,复制一份修改后缀为.bat

欢迎大家留言交流讨论,如果对你有帮助,请点个赞吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值