Maven项目模板

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
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.0.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>cn.lazyfennec</groupId>
    <artifactId>my-springboot-maven-archetype-project</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>my-springboot-maven-archetype-project</name>
    <description>Demo project for my Spring Boot maven archetype</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
  • 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,大致内容如下

<?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.lazyfennec</groupId>
      <artifactId>my-springboot-maven-archetype-project-archetype</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <description>Demo project for my Spring Boot maven archetype</description>
    </archetype>
  </archetypes>
</archetype-catalog>

这个文件存储了本地仓库模板的一些信息

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 发布模板

发布的具体内容,待下个文章更新,因为某个软件下载不了,需要缓一缓


如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,475评论 4 372
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,744评论 2 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 112,101评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,732评论 0 221
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,141评论 3 297
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,049评论 1 226
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,188评论 2 320
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,965评论 0 213
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,716评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,867评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,341评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,663评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,376评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,200评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,990评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,179评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,979评论 2 279

推荐阅读更多精彩内容