Springboot+dubbo+maven构建多模块项目(一)

1 多模块项目创建
开发环境
编译器:idea
java版本:1.8
Springboot+dubbo+maven构建多模块项目(一)
1.1 父模块创建
首先我们在IDEA中创建一个spring boot工程作为父项目。
一、在界面左上角选择File->New->Project后,选择Spring Initializr(不要选择maven,maven运行不起来,报各种错误),默认使用的Java版本是1.8。

Springboot+dubbo+maven构建多模块项目(一)
Springboot+dubbo+maven构建多模块项目(一)

二、点击Next,进入下一步,可以设置项目的一些基本信息。
Springboot+dubbo+maven构建多模块项目(一)
三、点击Next,进入下一个选择dependency的界面,作用是在pom中自动添加一些依赖,在项目开始时就下载。这里我们暂时不勾选任何依赖
Springboot+dubbo+maven构建多模块项目(一)
四、点击Next,进入下一个界面,填写工程名,并选择工程所在目录。填写完成后,点击Finish,即可创建一个spring boot项目。
Springboot+dubbo+maven构建多模块项目(一)
1.2 创建子模块
在上面创建好的springboot-dubbo-parent工程名上,点击右键,选择New–>Module,进入New Module页面。
Springboot+dubbo+maven构建多模块项目(一)
该模块为dubbo服务的提供方,实现springboot-dubbo-api中定义的接口,Name为springboot-dubbo-server,后面其他的参数都可参照父模块的参数设置。
Springboot+dubbo+maven构建多模块项目(一)
Springboot+dubbo+maven构建多模块项目(一)
下面创建另一个Module,dubbo服务的调用方,Name为springboot-dubbo-client,其他参数设置参照上步。(步骤和springboot-dubbo-server步骤一样,这里就不重复了。

以上3个模块创建完成之后,整个项目的目录结构如下图所示。
我们可以删掉父模块的src目录,因为此处的父模块只做依赖管理,不需要编写代码。

Springboot+dubbo+maven构建多模块项目(一)
2 多模块项目配置
2.1 父模块pom配置
1、父模块的打包类型
多模块项目中,父模块打包类型必须是pom,同时以给出所有的子模块,其中每个module,都是另外一个maven项目。
我们的项目中目前一共有两个子模块,springboot-dubbo-server和springboot-dubbo-client。后续新增的子模块也必须加到父pom的modules中。
2、继承设置
继承是maven中很强大的一种功能,继承可以使子pom获得parent中的各项配置,对子pom进行统一的配置和依赖管理。父pom中的大多数元素都能被子pom继承,想深入了解的同学可自行搜索学习~~
maven项目之间的继承关系通过表示。这里使用的开发框架是spring boot,默认继承spring-boot-starter-parent
3、使用dependencyManagement管理依赖版本号
一般在项目最顶层的父pom中使用该元素,让所有子模块引用一个依赖而不用显式的列出版本号。maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。
4、使用properties控制依赖包的版本号,便于版本维护
在properties标签中,添加各依赖包的版本号,然后在dependency中直接引用该依赖版本号的值即可。
接下来配制springboot-dubbo-parent 的pom.xml

<?xml version="1.0" encoding="UTF-8"?>


4.0.0
com.kuiniu
springboot-dubbo-parent
0.0.1-SNAPSHOT
pom

<name>springboot-dubbo-parent</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.9.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<modules>
    <module>springboot-dubbo-api</module>
    <module>springboot-dubbo-server</module>
    <module>springboot-dubbo-client</module>
</modules>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <!-- 在properties中统一控制依赖包的版本,更清晰-->
    <dubbo.version>2.5.3</dubbo.version>
    <zk.version>3.4.5</zk.version>
    <zkclient.version>0.1</zkclient.version>
</properties>
<dependencyManagement>
    <dependencies>
        <!--<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>1.5.9.RELEASE</version>
        </dependency>
        <!--新增后续dubbo项目中所需依赖,dubbo、zk-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>${dubbo.version}</version><!--使用properties中配置的版本号-->
            <exclusions>
                <exclusion>
                    <groupId>org.springframework</groupId>
                    <artifactId>spring</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>${zk.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>org.slf4j</groupId>
                    <artifactId>slf4j-log4j12</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>log4j</groupId>
                    <artifactId>log4j</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>${zkclient.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
**2.2 子模块pom配置** 1、继承设置 子模块的parent要使用顶层的父模块. 2、依赖设置 父模块pom中使用dependencyManagement来管理的依赖,在子模块pom中就不需要再写版本号了,exclusion元素也不需要再写 **接下来配制springboot-dubbo-server的pom.xml** <?xml version="1.0" encoding="UTF-8"?> 4.0.0 com.kuiniu springboot-dubbo-server 0.0.1-SNAPSHOT jar
<name>springboot-dubbo-server</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>com.kuiniu</groupId>
    <artifactId>springboot-dubbo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<properties>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <!--新增后续dubbo项目中所需依赖,dubbo、zk。
      父模块pom中使用dependencyManagement来管理依赖版本号,子模块pom中不需要再写版本号,exclusion也不需要-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
    </dependency>
    <dependency>
        <groupId>com.kuiniu</groupId>
        <artifactId>springboot-dubbo-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>1.3.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.13</version>
    </dependency>

</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
**配制springboot-dubbo-client的pom.xml** <?xml version="1.0" encoding="UTF-8"?> 4.0.0
<groupId>com.kuiniu</groupId>
<artifactId>springboot-dubbo-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>springboot-dubbo-client</name>
<description>Demo project for Spring Boot</description>

<parent>
    <groupId>com.kuiniu</groupId>
    <artifactId>springboot-dubbo-parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<properties>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--新增后续dubbo项目中所需依赖,dubbo、zk。
         父模块pom中使用dependencyManagement来管理依赖版本号,子模块pom中不需要再写版本号,exclusion也不需要-->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>dubbo</artifactId>
    </dependency>
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
    </dependency>
    <dependency>
        <groupId>com.github.sgroschupf</groupId>
        <artifactId>zkclient</artifactId>
    </dependency>
    <dependency>
        <groupId>com.kuiniu</groupId>
        <artifactId>springboot-dubbo-api</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    <!--<dependency>
        <groupId>com.kuiniu</groupId>
        <artifactId>springboot-dubbo-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>-->
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
**3 测试** 点开右侧Maven Projects,双击父模块Lifecycle中的compile,进行代码编译,或者直接在Terminal中执行命令:mvn compile。

Springboot+dubbo+maven构建多模块项目(一)
到这里,Spring Boot多模块项目创建与配置就介绍完啦。三克油!