如何快速构建Maven多模块项目的新想法?

2026-05-22 09:022阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计2870个文字,预计阅读时间需要12分钟。

如何快速构建Maven多模块项目的新想法?

目录 + 1. 使用Idea快速创建Maven多模块项目 + 1.1. 首先创建父pom + 1.2. 创建Dubbo API模块 + 1.3. 创建子模块

2.完整Maven工程结构说明

3.推送GitHub

4.对项目增加依赖

+ 4.1. 添加hulk-parent pom + 4.1.1. 添加spring依赖

目录
  • 1.使用idea快速创建maven多模块项目
    • 1.1.首先创建父pom
    • 1.2.创建dubbo api模块,
    • 1.3.创建子模块
  • 2.完整maven工程结构说明
  • 3.推送GitHub
  • 4.对项目增加依赖
    • 4.1.hulk-parent pom添加
      • 4.1.1.添加spring-boot-starter-parent
      • 4.1.2.添加properties,用于控制依赖的版本
      • 4.1.3.添加dependencyManagement
      • 4.1.4.dependencyManagement vs dependencies区别说明
    • 4.2.子模块添加依赖
      • 4.2.1.hulk-api模块添加依赖
      • 4.2.2.hulk-common模块
      • 4.2.3.hulk-mapper模块
      • 4.2.4.hulk-service模块
      • 4.2.5.hulk-web模块
  • 5.小结
  • 6.创建自定义maven骨架

1.使用idea快速创建maven多模块项目 1.1.首先创建父pom

File -> New -> project,选择maven-archetype-site,如下图

父pom的packaging改为pom。比如创建父pom为hulk-parent

1.2.创建dubbo api模块,

用于提供dubbo服务api

右键父pom,比如hulk-parent,选择New->module,直接next,不要勾选create from archetype,如下图

接着在parent这里不要选择hulk-parent,原因是对于dubbo api模块,是要提供jar依赖给别人使用,如果其parent是hulk-parent,那么需要把hulk-parent也要推送到仓库,别人才可以拉取到hulk-api模块,这样是不规范的,因此这里要选择none,这样只把hulk-api模块推送到仓库,别人即可下载到hulk-api依赖

1.3.创建子模块

创建common、mapper、service模块

通常项目都有common、mapper模块,创建这两个模块,parent选择hulk-parent

同样创建module不要勾选create from archetype,parent处是父pom,即hulk-parent

一个项目通用工程就是这样了,当然也可以加web、schedule、mq模块

2.完整maven工程结构说明

一个完整的项目maven结构如下

hulk-parent

​ |-hulk-api --> dubbo api模块,给别人依赖,提供服务

​ |-hulk-common --> 通用模块

​ |-hulk-mapper --> 数据库模块,放数据库实体和mapper

​ |-hulk-service --> 服务的具体实现,包含dubbo服务和业务服务。通常作为一个应用

​ |-hulk-web --> web模块,提供192.168.3.101:2375</docker.host> <docker.maven.plugin.version>1.1.0</docker.maven.plugin.version>--> <pagehelper-starter.version>1.2.10</pagehelper-starter.version> <pagehelper.version>5.1.8</pagehelper.version> <druid.version>1.1.10</druid.version> <hutool.version>4.5.7</hutool.version> <swagger2.version>2.9.2</swagger2.version> <swagger-models.version>1.6.0</swagger-models.version> <swagger-annotations.version>1.6.0</swagger-annotations.version> <mybatis-generator.version>1.3.7</mybatis-generator.version> <mybatis.version>3.4.6</mybatis.version> <mysql-connector.version>8.0.16</mysql-connector.version> <spring-data-commons.version>2.1.5.RELEASE</spring-data-commons.version> <jjwt.version>0.9.0</jjwt.version> <aliyun-oss.version>2.5.0</aliyun-oss.version> <logstash-logback.version>5.3</logstash-logback.version> <minio.version>3.0.10</minio.version> <guava.version>20.0</guava.version> <hulk-common.version>1.0-SNAPSHOT</hulk-common.version> <hulk-mapper.version>1.0-SNAPSHOT</hulk-mapper.version> </properties> 4.1.3.添加dependencyManagement

其它依赖声明也加这里

<dependencyManagement> <dependencies> <!--hulk通用模块--> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-common</artifactId> <version>${hulk-common.version}</version> </dependency> <!--hulk中MBG生成模块--> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-mbg</artifactId> <version>${hulk-mapper.version}</version> </dependency> <!--MyBatis分页插件starter--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper-starter.version}</version> </dependency> <!--MyBatis分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>${pagehelper.version}</version> </dependency> <!--集成druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!--Hutool Java工具包--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.version}</version> </dependency> <!--Swagger-UI API文档生产工具--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger2.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger2.version}</version> </dependency> <!--解决Swagger 2.9.2版本NumberFormatException--> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>${swagger-models.version}</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>${swagger-annotations.version}</version> </dependency> <!-- MyBatis 生成器 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>${mybatis-generator.version}</version> </dependency> <!-- MyBatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!--Mysql数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector.version}</version> </dependency> <!--SpringData工具包--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> <version>${spring-data-commons.version}</version> </dependency> <!--JWT(Json Web Token)登录支持--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jjwt.version}</version> </dependency> <!--统一Guava版本防止冲突--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> </dependencies> </dependencyManagement>

父pom通常不加dependencies,如果要加,也只是加每个子模块都需要的dependencies。这里就涉及到dependencies和dependencyManagement的区别了

如何快速构建Maven多模块项目的新想法?

4.1.4.dependencyManagement vs dependencies区别说明

dependencyManagement应用场景
为了项目的正确运行,必须让所有的子模块使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。在我们项目顶层的pom文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

dependencies应用场景
相对于dependencyManagement,如果在父pom文件中中通过dependencies引入jar,将默认被所有的子模块继承。
子模块如果希望有自己个性化的内容,可以在子模块中对于其中的某个属性进重新定义。比如父pom声明了spring-web模块,版本是V3.2,如果子模块想使用V3.3,那么在子模块显式指定V3.3即可。

dependencyManagement与dependencies区别
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。

在实际的项目开发中,推荐在父pom中使用dependencyManagement对项目中使用到的依赖包进行统一的管理。

4.2.子模块添加依赖 4.2.1.hulk-api模块添加依赖

dubbo api模块只是dubbo入参、出参以及定义的dubbo接口,实际并不需要依赖什么,当然这个模块要最小依赖,尽量少的依赖。

4.2.2.hulk-common模块

通常工具类和通用类放这个模块,比如apache工具包,hutool工具包等,依赖这些第三方工具类

<dependencies> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> 4.2.3.hulk-mapper模块

用于数据库交互,依赖数据库以及数据源,通常也会依赖hulk-common模块

<dependencies> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-common</artifactId> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> 4.2.4.hulk-service模块

用于dubbo服务和业务服务,通常要依赖hulk-common和hulk-mapper,也依赖spring aop等,依赖dubbo。同时需要打包,要增加spring-boot-maven-plugin插件,内容大概如下

<dependencies> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-mapper</artifactId> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.1.RELEASE</version> </dependency> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.7.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 4.2.5.hulk-web模块

用于提供http功能,依赖spring mvc,依赖hulk-service(即也就依赖了hulk-common和hulk-mapper)

5.小结

记录下使用idea快速创建maven多module,只有两个地方需要注意:

  1. 给别人提供dubbo的依赖module,不能依赖父pom,这个工作中许多项目组都未这样做,导致别人使用依赖时候,直接炸红,原因是这样创建情况下,虽然dubbo接口推送了maven,但是对方父pom没推送maven仓库导致。
  2. dependencyManagement和dependencies区别,前者用于定义统一的的版本号,是声明,并未实际依赖。后者是实际依赖。
6.创建自定义maven骨架

网上很多,随便参考。用户快速创建多模块的项目,必定创建项目再引入一系列依赖是很麻烦耗时的事情。

本文共计2870个文字,预计阅读时间需要12分钟。

如何快速构建Maven多模块项目的新想法?

目录 + 1. 使用Idea快速创建Maven多模块项目 + 1.1. 首先创建父pom + 1.2. 创建Dubbo API模块 + 1.3. 创建子模块

2.完整Maven工程结构说明

3.推送GitHub

4.对项目增加依赖

+ 4.1. 添加hulk-parent pom + 4.1.1. 添加spring依赖

目录
  • 1.使用idea快速创建maven多模块项目
    • 1.1.首先创建父pom
    • 1.2.创建dubbo api模块,
    • 1.3.创建子模块
  • 2.完整maven工程结构说明
  • 3.推送GitHub
  • 4.对项目增加依赖
    • 4.1.hulk-parent pom添加
      • 4.1.1.添加spring-boot-starter-parent
      • 4.1.2.添加properties,用于控制依赖的版本
      • 4.1.3.添加dependencyManagement
      • 4.1.4.dependencyManagement vs dependencies区别说明
    • 4.2.子模块添加依赖
      • 4.2.1.hulk-api模块添加依赖
      • 4.2.2.hulk-common模块
      • 4.2.3.hulk-mapper模块
      • 4.2.4.hulk-service模块
      • 4.2.5.hulk-web模块
  • 5.小结
  • 6.创建自定义maven骨架

1.使用idea快速创建maven多模块项目 1.1.首先创建父pom

File -> New -> project,选择maven-archetype-site,如下图

父pom的packaging改为pom。比如创建父pom为hulk-parent

1.2.创建dubbo api模块,

用于提供dubbo服务api

右键父pom,比如hulk-parent,选择New->module,直接next,不要勾选create from archetype,如下图

接着在parent这里不要选择hulk-parent,原因是对于dubbo api模块,是要提供jar依赖给别人使用,如果其parent是hulk-parent,那么需要把hulk-parent也要推送到仓库,别人才可以拉取到hulk-api模块,这样是不规范的,因此这里要选择none,这样只把hulk-api模块推送到仓库,别人即可下载到hulk-api依赖

1.3.创建子模块

创建common、mapper、service模块

通常项目都有common、mapper模块,创建这两个模块,parent选择hulk-parent

同样创建module不要勾选create from archetype,parent处是父pom,即hulk-parent

一个项目通用工程就是这样了,当然也可以加web、schedule、mq模块

2.完整maven工程结构说明

一个完整的项目maven结构如下

hulk-parent

​ |-hulk-api --> dubbo api模块,给别人依赖,提供服务

​ |-hulk-common --> 通用模块

​ |-hulk-mapper --> 数据库模块,放数据库实体和mapper

​ |-hulk-service --> 服务的具体实现,包含dubbo服务和业务服务。通常作为一个应用

​ |-hulk-web --> web模块,提供192.168.3.101:2375</docker.host> <docker.maven.plugin.version>1.1.0</docker.maven.plugin.version>--> <pagehelper-starter.version>1.2.10</pagehelper-starter.version> <pagehelper.version>5.1.8</pagehelper.version> <druid.version>1.1.10</druid.version> <hutool.version>4.5.7</hutool.version> <swagger2.version>2.9.2</swagger2.version> <swagger-models.version>1.6.0</swagger-models.version> <swagger-annotations.version>1.6.0</swagger-annotations.version> <mybatis-generator.version>1.3.7</mybatis-generator.version> <mybatis.version>3.4.6</mybatis.version> <mysql-connector.version>8.0.16</mysql-connector.version> <spring-data-commons.version>2.1.5.RELEASE</spring-data-commons.version> <jjwt.version>0.9.0</jjwt.version> <aliyun-oss.version>2.5.0</aliyun-oss.version> <logstash-logback.version>5.3</logstash-logback.version> <minio.version>3.0.10</minio.version> <guava.version>20.0</guava.version> <hulk-common.version>1.0-SNAPSHOT</hulk-common.version> <hulk-mapper.version>1.0-SNAPSHOT</hulk-mapper.version> </properties> 4.1.3.添加dependencyManagement

其它依赖声明也加这里

<dependencyManagement> <dependencies> <!--hulk通用模块--> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-common</artifactId> <version>${hulk-common.version}</version> </dependency> <!--hulk中MBG生成模块--> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-mbg</artifactId> <version>${hulk-mapper.version}</version> </dependency> <!--MyBatis分页插件starter--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>${pagehelper-starter.version}</version> </dependency> <!--MyBatis分页插件--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>${pagehelper.version}</version> </dependency> <!--集成druid连接池--> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>${druid.version}</version> </dependency> <!--Hutool Java工具包--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>${hutool.version}</version> </dependency> <!--Swagger-UI API文档生产工具--> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>${swagger2.version}</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>${swagger2.version}</version> </dependency> <!--解决Swagger 2.9.2版本NumberFormatException--> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-models</artifactId> <version>${swagger-models.version}</version> </dependency> <dependency> <groupId>io.swagger</groupId> <artifactId>swagger-annotations</artifactId> <version>${swagger-annotations.version}</version> </dependency> <!-- MyBatis 生成器 --> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>${mybatis-generator.version}</version> </dependency> <!-- MyBatis--> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>${mybatis.version}</version> </dependency> <!--Mysql数据库驱动--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql-connector.version}</version> </dependency> <!--SpringData工具包--> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> <version>${spring-data-commons.version}</version> </dependency> <!--JWT(Json Web Token)登录支持--> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>${jjwt.version}</version> </dependency> <!--统一Guava版本防止冲突--> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>${guava.version}</version> </dependency> </dependencies> </dependencyManagement>

父pom通常不加dependencies,如果要加,也只是加每个子模块都需要的dependencies。这里就涉及到dependencies和dependencyManagement的区别了

如何快速构建Maven多模块项目的新想法?

4.1.4.dependencyManagement vs dependencies区别说明

dependencyManagement应用场景
为了项目的正确运行,必须让所有的子模块使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。在我们项目顶层的pom文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
这样做的好处:统一管理项目的版本号,确保应用的各个项目的依赖和版本一致,才能保证测试的和发布的是相同的成果,因此,在顶层pom中定义共同的依赖关系。同时可以避免在每个使用的子项目中都声明一个版本号,这样想升级或者切换到另一个版本时,只需要在父类容器里更新,不需要任何一个子项目的修改;如果某个子项目需要另外一个版本号时,只需要在dependencies中声明一个版本号即可。子类就会使用子类声明的版本号,不继承于父类版本号。

dependencies应用场景
相对于dependencyManagement,如果在父pom文件中中通过dependencies引入jar,将默认被所有的子模块继承。
子模块如果希望有自己个性化的内容,可以在子模块中对于其中的某个属性进重新定义。比如父pom声明了spring-web模块,版本是V3.2,如果子模块想使用V3.3,那么在子模块显式指定V3.3即可。

dependencyManagement与dependencies区别
dependencyManagement里只是声明依赖,并不实现引入,因此子项目需要显式的声明需要用的依赖。如果不在子项目中声明依赖,是不会从父项目中继承下来的;只有在子项目中写了该依赖项,并且没有指定具体版本,才会从父项目中继承该项,并且version和scope都读取自父pom;另外如果子项目中指定了版本号,那么会使用子项目中指定的jar版本。

dependencies即使在子模块中不写该依赖项,那么子模块仍然会从父项目中继承该依赖项(全部继承)。

在实际的项目开发中,推荐在父pom中使用dependencyManagement对项目中使用到的依赖包进行统一的管理。

4.2.子模块添加依赖 4.2.1.hulk-api模块添加依赖

dubbo api模块只是dubbo入参、出参以及定义的dubbo接口,实际并不需要依赖什么,当然这个模块要最小依赖,尽量少的依赖。

4.2.2.hulk-common模块

通常工具类和通用类放这个模块,比如apache工具包,hutool工具包等,依赖这些第三方工具类

<dependencies> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-commons</artifactId> </dependency> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> 4.2.3.hulk-mapper模块

用于数据库交互,依赖数据库以及数据源,通常也会依赖hulk-common模块

<dependencies> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-common</artifactId> </dependency> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies> 4.2.4.hulk-service模块

用于dubbo服务和业务服务,通常要依赖hulk-common和hulk-mapper,也依赖spring aop等,依赖dubbo。同时需要打包,要增加spring-boot-maven-plugin插件,内容大概如下

<dependencies> <dependency> <groupId>org.zyj.hulk</groupId> <artifactId>hulk-mapper</artifactId> </dependency> <dependency> <groupId>com.alibaba.boot</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>0.2.1.RELEASE</version> </dependency> <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> </dependency> <dependency> <groupId>com.ctrip.framework.apollo</groupId> <artifactId>apollo-client</artifactId> <version>1.7.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> 4.2.5.hulk-web模块

用于提供http功能,依赖spring mvc,依赖hulk-service(即也就依赖了hulk-common和hulk-mapper)

5.小结

记录下使用idea快速创建maven多module,只有两个地方需要注意:

  1. 给别人提供dubbo的依赖module,不能依赖父pom,这个工作中许多项目组都未这样做,导致别人使用依赖时候,直接炸红,原因是这样创建情况下,虽然dubbo接口推送了maven,但是对方父pom没推送maven仓库导致。
  2. dependencyManagement和dependencies区别,前者用于定义统一的的版本号,是声明,并未实际依赖。后者是实际依赖。
6.创建自定义maven骨架

网上很多,随便参考。用户快速创建多模块的项目,必定创建项目再引入一系列依赖是很麻烦耗时的事情。