脚手架项目初始化
- 使用IDEA创建一个Maven项目,并创建多个模块
- 在 silver-gravel-framework项目中的
pom.xml配置如下:
<groupId>com.silvergravel</groupId>
<artifactId>silver-gravel-framework</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.6</version>
</parent>
<modules>
<module>silver-gravel-api</module>
<module>silver-gravel-service</module>
</modules>
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<mybatis-flex.version>1.9.0</mybatis-flex.version>
<postgredql.version>42.7.3</postgredql.version>
<lombok.version>1.18.26</lombok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-dependencies</artifactId>
<version>${mybatis-flex.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.silvergravel</groupId>
<artifactId>silver-gravel-api</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgredql.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>silver-gravel-framework</finalName>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.2.1</version>
</extension>
</extensions>
<plugins>
<plugin>
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-archetype-plugin -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.2.1</version>
</plugin>
</plugins>
</build>
<distributionManagement>
<snapshotRepository>
<id>maven-snapshots</id>
<url>http://192.168.137.244:9010/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
主要是:<build>标签中的两个插件,其余为其他项目父工程的配置文件。
- 创建
archetype.properties文件,内容如下:
# 定义脚手架的版本 archetype.groupId=com.silvergravel
archetype.artifactId=silver-gravel-framework
archetype.version=1.0.0-SNAPSHOT
excludePatterns=**/.idea/**,**/*.iml
# 自定义属性,用于规则匹配替换指定文本内容,或文件夹名称
appName=Basic
-
在
silver-gravel-framework执行mvn archetype:create-from-project -
生成了
target文件夹,内容如下:
项目配置
如上文最后图所示,target只保留文件,没有保留没有内容的文件夹,想保留文件夹可以在META-INF文件下的archetype-metadata.xml中添加配置:
<fileSets>
<fileSet encoding="UTF-8" filtered="true">
<directory></directory>
<includes>
<include>.gitignore</include>
<include>Dockerfile</include>
<include>README.md</include>
</includes>
</fileSet>
</fileSets>
<modules>
<module id="${rootArtifactId}-api" dir="__rootArtifactId__-api" name="${rootArtifactId}-api">
<fileSets>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/api</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/dto</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-service" dir="__rootArtifactId__-service" name="${rootArtifactId}-service">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/aop</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/config</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/controller</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/domain</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/mapper</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/service</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/java/__packageInPathFormat__/format/util</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
</includes>
</fileSet>
</fileSets>
</module>
</modules>
<!--属性变量定义,如果在archetype.properties配置了该属性,那么初始化就出现,建议所有定义属性都预先配置,减少后续还要在test文件下配置测试的属性-->
<requiredProperties>
<requiredProperty key="appName">
<defaultValue>Basic</defaultValue>
</requiredProperty>
</requiredProperties>
这里注意<fileSet>标签,每一个<fileSet>内都有一个<directory>标签,在生成新项目的时候会对应的生成指定的文件夹,如:<directory>src/main/java/__packageInPathFormat__/format/api</directory>
则会在 ${rootArtifactId}-api模块下生成src/main/java/新项目的groupId.转成//format/api的文件夹。从这里可以发现有两种替换模板的格式
${}:用于替换文件中的内容__property__:用于替换文件名称或者文件夹名称
<fileSet>有以下属性,尤其是filtered属性:
| 属性 | 描述 |
|---|---|
encoding | 设置文件编码 |
fitered | 表示指定的内容是否启用占位符替代文本,true表示启用占位符 |
packaged | 是否在每个文件夹之后添加新项目groupId文件夹 |
Maven中提供了以下几种属性:
| 属性 | 描述 |
|---|---|
rootArtifactId | 它保存用户输入的值作为项目名(maven在用户运行原型时在提示符中询问为artifactid:的值 |
artifactId | 如果项目由一个模块组成,则此变量的值将与${rootArtifactId}相同,但如果项目包含多个模块,则此变量将由每个模块文件夹中的模块名替换 |
package | 用户为项目提供的包,也在用户运行原型时由maven提示 |
packageInPathFormat | 与package变量的值相同,但将“.”替换为字符“/”,例如:,对于包com.silvergravel,此变量为com/silvergravel |
groupId | 用户为项目提供的groupid,在用户运行原型时由maven提示 |
version | 版本号 |
在<module>标签中有以下几个属性
| 属性 | 描述 |
|---|---|
id | 子模块工程的artifactId |
dir | 子模块工程源文件在archetype-resources里对应的`directory |
name | 子模块的名字.,可定制化自己的服务模块。 |
接下来就是配置target如下图所示,文件夹,文件名使用__property__,文件内容使用${property},图中的pom.xml文件中加上module,删除build新项目不要插件内容
进入target中archetype文件夹执行mvn install
执行成功之后,在本地Maven仓库中有archetype-catalog.xml文件,里面记录了脚手架的版本,如果后续不使用,直接删掉该文件内容并删除对应项目即可。
上传到私服命令:
mvn deploy -DaltDeploymentRepository=maven-snapshots::http://192.168.137.244:9010/repository/maven-snapshots/
使用脚手架创建项目
Maven
打开一个空文件夹执行以下命令
mvn archetype:generate -B -DarchetypeGroupId=com.silvergravel -DarchetypeArtifactId=silver-gravel-framework -DarchetypeVersion=1.0.0-SNAPSHOT -DgroupId=org.example -DartifactId=demo -Dversion=1.0.1-SNAPSHOT -DappName=Demo
IDEA
输入脚手架项目,添加
arhetype-catalog.xml路径