maven模塊化項(xiàng)目踩坑之行

微服務(wù)實(shí)踐之行


使用maven進(jìn)行項(xiàng)目模塊拆分,遇到的一些坑,微服務(wù)框架層使用springboot。
使用user-server為例

一、服務(wù)分析
. 用戶模塊服務(wù)包含了對用戶信息的一系列操作,如登陸校驗(yàn), 修改/增加用戶等行為。因此涉及到了暴露給網(wǎng)關(guān)調(diào)用的接口層, 數(shù)據(jù)庫連接層dao, 以及具體的業(yè)務(wù)邏輯層。

二、拆分
. 將該模塊拆分為四個(gè)子模塊, 分別對應(yīng)的core, remote, dao, service.

  • core: 包含的有springboot啟動(dòng)類以及一些配置類(數(shù)據(jù)庫配置或組件掃描注冊等)。
  • remote: 包含的有接口和實(shí)現(xiàn)類,供網(wǎng)關(guān)進(jìn)行遠(yuǎn)程調(diào)用。實(shí)現(xiàn)類中調(diào)用了業(yè)務(wù)層的接口。
  • dao: 包含model, 數(shù)據(jù)庫操作以及mybatis的xml文件
  • service: 包含接口和實(shí)現(xiàn)類。具體的進(jìn)行業(yè)務(wù)操作。

三、 pom配置

根據(jù)場景需要分為項(xiàng)目根配置文件, 主要作用是依賴一些公共第三方的jar包以及使用<modules>將core, remote, dao, service四個(gè)模塊管理起來。

  • 根pom配置關(guān)鍵代碼塊如下:
<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模塊配置關(guān)鍵代碼塊如下:
<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模塊關(guān)鍵配置
    <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模塊關(guān)鍵配置
    <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模塊關(guān)鍵配置
    <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配置可以看的出來, 四個(gè)子模塊的parent都是user-server, user-server的pom配置modules包含了他們四個(gè)子模塊。子模塊中如果需要用到其他模塊的只需要用dependency依賴進(jìn)來即可。

四、如何將多個(gè)模塊打成一個(gè)可執(zhí)行jar包呢?

在前面我們構(gòu)建了四個(gè)子模塊以及一個(gè)父pom文件,但父pom文件的packaging其實(shí)是pom類型的,因此不能打包;正確的打包方式應(yīng)該在springApplication所在項(xiàng)目中的pom文件加上spring-boot-maven-plugin這個(gè)插件,并且在父pom文件上進(jìn)行配置。

  • springApplication啟動(dòng)類所在模塊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>
                        <!--可以生成不含依賴包的不可執(zhí)行Jar包-->
                        <!-- configuration>
                          <classifier>exec</classifier>
                        </configuration> -->
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

至此

我們的微服務(wù)模塊劃分打包就已經(jīng)完成啦~

ps: package選擇pom和jar的不同情況:在該pom文件為一個(gè)需要被依賴的父pom文件時(shí)要選擇pom的打包方式,但具體的項(xiàng)目要選擇jar包的打包方式。

項(xiàng)目打包參考了該博客:http://blog.csdn.net/message_lx/article/details/54632947

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,500評論 19 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 47,253評論 6 342
  • 前言什么是 POMQuick Overview POM 常用元素 pom.xml 完整注釋 參考 0 前言 什么是...
    阿父閱讀 12,749評論 1 36
  • 照片記錄了我們走過的路,看過的風(fēng)景還有我們的成長。原以為整理照片看到美景及陶醉其中的我們會(huì)很興奮,當(dāng)跟著照片去回...
    登山望朝霞閱讀 635評論 2 6
  • 我九四年生人,今年二十二歲,在一生中最黃金的時(shí)段。 大學(xué)馬上馬上畢業(yè)的我們我們是迷茫de,是快速成長的,明天信息采...
    _迷藏閱讀 304評論 0 0

友情鏈接更多精彩內(nèi)容