基本每个公司的项目都有一套模板,只要开新项目直接复制一份改改包名和一些配置就初始化了一个新项目。这种方式有点繁琐,有没有通过命令甚至是可视化的方式从一个模板项目初始化项目。Maven其实有提供这种能力,这就是基于原型(Archetype
)的生成项目。
首先需要在模板项目中集成Maven原型插件:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-archetype-plugin</artifactId> <version>3.2.0</version> </plugin>
从项目生成模板只需要三步。
Maven插件允许我们从已有项目生成一个模板项目。在项目根目录下执行mvn archetype:create-from-project
命令即可将该项目生成一个项目模板,生成的项目原型被保存在路径target/generated-sources/archetype
下。
但是这个存在一个问题,一些和项目模板源码无关的文件也会被加入模板中,比如IDEA中的.iml
文件、.idea
目录下的文件。这些“垃圾”文件需要在生成模板时被忽略。
maven-archetype-plugin
提供了一个属性配置可以帮助我们实现该能力。在原始项目的根目录(或者你喜欢的其它目录)编写一个.properties
文件:
# 原型的坐标 必须声明 archetype.groupId=cn.felord # 最好按照约定以-archetype结尾 archetype.artifactId=template-archetype archetype.version=1.0 # 需要忽略的文件夹和文件类型 英文逗号隔开 excludePatterns=**/.idea/**,**/*.iml
这时候执行生成的命令就需要指定该配置文件了:
mvn archetype:create-from-project -Darchetype.properties=./archetype.properties
注意:路径为配置文件和根目录的相对路径。
这样生成的原型就忽略掉那些无用的文件了。细心的同学会发现生成原型中的pom.xml
的坐标变成了:
<groupId>cn.felord</groupId> <artifactId>template-archetype</artifactId> <version>1.0</version> <packaging>maven-archetype</packaging> <name>template-archetype</name>
我们需要跳转的target/generated-sources/archetype
下执行mvn install
在我们本地maven repository目录(通常是~/.m2
)下会把当前原型注册到archetype-catalog.xml
中:
<?xml version="1.0" encoding="UTF-8"?> <archetype-catalog xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0 http://maven.apache.org/xsd/archetype-catalog-1.0.0.xsd" xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-catalog/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <archetypes> <archetype> <groupId>cn.felord</groupId> <artifactId>template-archetype</artifactId> <version>1.0</version> <description>spring security learning demo</description> </archetype> </archetypes> </archetype-catalog>
后续使用时maven会从这里检索我们本地的模板。
接下来验证一下效果,从本地原型生成项目需要执行:
mvn archetype:generate -DarchetypeCatalog=local
然后一个新项目就诞生了。
模板分享基于Maven远程仓库,首先你要在你的setting.xml
中配置一个远程仓库并且拥有deploy的权限。然后在target/generated-sources/archetype
下执行mvn deploy
就行了。这里有两种方式来使用远程的原型模版。
点击New Project然后选择Maven,勾选Create from archetype点击Add Archetype弹出对话框:
然后模板就被添加到模板列表了,选中添加的模板点击下一步就可以使用了。
就像使用本地原型创建项目一样,这里给你一套命令执行就可以了:
mvn archetype:generate \ -DgroupId=cn.felord.demo \ -DartifactId=demo-project \ -Dversion=1.0.0 \ -Dpackage=cn.felord.demo \ -DarchetypeGroupId=cn.felord \ -DarchetypeArtifactId=template-archetype \ -DarchetypeVersion=1.0 \ -DinteractiveMode=false
如果你想通过交互命令生成,就把前三个选项和最后一个
DinteractiveMode
去掉试试。
不要忘了把下面的远程仓库配置到setting.xml
;
<repository> <id>archetype</id> <!-- 仓库地址 --> <url>https://repository.domain.com/path/to/repo/</url> </repository> <!-- 仓库的认证信息 --> <server> <id>archetype</id> <username>repousername</username> <password>xxx.felord.cn</password> </server>
项目模版生成在项目研发中很重要,可以让我们的项目能保持一致性,也方便后续转微服务或者维护升级。
关注公众号:Felordcn获取更多资讯
|