今天记录一下maven的基本使用-创建多模块项目, 各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!
直接上步骤:
依次点击 File -> New -> Project ->Maven ->Next


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

创建后目录结构如下:

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

然后在修改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
我们在父模块中引入了三个依赖,接下来我们创建一个学习redis的子模块。
选中父工程 pro-learn -> New -> Module -> Spring Initializr -> Module SDK(选择自己的jdk版本) -> Next


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

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


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

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

在父pom中添加如下配置:
redis-learn
将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
此时我们查看下子模块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;
/**
* @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;
}
}
修改redis-learn模块中的pom文件,通过pro-common的坐标来引用pro-common模块,在redis-learn的pom中添加如下配置:
com.yjh.learn
pro-common
0.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管理的多模块项目就搭建完毕了。
如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏