maven模块化项目踩坑之行

微服务实践之行


使用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

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,638评论 18 139
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,778评论 6 342
  • 前言什么是 POMQuick Overview POM 常用元素 pom.xml 完整注释 参考 0 前言 什么是...
    seyvoue阅读 12,584评论 1 36
  • 照片记录了我们走过的路,看过的风景还有我们的成长。原以为整理照片看到美景及陶醉其中的我们会很兴奋,当跟着照片去回...
    登山望朝霞阅读 551评论 2 6
  • 我九四年生人,今年二十二岁,在一生中最黄金的时段。 大学马上马上毕业的我们我们是迷茫de,是快速成长的,明天信息采...
    _迷藏阅读 232评论 0 0