美文网首页
maven模块化项目踩坑之行

maven模块化项目踩坑之行

作者: 梦袋熊先生 | 来源:发表于2017-10-29 15:40 被阅读0次

    微服务实践之行


    使用maven进行项目模块拆分,遇到的一些坑,微服务框架层使用springboot。
    使用user-server为例

    一、服务分析
    . 用户模块服务包含了对用户信息的一系列操作,如登陆校验, 修改/增加用户等行为。因此涉及到了暴露给网关调用的接口层, 数据库连接层dao, 以及具体的业务逻辑层。

    二、拆分
    . 将该模块拆分为四个子模块, 分别对应的core, remote, dao, service.

    • core: 包含的有springboot启动类以及一些配置类(数据库配置或组件扫描注册等)。
    • remote: 包含的有接口和实现类,供网关进行远程调用。实现类中调用了业务层的接口。
    • dao: 包含model, 数据库操作以及mybatis的xml文件
    • service: 包含接口和实现类。具体的进行业务操作。

    三、 pom配置

    根据场景需要分为项目根配置文件, 主要作用是依赖一些公共第三方的jar包以及使用<modules>将core, remote, dao, service四个模块管理起来。

    • 根pom配置关键代码块如下:
    <groupId>cn.beardream</groupId>
    <artifactId>user-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>pom</packaging>
    <name>user-server</name>
    
    <modules>
        <module>user-server-core</module>
        <module>user-server-remote</module>
        <module>user-server-dao</module>
        <module>user-server-service</module>
    </modules>
    
    • core模块配置关键代码块如下:
    <artifactId>user-server-core</artifactId>
    <packaging>jar</packaging>
    <name>user-server-core</name>
    
    <parent>
        <groupId>cn.beardream</groupId>
        <artifactId>user-server</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    
    <dependencies>
            <!-- 需要扫描到的组件 -->
            <dependency>
                <groupId>cn.beardream</groupId>
                <artifactId>user-server-remote</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>cn.beardream</groupId>
                <artifactId>user-server-service</artifactId>
                <version>${project.version}</version>
            </dependency>
            <dependency>
                <groupId>cn.beardream</groupId>
                <artifactId>user-server-dao</artifactId>
                <version>${project.version}</version>
            </dependency>
    </dependencies>
    
    • remote模块关键配置
        <artifactId>user-server-remote</artifactId>
        <packaging>jar</packaging>
        <name>user-server-remote</name>
    
        <parent>
            <groupId>cn.beardream</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <dependencies>
            <dependency>
                <groupId>cn.beardream</groupId>
                <artifactId>user-server-service</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    
    • dao模块关键配置
        <artifactId>user-server-dao</artifactId>
        <packaging>jar</packaging>
        <name>user-server-dao</name>
        <parent>
            <groupId>cn.beardream</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
    • service模块关键配置
        <artifactId>user-server-service</artifactId>
        <packaging>jar</packaging>
        <name>user-server-service</name>
        <parent>
            <groupId>cn.beardream</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <dependencies>
            <dependency>
                <groupId>cn.beardream</groupId>
                <artifactId>user-server-dao</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    

    由maven配置可以看的出来, 四个子模块的parent都是user-server, user-server的pom配置modules包含了他们四个子模块。子模块中如果需要用到其他模块的只需要用dependency依赖进来即可。

    四、如何将多个模块打成一个可执行jar包呢?

    在前面我们构建了四个子模块以及一个父pom文件,但父pom文件的packaging其实是pom类型的,因此不能打包;正确的打包方式应该在springApplication所在项目中的pom文件加上spring-boot-maven-plugin这个插件,并且在父pom文件上进行配置。

    • springApplication启动类所在模块pom
        <build>
            <finalName>user-server-core</finalName>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>1.3.0.RELEASE</version>
                </plugin>
            </plugins>
        </build>
    
    • 父pom文件中配置
        <build>
            <plugins>
                <plugin>
                    <!-- The plugin rewrites your manifest -->
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>1.3.0.RELEASE</version>
                    <configuration><!-- 指定该Main Class为全局的唯一入口 -->
                        <mainClass>cn.beardream.userserver.UserServerApplication</mainClass>
                        <layout>ZIP</layout>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal><!--可以把依赖的包都打包到生成的Jar包中-->
                            </goals>
                            <!--可以生成不含依赖包的不可执行Jar包-->
                            <!-- configuration>
                              <classifier>exec</classifier>
                            </configuration> -->
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    

    至此

    我们的微服务模块划分打包就已经完成啦~

    ps: package选择pom和jar的不同情况:在该pom文件为一个需要被依赖的父pom文件时要选择pom的打包方式,但具体的项目要选择jar包的打包方式。

    项目打包参考了该博客:http://blog.csdn.net/message_lx/article/details/54632947

    相关文章

      网友评论

          本文标题:maven模块化项目踩坑之行

          本文链接:https://www.haomeiwen.com/subject/npeypxtx.html