本篇文章旨在帮助大家手把手一次性完成构建Maven脚手架的教程。跟着做不出错,如果出现新问题,评论区留言,做出修正和回答。
一、创建模版工程
1、创建工程
创建模版工程和大家平时创建工程是一样的,无论是单Module还是多Module。
├─template-project
├─template-common // 存放常量、枚举、异常、工具类......
├─template-dao // 存放持久化层交互的mapper
├─template-manager// 技术层面的service、缓存工具、依赖三方的service、AOP
├─template-rpc // 堆外提供的RPC接口、请求参数、响应参数
├─template-service// 业务级层面的service(对逻辑的编排)。定时任务、MQ(发布、订阅)。
└─template-web // 全局配置类、全局异常处理类、过滤器、拦截器、启动器......
└─pom.xml
2、在父POM中添加插件
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.2.0</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.2.0</version>
</plugin>
</plugins>
</pluginManagement>
</build>
这两个插件是必须的。
!!! 确保自己的模版工程是能正常打包的
父POM详情(不必须,可借鉴):
因为我这里的工程是空的,没有添加太多依赖,只保证工程能正常打包,大家在制作自己工程时,自己配置。
<?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>com.xxj</groupId>
<artifactId>template-project</artifactId>
<packaging>pom</packaging>
<version>1.0</version>
<modules>
<module>template-common</module>
<module>template-dao</module>
<module>template-manager</module>
<module>template-service</module>
<module>template-rpc</module>
<module>template-web</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<springboot.version>2.3.5.RELEASE</springboot.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>${springboot.version}</version>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${springboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-bom</artifactId>
<version>5.8.38</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>*/**</include>
</includes>
</resource>
</resources>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.2.0</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
二、创建骨架
2.1、配置Maven环境变量
确保你的maven已经添加到了环境变量!!!不知道怎么配的,自行百度!!!
最终目标:可以正常执行mvn命令
2.2、编译骨架
进入到你模版工程的根目录下。我的目录是D:\ideaworkspace\template-project
PS D:\ideaworkspace\template-project> pwd
Path
----
D:\ideaworkspace\template-project
在模版工程的父POM同级目录下执行命令:mvn archetype:create-from-project
PS D:\ideaworkspace\template-project> mvn archetype:create-from-project
可能会遇见以下问题,看自己情况:
先不管为什么,把你的settings.xml文件复制到C:\Users\*\.m2\settings.xml位置,即可解决。
成功之后会出现如下的目录层级:
├── target
│ └── generated-sources
│ └── archetype
│ ├── pom.xml
│ ├── src
│ │ └── main
│ │ └── resources
│ │ ├── META-INF
│ │ │ └── maven
│ │ │ └── archetype-metadata.xml
│ │ └── archetype-resources
2.3、修改骨架配置
下面说的修改文件,和你的源代码工程没有任何关系,都是target/generated-sources/archetype/目录下的!!!
1、修改骨架的名称
这个不是必须项,看你自己!!!
操作:
进入到targer/generated-sources/archetype/pom.xml
artifactId和name,默认会加archetype,可调整。
2、修改子模块的目录名
我们进入到 target/generated-sources/archetype/src/main/resources/archetype-resources/目录下,会看到自己的子Module,在这里可以修改子Module的名称(我说的是目录的名称)。修改格式,必须,否则你会失败!!!
每个模块的q前缀都加上:__rootArtifactId__ (注意:双下划线)
这是maven官方要求的。
我修改之后的样子:
3、修改父pom.xml 文件
1、先检查pom文件的gav是否存在下面内容,没有就加上或修改:
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>pom</packaging>
<version>${version}</version>
<name>${artifactId}</name>
2、模版工程中的父POM文件中,集成自己的子模块依赖:
target/generated-sources/archetype/src/main/resources/archetype-resources/pom.xml 中添加子模块管理
格式:
<module>${rootArtifactId}-模块一</module>
<module>${rootArtifactId}-模块二</module>
<module>${rootArtifactId}-模块三</module>
......
也是只能改中文,改为自己的
我添加的:
<modules>
<module>${rootArtifactId}-common</module>
<module>${rootArtifactId}-dao</module>
<module>${rootArtifactId}-manager</module>
<module>${rootArtifactId}-service</module>
<module>${rootArtifactId}-rpc</module>
<module>${rootArtifactId}-web</module>
</modules>
3、父POM中集成管理子模块的依赖:
格式:
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-模块一</artifactId>
<version>${project.version}</version>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-模块二</artifactId>
<version>${project.version}</version>
我修改的:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-dao</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-manager</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-rpc</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-web</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
4、修改子模块pom.xml文件
1、每个子模块修改或添加:
<artifactId>${artifactId}</artifactId>
<packaging>jar</packaging>
<name>${artifactId}</name>
2、修改各个子模块的依赖引用:
子模块之间相互引用关系修改,格式如下:
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-模块一</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-模块二</artifactId>
<version>${project.version}</version>
</dependency>
照猫画虎,也是只改中文
如:
<dependency>
<groupId>com.xxj</groupId>
<artifactId>${rootArtifactId}-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-dao</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-manager</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-rpc</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-service</artifactId>
<version>${project.version}</version>
</dependency>
5、修改骨架的配置文件
修改archetype-metadata.xml配置,位于target/generated-sources/archetype/src/main/resources/META-INF/maven/archetype-metadata.xml修改内容格式:注意id、dir、name 是不一样的
修改结果:
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0 http://maven.apache.org/xsd/archetype-descriptor-1.1.0.xsd" name="template-project"
xmlns="https://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<fileSets>
<fileSet filtered="true" encoding="UTF-8">
<directory>.idea</directory>
<includes>
<include>**/*.xml</include>
</includes>
</fileSet>
<fileSet encoding="UTF-8">
<directory>.idea</directory>
<includes>
<include>**/*.gitignore</include>
</includes>
</fileSet>
</fileSets>
<modules>
<module id="${rootArtifactId}-common" dir="__rootArtifactId__-common" name="${rootArtifactId}-common">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-dao" dir="__rootArtifactId__-dao" name="${rootArtifactId}-dao">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-manager" dir="__rootArtifactId__-manager" name="${rootArtifactId}-manager">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</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>
</fileSets>
</module>
<module id="${rootArtifactId}-rpc" dir="__rootArtifactId__-rpc" name="${rootArtifactId}-rpc">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-web" dir="__rootArtifactId__-web" name="${rootArtifactId}-web">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</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-descriptor>
2.4、生成骨架
进入target/generated-sources/archetype目录。执行mvn clean install 等待成功的提示。
三、使用骨架
通过命令行创建骨架!!!1、找一个空目录!!!不然会出错
执行mvn archetype:generate -DarchetypeCatalog=local命令
进行选择编号、GAV、包名。
2、成功
四、发布推送骨架
这个不是必须,看自己情况!!!4.1、部署到公司私服
配置公司私服默认你已经配置好了。执行命令:
mvn deploy:deploy-file -Dfile=jar名称 -DgroupId=jar包groupId -DartifactId=jar包artifactId –Dversion=jar包版本号 -Dpackaging=jar –Durl=私服地址 -DrepositoryId=私服ID
4.2、部署到maven中央仓库
这里我没有试过!!!参考:www.cnblogs.com/ykbb/p/1789…
mvn deploy
使用:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.4:generate -Dfilter=archetype-all -DarchetypeCatalog=仓库地址
五、idea管理骨架
采用idea基于maven骨架创建工程。
5.1、添加骨架
1、配置gav:
我的:
<artifactId>template-project</artifactId>
<groupId>com.xxj</groupId>
<version>1.0</version>
repository如果是远程,把远程地址贴上。
2、使用idea添加的骨架创建工程:
遇见了一个问题,顺便说一下。
问题计入说明:
使用的版本过低,如下图所示,我用的maven 3.5.0
创建过程中,选择3.6.3版本,即可创建成功。
5.2、删除骨架
找到目录:C:\Users\xxjxi\AppData\Local\JetBrains\IntelliJIdea2021.1\Maven\Indices\UserArchetypes.xml修改文件(如果找不到文件,使用文件检索工具,win是everything工具进行检索UserArchetypes.xml文件):
<archetypes>
<!-- 删除这一行即可 -->
<archetype groupId="com.xxj" artifactId="template-project" version="1.0" />
</archetypes>
重启idea即可。