• 使用idea创建多模块Maven项目(模块间的继承与依赖)


    今天记录一下maven的基本使用-创建多模块项目, 各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!

    直接上步骤:

    创建继承关系模块(两个模块具有父子关系)

    创建父子模块

    第一步:创建父模块

    依次点击 File -> New -> Project ->Maven ->Next

    img

    img

    按自己需求填写如下信息,最后点击Finish完成父模块的创建。

    img

    创建后目录结构如下:

    img

    第二步:修改父模块pom

    在修改pom文件之前,先删掉父模块中的src目录。

    img

    然后在修改pom文件,如果只是简单能用,其实只要修改如下两个配置即可:

    1、添加标签并将其改为pom。

    2、添加标签配置对所有模块依赖的管理。

    修改后完整pom如下:

    
    
        4.0.0
    
        com.yjh.learn
        pro-learn
        1.0-SNAPSHOT
    
        
        pom
    
        
        
            redis-learn
            pro-common
        
    
        
            8
            8
        
    
        
        
            
                
                
                    org.springframework.boot
                    spring-boot-starter-web
                    2.3.3.RELEASE
                
                
                    org.springframework.boot
                    spring-boot-starter-test
                    2.3.3.RELEASE
                    compile
                
                
                
                    org.springframework.boot
                    spring-boot-starter-data-redis
                    2.3.3.RELEASE
                
            
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    我们在父模块中引入了三个依赖,接下来我们创建一个学习redis的子模块。

    创建子模块

    第一步:创建子模块

    选中父工程 pro-learn -> New -> Module -> Spring Initializr -> Module SDK(选择自己的jdk版本) -> Next

    img

    img

    按自己需求填写如下信息,点击Next进入下一步。

    img

    这里可以什么都不选,点击Next进入下一步,然后,按自己需求填写信息,最后点击Finish完成子模块的创建。

    img

    img

    创建子模块后的目录结构如下:

    img

    这里我把用不到的文件和目录(.mvn、HELP.md、mvnw、mvnw.cmd)删掉,至于这几个文件的作用是什么,自行百度,删除后如下,看着清爽多了:

    img

    第二步:父模块中添加modules管理子模块

    在父pom中添加如下配置:

    
        redis-learn
    
    
    • 1
    • 2
    • 3

    第三步:配置子模块pom

    将redis-learn模块pom文件中parent中的坐标(groupId、artifactId、version)改为父模块的坐标,及添加依赖,具体看以下pom文件中的注释:

    
    
        4.0.0
        
        
            
            com.yjh.learn
            pro-learn
            1.0-SNAPSHOT
        
    
        
        
        com.yjh.learn
        redis-learn
        0.0.1-SNAPSHOT
    
        redis-learn
        Demo project for Spring Boot
        
            1.8
        
    
        
        
        
        
            
                org.springframework.boot
                spring-boot-starter-web
            
    
            
                org.springframework.boot
                spring-boot-starter-test
            
        
    
        
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                
            
        
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49

    此时我们查看下子模块maven的依赖包,发现版本同父模块,如下:

    img

    当然你也可以像创建父模块一样来创建子模块,这样就不用自己在父模块的modules中自己添加配置,会自动添加,但是响应的src目录下也没有SpringBoot的启动类及resources文件夹,根据自己习惯来就行。

    创建依赖关系模块(一个模块引用另一个模块)

    在我们开发中,是不是经常把一些公用的方法,比如你的util工具类,常量类等放到一个单独的包中,比如放到common包中,如果分多模块,就可以把这些公共方法单独放到一个模块中。

    创建子模块

    第一步:创建子模块

    像上面创建redis-learn模块一样,创建一个子模块pro-common用来存放公共类。

    如下,我们在pro-common模块中添加了一个TaskIdUtil的工具来,这个类是我项目中用来按客户id按天生成自增序列号的,格式为 yyMMdd + 4位账号序列号 + 8位自增,当达到最大值999999999时从00000001开始自增,TaskIdUtil类代码如下:

    package com.yjh.learn.procommon.utils;
    
    
    import com.yjh.learn.procommon.cache.CacheCurrentDate;
    
    import java.text.NumberFormat;
    import java.util.concurrent.atomic.AtomicInteger;
    
    /**
     * @author yjh
     */
    public class TaskIdUtil {
    
        private static final Integer MAX_VALUE = 99999999;
    
        private static AtomicInteger num = new AtomicInteger(0);
    
        /**
         * yyMMdd + 4位账号序列号 + 8位自增
         *
         * @param accountId 账号id
         * @return
         */
        public static String getTaskId(String accountId) {
            StringBuffer buffer = new StringBuffer();
            String nowDateStr = CacheCurrentDate.INS.nowDateStr();
            String accSeqnceNo = accFormat(accountId);
            String sequenceNo = getSequenceNo();
            return buffer.append(nowDateStr).append(accSeqnceNo).append(sequenceNo).toString();
        }
    
        private static String getSequenceNo() {
            int initNum = num.get();
            if (initNum == MAX_VALUE) {
                num = new AtomicInteger(1);
                return numFormat(1);
            }
            int result = num.incrementAndGet();
            return numFormat(result);
        }
    
        private static String numFormat(int number) {
            NumberFormat format = NumberFormat.getInstance();
            format.setGroupingUsed(false);
            format.setMaximumIntegerDigits(8);
            format.setMinimumIntegerDigits(8);
            String result = format.format(number);
            return result;
        }
    
        private static String accFormat(String accountId) {
            NumberFormat format = NumberFormat.getInstance();
            format.setGroupingUsed(false);
            format.setMaximumIntegerDigits(4);
            format.setMinimumIntegerDigits(4);
            String result = format.format(Integer.parseInt(accountId));
            return result;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    第二步:在redis-learn引用pro-common

    修改redis-learn模块中的pom文件,通过pro-common的坐标来引用pro-common模块,在redis-learn的pom中添加如下配置:

    
        com.yjh.learn
        pro-common
        0.0.1-SNAPSHOT
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    这是我们刷新maven依赖可以看到pro-common已经引入我们的redis-learn模块中了,如下:

    img

    第三步:测试依赖是否可用

    在redis-learn模块中的测试类中添加如下测试方法:

    @Test
    void contextLoads() {
        for (int i = 0; i < 20; i++) {
            System.out.println(TaskIdUtil.getTaskId("1"));
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    发现可以正确引用pro-common模块的工具来并执行成功,执行结果如下:

    img

    至此,一个基本的maven管理的多模块项目就搭建完毕了。

    如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏

  • 相关阅读:
    流量卡名字不符,为什么流量卡名字和说明书上的不一样吗?
    Spring Cloud Gateway一次请求调用源码解析
    iexcel-excel 读取和写入,解决 excel OOM 问题
    Python学习笔记
    m基于simulink的WCDMA通信链路仿真
    【Java】Java中的引用类型
    机器学习基础(五)——线性回归/岭回归/lasso回归
    k8s认证
    educoder_python:4-1-逻辑控制(if)灯光开关,解一元二次方程,输入分数输出等级
    Ubuntu18.04 安装完成后的开发配置
  • 原文地址:https://blog.csdn.net/H900302/article/details/126163623