今天记录一下maven的基本使用-创建多模块项目, 各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
直接上步骤:
创建继承关系模块(两个模块具有父子关系) 创建父子模块 第一步:创建父模块依次点击 File -> New -> Project ->Maven ->Next
按自己需求填写如下信息,最后点击Finish完成父模块的创建。
创建后目录结构如下:
第二步:修改父模块pom在修改pom文件之前,先删掉父模块中的src目录。
然后在修改pom文件,如果只是简单能用,其实只要修改如下两个配置即可:
1、添加标签并将其改为pom。
2、添加标签配置对所有模块依赖的管理。
修改后完整pom如下:
4.0.0 com.yjh.learn pro-learn1.0-SNAPSHOT pom redis-learn pro-common 8 8 org.springframework.boot spring-boot-starter-web2.3.3.RELEASE org.springframework.boot spring-boot-starter-test2.3.3.RELEASE compile org.springframework.boot spring-boot-starter-data-redis2.3.3.RELEASE
我们在父模块中引入了三个依赖,接下来我们创建一个学习redis的子模块。
创建子模块 第一步:创建子模块选中父工程 pro-learn -> New -> Module -> Spring Initializr -> Module SDK(选择自己的jdk版本) -> Next
按自己需求填写如下信息,点击Next进入下一步。
这里可以什么都不选,点击Next进入下一步,然后,按自己需求填写信息,最后点击Finish完成子模块的创建。
创建子模块后的目录结构如下:
这里我把用不到的文件和目录(.mvn、HELP.md、mvnw、mvnw.cmd)删掉,至于这几个文件的作用是什么,自行百度,删除后如下,看着清爽多了:
第二步:父模块中添加modules管理子模块在父pom中添加如下配置:
第三步:配置子模块pomredis-learn
将redis-learn模块pom文件中parent中的坐标(groupId、artifactId、version)改为父模块的坐标,及添加依赖,具体看以下pom文件中的注释:
4.0.0 com.yjh.learn pro-learn1.0-SNAPSHOT com.yjh.learn redis-learn0.0.1-SNAPSHOT redis-learn Demo project for Spring Boot 1.8 org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-testorg.springframework.boot spring-boot-maven-plugin
此时我们查看下子模块maven的依赖包,发现版本同父模块,如下:
当然你也可以像创建父模块一样来创建子模块,这样就不用自己在父模块的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;
public class TaskIdUtil {
private static final Integer MAX_VALUE = 99999999;
private static AtomicInteger num = new AtomicInteger(0);
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;
}
}
第二步:在redis-learn引用pro-common
修改redis-learn模块中的pom文件,通过pro-common的坐标来引用pro-common模块,在redis-learn的pom中添加如下配置:
com.yjh.learn pro-common0.0.1-SNAPSHOT
这是我们刷新maven依赖可以看到pro-common已经引入我们的redis-learn模块中了,如下:
第三步:测试依赖是否可用在redis-learn模块中的测试类中添加如下测试方法:
@Test
void contextLoads() {
for (int i = 0; i < 20; i++) {
System.out.println(TaskIdUtil.getTaskId("1"));
}
}
发现可以正确引用pro-common模块的工具来并执行成功,执行结果如下:
至此,一个基本的maven管理的多模块项目就搭建完毕了。
如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞、收藏⭐️⭐️,满足一下我的虚荣心



