1. 什么是ArcheType
或者使用 mvn archetype:generate
命令来快速创建maven项目,也会有很多歌选项,让你选择模板序号。
这里的archetype表示使用哪一个模板来初始化我们的项目∶简单的说archetype是 maven插件,或者说是一个项目模板工具包,它能根据模板创建一个新的项目结构工程。
一个archetype定义了要做的相同类型事情的初始样式或模型。这个名称给我们提供来了一个一致的生成maven工程的方式。archetype会帮助作者给用户创建maven工程模板,并给用户提供生成相关工程模板版本的参数化方法。
-
Maven提供的模板
-
常用模板
2. 搭建自己的项目模板
2.1 Maven archeType Plugin (base on Java 7)
2.2 Maven archeType Plugin
原型插件有四个直接使用的目标:
archetype:generate:从原型创建一个Maven项目:要求用户从原型目录中选择一个原型,然后从远程存储库中检索它。检索后,将对其进行处理以创建可正常运行的Maven项目。
archetype:create-from-project:从现有项目创建原型。
archetype:crawl:检索在存储库中搜索原型并更新目录。通过“maven-archetype”包装将三个目标绑定到默认生命周期:
archetypejar:(绑定到打包阶段)用于构建原型jar工件。
archetype:integration-test:(绑定到集成测试阶段)用于通过从刚刚构建的原型生成示例项目来执行原型集成测试。
archetype:update-local-catalog:(绑定到安装阶段)用于更新本地目录。
2.3 实际操作一下
1. 创建一个springboot项目,大致的几个文件如下,具体可以根据自己的需求进行修改。
- pom.xml
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.0.0
cn.lazyfennec
my-springboot-maven-archetype-project
0.0.1-SNAPSHOT
my-springboot-maven-archetype-project
Demo project for my Spring Boot maven archetype
8
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-devtools
runtime
true
com.mysql
mysql-connector-j
runtime
org.projectlombok
lombok
true
org.springframework.boot
spring-boot-starter-test
test
org.springframework.boot
spring-boot-maven-plugin
org.projectlombok
lombok
- application.yml
spring:
datasource:
username: xxxx
password: xxxx
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/databaseName?serverTimezone=GMT
- MySpringbootMavenArchetypeProjectApplication
package cn.lazyfennec.myspringbootmavenarchetypeproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MySpringbootMavenArchetypeProjectApplication {
public static void main(String[] args) {
SpringApplication.run(MySpringbootMavenArchetypeProjectApplication.class, args);
}
}
2. 项目根目录下执行 mvn clean
,如果确认很干净,那么不操作这一步也是可以的,这一步基本不会报错
G:\workspace\my-springboot-maven-archetype-project>mvn clean
[INFO] Scanning for projects...
[INFO]
[INFO] --------< cn.lazyfennec:my-springboot-maven-archetype-project >---------
[INFO] Building my-springboot-maven-archetype-project 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-clean-plugin:3.2.0:clean (default-clean) @ my-springboot-maven-archetype-project ---
[INFO] Deleting G:\workspace\my-springboot-maven-archetype-project\target
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.919 s
[INFO] Finished at: 2022-12-04T23:54:20+08:00
[INFO] ------------------------------------------------------------------------
3. 项目根目录下执行 mvn archetype:create-from-project
,这一步可能会遇到一些错误
- 没有报错的情况
G:\workspace\my-springboot-maven-archetype-project>mvn archetype:create-from-project
[INFO] Scanning for projects...
[INFO]
[INFO] --------< cn.lazyfennec:my-springboot-maven-archetype-project >---------
[INFO] Building my-springboot-maven-archetype-project 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.0:create-from-project (default-cli) > generate-sources @ my-springboot-maven-archetype-project >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.0:create-from-project (default-cli) < generate-sources @ my-springboot-maven-archetype-project <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:create-from-project (default-cli) @ my-springboot-maven-archetype-project ---
[INFO] Setting default groupId: cn.lazyfennec
[INFO] Setting default artifactId: my-springboot-maven-archetype-project
[INFO] Setting default version: 0.0.1-SNAPSHOT
[INFO] Setting default package: cn.lazyfennec.myspringbootmavenarchetypeproject
[WARN] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[INFO] Scanning for projects...
[INFO]
[INFO] ---< cn.lazyfennec:my-springboot-maven-archetype-project-archetype >----
[INFO] Building my-springboot-maven-archetype-project-archetype 0.0.1-SNAPSHOT
[INFO] --------------------------[ maven-archetype ]---------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.3.0:resources (default-resources) @ my-springboot-maven-archetype-project-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 81 resources
[INFO]
[INFO] --- maven-resources-plugin:3.3.0:testResources (default-testResources) @ my-springboot-maven-archetype-project-archetype ---
[WARNING] Using platform encoding (GBK actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:jar (default-jar) @ my-springboot-maven-archetype-project-archetype ---
[INFO] Building archetype jar: G:\workspace\my-springboot-maven-archetype-project\target\generated-sources\archetype\target\my-springboot-maven-archetype-project-archetype-0.0.1-SNAPSHOT.jar
[INFO] Building jar: G:\workspace\my-springboot-maven-archetype-project\target\generated-sources\archetype\target\my-springboot-maven-archetype-project-archetype-0.0.1-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.536 s
[INFO] Finished at: 2022-12-04T23:57:17+08:00
[INFO] ------------------------------------------------------------------------
[INFO] Archetype project created in G:\workspace\my-springboot-maven-archetype-project\target\generated-sources\archetype
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.550 s
[INFO] Finished at: 2022-12-04T23:57:17+08:00
[INFO] ------------------------------------------------------------------------
- 有报错的情况,
Invoker process ended with result different than 0! -> [Help 1]
G:\workspace\my-springboot-maven-archetype-project>mvn archetype:create-from-project
[INFO] Scanning for projects...
[INFO]
[INFO] --------< cn.lazyfennec:my-springboot-maven-archetype-project >---------
[INFO] Building my-springboot-maven-archetype-project 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] >>> maven-archetype-plugin:3.2.0:create-from-project (default-cli) > generate-sources @ my-springboot-maven-archetype-project >>>
[INFO]
[INFO] <<< maven-archetype-plugin:3.2.0:create-from-project (default-cli) < generate-sources @ my-springboot-maven-archetype-project <<<
[INFO]
[INFO]
[INFO] --- maven-archetype-plugin:3.2.0:create-from-project (default-cli) @ my-springboot-maven-archetype-project ---
[INFO] Setting default groupId: cn.lazyfennec
[INFO] Setting default artifactId: my-springboot-maven-archetype-project
[INFO] Setting default version: 0.0.1-SNAPSHOT
[INFO] Setting default package: cn.lazyfennec.myspringbootmavenarchetypeproject
[WARN] Maven will be executed in interactive mode, but no input stream has been configured for this MavenInvoker instance.
[ERROR] Error executing Maven.
[ERROR] The specified user settings file does not exist: C:\Users\lazyf\.m2\settings.xml
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.845 s
[INFO] Finished at: 2022-12-04T23:58:25+08:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:3.2.0:create-from-project (default-cli) on project my-springboot-maven-archetype-project: Invoker process ended with result dif
ferent than 0! -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
这个错误产生后,我们看报错的提示,最后几行有描述可以通过增加参数 -X
查看debug的信息,于是我们就加上
mvn archetype:create-from-project -X
最后我们查看打印的日志,可以看到以下信息,所以将其他地方的settings.xml 拷贝过去就可以了
同理,如果遇到其他的错误,也可以使用这个方法得到一些相关的信息,然后跟着去进行操作就好了。
执行上边的命令后,我们可以看到target目录下生成了一些东西,如下图
4. 先进入到 target\generated-sources\archetype
,然后执行 mvn install
cd target/generated-sources/archetype
mvn install
这时候会将jar包等内容生成到settings.conf
中指定的maven_repository目录中,如我这里就是D:\maven\maven_repository\cn\lazyfennec\my-springboot-maven-archetype-project-archetype\0.0.1-SNAPSHOT\my-springboot-maven-archetype-project-archetype-0.0.1-SNAPSHOT.jar
此外,目录maven_repository
中还会生成一个 archetype-catalog.xml
,大致内容如下
cn.lazyfennec
my-springboot-maven-archetype-project-archetype
0.0.1-SNAPSHOT
Demo project for my Spring Boot maven archetype
这个文件存储了本地仓库模板的一些信息
5. 执行 mvn archetype:crawl
这个指令的意思就是对整个仓库进行扫描,然后在本地根目录生成 archetype-catalog.xml
骨架配置文件,但是可能很费时间,扫描结束后会根据情况生成archetype-catalog.xml
新的内容。
6. 使用archetype模板
命令方式
执行mvn archetype:generate -DarchetypeCatalog=local
,这个指令会让你从本地的archetype模板中创建项目。然后会让你选择模板序号和groupId、artifactId、version 和 package 信息。-
IDEA直接使用
这里直接给图片吧
剩下的操作按照一般创建项目的顺序即可。等待加载完成后,除了一些配置,其他的内容基本和模板项目一致。
2.4 对于一个项目里边多个modules的情况
对于一个项目里边多个modules的情况,其实创建项目模板也是一样的步骤,只是选择目录要选最外层的目录下操作,其他的一致。
3. 拓展
3.1 maven archetype项目结构
3.2 发布模板
发布的具体内容,待下个文章更新,因为某个软件下载不了,需要缓一缓
如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~