美文网首页
记一次maven使用

记一次maven使用

作者: 得鹿梦为鱼 | 来源:发表于2019-07-06 16:36 被阅读0次

    背景

    有一个银行接口适配器,需要不同银行实现对应接口


    图0 定义的适配器接口

    当各自银行实现了该适配器定义的接口,转换器 就可以根据 bankCode ,获取对应的适配器实现类,最后调用其获取交易信息的接口

    开始

    有两种方案:

    方案一

    定义一个普通工程,普通工程里定义两个maven子模块,一个模块中再添加子模块(适配器的实现类),另一个模块则是调用子模块数据的转换器

    这种方法需要将适配器实现模块打成jar,并上传到maven,才能被转换器依赖,不方便使用

    方案二:
    定义一个maven工程,同样定义两个子模块,但由于是maven工程,因此他们之间可以直接进行依赖

    接下来就主要讲一下,怎么配置这个工程
    注:转换器是一个Spring-boot工程

    创建maven工程

    图1 创建maven工程
    图2 创建maven工程 图3 bank工程

    创建maven子模块

    banks (适配器实现类模块)

    图5 banks

    exchange(转换器)

    同图5


    图6 banks + exchange 工程结构

    删掉没用的 src 目录

    引入适配器jar

    要引入的依赖就是 图0 所定义的接口

    图7 引入适配器jar

    在banks模块下新建 icbc、bbc子模块

    图8 新建icbc、bbc子模块

    删掉banks下没有使用的src目录

    分别在 icbd与bbc模块实现adapter

    图9 实现adapter接口

    将适配器实现类添加spring管理

    图10 加入Spring 管理

    在适配器实现类上加入 @Component 注解

    转换器 获取adapter的bean对象(Spring-boot工程)

    新建Spring Context 工具类

    图11 SpringContextUtil

    通过 SpringContextUtil 获取Adapter类型的beans!

    图12 获取Adapters相关的beans

    新建controller,然后进行接口调用

    图13 调用结果

    我们发现,没有任何返回数据

    为什么?

    猜想:是不是banks下的子模块,并没有被打入exchange模块中,所以在exchange模块中找不到适配器的实现类

    答案的确就是这样

    接下来的目标就是将 banks下的模块数据打入 exchange 中进行调用

    配置pom,让exchange模块可以调用banks模块的数据

    方法一

    exchange依赖banks下的各子模块


    图14 依赖banks的子模块 图15 调用结果

    现在,通过exchange已经可以成功拿到各银行适配器的信息了

    通过bankCode调用适配器,从而获取交易信息

    图16 调用交易信息的接口

    调用结果

    图17 交易信息调用结果

    优化

    虽然现在可以实现调用,但是,却不是很方便
    入图 14 那样,我新添加一个银行的模块,就得在exchange中添加一个引用,显的很累赘
    exchange 应该只 依赖一个总的banks的引用即可,这种依赖维护,应交由banks内部去处理

    banks 模块新建一个子模块

    图18 新建 bank-adapters

    新建了一个 bank-adapters 模块,其余子模块的依赖在这里完成
    exchange只需要依赖 bank-adapters即可


    图19 exchange通过bank-adapters依赖适配器的实现

    这样做,可以实现exchange对banks的解耦,维护起来会更方便

    小提示

    关于maven deploy
    如果某个模块不想被deploy到maven仓库,可以通过pom进行配置

        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                    <configuration>
                        <skip>true</skip>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    

    pom之间有继承关系,如果父被跳过,那么子也一样
    所以:只是想某个或某几个子跳过,需一个一个配置,且父不能跳过才行

    相关文章

      网友评论

          本文标题:记一次maven使用

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