很多时候,我们生成的项目都是固定结构的,并且可能部分内容都是相同的
archetype项目就是为了生成固定目录结构的项目,省去每次一个一个模块的创建,与固定内容的复制黏贴
准备
IDEA 使用脚手架创建项目
首先,配置Maven 安装环境变量,比如系统环境变量MAVEN_HOME和PATH中添加%MAVEN_HOME%/bin
检查maven 安装环境和环境变量配置OK
- CMD >> mvn -version
- CMD >> echo %MAVEN_HOME%
然后需要确定你是否需要创建多个不同的脚手架:
- 如果你需要多个脚手架,你可以创建一个父级框架,并分别在不同子模块中分别设置你的不同脚手架
- 如果你只需要创建一个脚手架,那么你不需要创建子模块
你可创建多个项目,每个项目生成一个脚手架的骨架;也可以只创建一个项目,项目中的每个模块生成一个骨架;
创建脚手架
创建maven项目
如果需要创建多个脚手架,需要有父框架,然后根据需要添加module,否则可以不需要创建子module,直接在项目中创建所需结构即可
脚手架结构模式
项目直接生成骨架模式
以上项目结构中没有子模块,只能生成一个骨架,但是如果还需要其它不同脚手架,以上方式只能通过创建新的项目的方式;
如果希望是扩展形式的,不创建新项目的前提下,新增生成骨架,可以通过添加模块的方式增加生成的骨架,新增模块方式如下:
多模块生成骨架模式
创建项目archetype-module
通过改方式可以创建多个项目的骨架,每添加一个模块可以用于生成一个骨架
选中项目,鼠标右键,new->Module
创建如下目录parent-maven-archetype:
可以根据需要不断在parent-maven-archetype下添加模块
以上两种方式的本质区别其实就是多个front-shell-archetype项目合并在一起形成多模块项目
脚手架结构说明
以front-shell-archetype 为例进行说明
pom.xml
项目根目录下文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.domain.archetype</groupId>
<artifactId>front-shell-archetype</artifactId>
<!--用于声明archetype 项目,必须包含-->
<packaging>maven-archetype</packaging>
<name>front-shell-archetype</name>
<version>0.0.2-SNAPSHOT</version>
<build>
<!--用于打包archetype 项目,必须包含-->
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.1.2</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<!--用于打包archetype 项目,必须包含-->
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.1.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<scm>
<connection>scm:git:https://git.domain.cn/front-shell-archetype.git</connection>
<developerConnection>scm:git:https://git.domain.cn/front-shell-archetype.git</developerConnection>
<url>https://git.domain.cn/front-shell-archetype.git</url>
</scm>
<distributionManagement>
<repository>
<id>Release</id>
<name>Releases</name>
<url>http://alm.domain.cn/nexus/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>Snapshot</id>
<name>Snapshots</name>
<url>http://alm.domain.cn/nexus/content/repositories/snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
archetype-resources
- 所有的项目骨架内容都集中在src/main/resources/archetype-resources文件夹下
- archetype-resources中的pom.xml定义了待生成项目的pom文件的内容
- archetype-resources中的__gitignore__定义了待生成项目的__gitignore__文件的内容
- rootArtifactId-*文件夹下,/src/main/java、/src/test/java中分别定义了待生成项目中相应目录下的内容
archetype-resources固定名称,最好不要变更,用于定义生成项目中的模块
META-INF/maven
/src/main/resources/META-INF/maven/archetype-metadata.xml中定义相关的元数据描述(其中该文件的位置固定为resources/META-INF/maven文件夹下,且名称固定为archetype-metadata.xml)。
archetype-metadata.xml对archetype-resources文件夹下的内容进行过滤