背景
每个企业对代码的维护都有自己的通用标准,比如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
声明为非交互式,没有这个参数需要手动确认
可能遇到的问题
- 如果需要将模板deploy到私服,需要在路径《已有项目根目录\target\generated-sources\archetype》下面的pom.xml里面添加distributionManagement,并执行maven deploy。create-from-project并不会将已有项目pom的distributionManagement配置添加到模板工程里
- 项目内的文件符合替换条件但是没有被处理,是因为archetype.properties中的属性archetype.filteredExtensions,只有配置了文件后缀的才会处理,默认是不包含yml的
- git的配置文件.gitignore是不能自动添加到模板工程里面去的,需要创建新项目后手动复制一个过去。
- maven有很多issues提到这个问题,有人说在特定版本下面时是能够处理ignore文件的,但是我也没有测试通过。而且issues里面提到默认省略这些文件是通用场景,当前这种需要复制是特例
- 会自动排除的文件
- maven执行过程出现异常:Error configuring command-line. Reason: Maven executable not found at: xxx\bin\mvn.bat。将maven环境目录\bin下面的mvn.cmd和mvnDebug.cmd,复制一份修改后缀为.bat
欢迎大家留言交流讨论,如果对你有帮助,请点个赞吧
1648

被折叠的 条评论
为什么被折叠?



