- 都写在一个模块里面。使的各模块之间不便于维护,并且难以复用。
- 将项目按照功能拆分成若干个子模块,方便项目的管理维护、扩展,也方便模块间的相互调用,资源共享。
分析:
拆分后的格式:
- 创建maven模块 tlias-pojo,存放实体类。
- 创建maven模块 tlias-utils,存放相关工具类。
注意:
1,我们创建新的module(模块的时候,要把我们新的模块的包名,改成和未拆分前一样的包名)
创建一个新的空工程 web-project4:
空工程jdk的配置:
配置jdk21版本:
把我们之前写好的 tlias-management。放在刚刚创建的web-project4。空工程中
打开ideal:
开始拆分:
把pojo包下的,类重新创建一个模块,拆分过去(创建新的module然后放到新模块的pojo包下)新建 tlias-pojo模块
tlias-pojo模块创建好,的样子。
然后定义 com.sde.pojo包,这个包和未拆分前项目的包路径保持一致。
把要拆分的项目,pojo包下的类赋值到刚刚创建的,新模块 tlias-pojo 的pojo包下
可以发现很多爆红的地方。
在 tlias-pojo模块下的 pom文件里面引入依赖。
org.projectlombok
lombok
1.18.30
org.springframework.boot
spring-boot-starter
3.2.0
在此查看实体类,发现不报错了。
删除要拆分模块的pojo包
项目报错:
com.sde
tlias-pojo
1.0-SNAPSHOT
现在就不报错了
把要拆分工程的utils包,也拆分开。
创建新的tlias-utils新模块
重复上面的步骤,创建com.sde.utils包,把要拆分工程utis包下的类,复制到tlias-utils模块下的utils包。
引入依赖:
引入好依赖,就不报错了。
然后,把父工程中的com.sde.utils包删除,引用tilas-utils模块下的utils包
引入依赖。
现在就不报错了。
启动项目测试:
- 分模块开发需要先针对模块功能进行设计,再进行编码。不会先将工程开发完毕,然后进行拆分
- 因为这次我们是为了演示拆分,后面写项目肯定是先设计好,才写代码的。
继承描述的是两个工程间的关系,与java中的继承相似,子工程可以继承父工程中的配置信息,常见于依赖关系的继承。
简化依赖配置、统一管理依赖
…
- jar:普通模块打包,springboot项目基本都是jar包(内嵌tomcat运行)
- war:普通web程序打包,需要部署在外部的tomcat服务器中运行
- pom:父工程或聚合工程,该模块不写代码,仅进行依赖管理
①. 创建maven模块tlias-parent,该工程为父工程,设置打包方式pom(默认jar)。②. 在子工程的pom.xml文件中,配置继承关系。
③. 在父工程中配置各个工程共有的依赖(子工程会自动继承父工程的依赖)。
1,新建tlias-parent模块作为父工程,把父工程的打包方式设置为pom:
父工程添加spring boot的父依赖。
其他三个子工程,tlias-utils和tlias-pojo和tlias-mangement继承父工程(tlias-parent)
在tlias-pojo引入父工程依赖。
引入后:
在tlias-utils模块中,引入父工程依赖。
在tlias-management子工程中,引入tilas-parent依赖。
把,子工程中共有的依赖,提取到父工程,然后删除,子工程中共有的依赖。
先删了 tlias-pojo里面的。
删除tlias-utils子工程里面的。
删除tlias-management子工程里面的依赖。
由于我们的三个子工程依赖了,父工程tlias-parent。所以我们在右侧的maven中,看看三个子工程中是否有,父工程中的依赖。
在maven中,可以在父工程的pom文件中通过
来统一管理依赖版本。
注意:子工程引入依赖时,无需指定
版本号,父工程统一管理。变更依赖版本,只需在父工程中统一变更。
- 1,在父工程引入dependcyManagement标签,进行版本管理,里面填写我要进行集中依赖。
- 2,父工程里面的properties标签中,定义需要进行版本管理的依赖。里面填写的是我定义此依赖的版本号。
- 在dependcyManagement标签中,替换掉版本号(用properties标签中定义的版本号)
- 在dependencis标签中,引入需要的依赖,版本号,引用定义在properties标签中的。
代码:
21
21
UTF-8
3.2.0
1.18.30
0.9.0
3.15.1
2.3.1
1.1.1
2.3.3
使用dependcyManagement:
代码:
io.jsonwebtoken
jjwt
${jwt.version}
com.aliyun.oss
aliyun-sdk-oss
${aliyun.sdk.oos.version}
javax.xml.bind
jaxb-api
${jaxb.api.version}
javax.activation
activation
${activation.version}
org.glassfish.jaxb
jaxb-runtime
${javaxb.runtime.version}
在父工程 dependcies标签中,引入需要传递的依赖。
org.projectlombok
lombok
${lombok.version}
org.springframework.boot
spring-boot-starter
${springboot.version}
总体预览:
父工程pom的整体代码:
4.0.0
org.springframework.boot
spring-boot-starter-parent
3.1.6
com.sde
tlias-parent
1.0-SNAPSHOT
pom
21
21
UTF-8
3.2.0
1.18.30
0.9.0
3.15.1
2.3.1
1.1.1
2.3.3
org.projectlombok
lombok
${lombok.version}
org.springframework.boot
spring-boot-starter
${springboot.version}
io.jsonwebtoken
jjwt
${jwt.version}
com.aliyun.oss
aliyun-sdk-oss
${aliyun.sdk.oos.version}
javax.xml.bind
jaxb-api
${jaxb.api.version}
javax.activation
activation
${activation.version}
org.glassfish.jaxb
jaxb-runtime
${javaxb.runtime.version}
把子工程的依赖版本号去掉:
测试:
我就以jwt令牌为例,测试。改变版本号,子工程里面依赖的版本号是否会变化。
现在把jwt令牌改成0.9.1测试看效果:
可以发现所有的jwt令牌,版本全都变成0.9.1
我在把jwt令牌,的版本改成 0.9.0 看看其他子工程是否有变化。
启动测试:
是直接依赖,在父工程配置了依赖,子工程会直接继承下来。 是统一管理依赖版本,不会直接依赖,还需要在子工程中引入所需依赖(无需指定版本)
创建tlias-parent父工程:
由于父工程,只存在pom文件即可。把其他的src目录删掉即可。
加入我们要打包,tlias-management此模块, 但是我们发现每次打包packing都会报错,原因是我们在此pom文件中,引用了tlias-pojo模块,tlias-utils模块,这些文件。在我们的本地仓库都没有,所有就报错了。解决办法还需要先把引用到的模块先install,安装到本地仓库。
1,禁用单元测试:
2,在tlias-management工程中点击打包(packing)。
可以发现,无法正常打包,我们需要把tlias-pojo和tlias-utils先install安装到本地才可以。
先安装tlias-pojo模块。
看看我们本地的maven仓库有没有,多的tlias-pojo包。
我们在测试tlias-management的打包。
可以看到还是打包失败了。
tlias-utils模块进行install安装。
把我们的父工程tlias-parent也安装到本地:
在我本地的maven仓库查看:
打包成功了
将多个模块组织成一个整体,同时进行项目的构建。
不具有业务功能的“空”工程(有且仅有一个pom文件)
就是父工程里面之后一个pom.xml配置文件
快速构建项目(无需根据依赖关系手动构建,直接在聚合工程上构建即可)
可以发现,我们使用这种继承各个模块 ,要是想打包显得很麻烦,所以我们需要使用聚合工程。
maven中可以通过
设置当前聚合工程所包含的子模块名称。 这是在父工程里面添加的。
代码:
../tilas-management
../tlias-pojo
../tlias-utils
效果:
我们在继承的时候,交父工程,在聚合的时候交聚合工程。
注意:
聚合工程中所包含的模块,在构建时,会自动根据模块间的依赖关系设置构建顺序,与聚合工程中模块的配置书写位置无关。
现在我们把我们本地的maven仓库,刚刚安装(install)好的,那三个文件删除。在对tlias-management进行打包。
删除后:
前面已经看到,聚合之后,其他三个子工程已经归属到,tlias-paretn工程下了,所以我们点击此模块的package:
点击打包:
在idea查看效果:
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,用来代理位于外部的中央仓库,用于解决团队内部的资源共享与资源同步问题
- 本地仓库
- 私服
- 中央仓库
- RELEASE(发行版本):功能趋于稳定、当前更新停止,可以用于发行的版本,存储在私服中的RELEASE仓库中。
- SNAPSHOT(快照版本):功能不稳定、尚处于开发中的版本,即快照版本,存储在私服的SNAPSHOT仓库中
- 1,设置私服的访问用户名/密码。maven中conf文件夹下的(settings.xml中的servers中配置)。
- 2,在 mirrors 中只配置我们自己私服的连接地址(如果之前配置过阿里云,需要直接替换掉)。
- 3,需要在 profiles 中,增加如下配置,来指定snapshot快照版本的依赖,依然允许使用。
- 4,如果要把项目上传到自己的私服,需要在pom.xml文件中增加如下配置,来配置项目发布的地址(也就是私服的地址)
1,在setting.xml配置文件中配置:
maven-releases
admin
admin
maven-snapshots
admin
admin
2,在maven的settings.xml文件中的,mirrors标签中配置。
maven-public
*
http://localhost:8081/repository/maven-public/
3,在maven的settings.cml配置文件中的profiles标签里面,指定快照版本依赖。
allow-snapshots
true
maven-public
http://localhost:8081/repository/maven-public/
true
true
回到idea重新加载一下:
在父工程的pom.xml文件中配置:
maven-releases
http://localhost:8081/repository/maven-releases/
maven-snapshots
http://localhost:8081/repository/maven-snapshots/
在我们的maven中,通过deploy生命周期(发布即可),跳过单元测试。
点击:tlias-parent父工程的deploy,进行上传:
上传成功后,在我们自己的私服查看。
进入到快照版本后,就能看到了。
本地maven仓库也能看到:
我们在本地maven仓库删掉,这三个tilas-开头的文件,看看私服会变化吗?
在浏览器刷新一下:maven-snapshots快照版本
查看:maven-public:
刚刚我们上传的,为啥上传到了 maven-snapshots(快照版了呢)
查看tlias-parent的pom文件可知
- 我们默认的版本就是,SNAPSHOT(快照版)
- 我们要想上传到发行版,把这些版本后缀改成 RELEASE(发行版)
改成发行版,在测试一次。
要把父子工程里面的所有,版本从snapshot(快照版),改成release(发行版)
修改tlias-parent模块的版本:
修改tlias-mangement的发行版本:
我们发现,tlias-management工程下,引用了,tlias-pojo和tlias-utils两个模块。
修改:tlias-pojo模块
修改tlias-utils模块:
在回过头来看tlias-management工程引入的tlias-pojo和tlias-utils是否报错:
在父工程下,点解 deploy开始上传。这次是上传到maven-release(发行版)
上传成功后,刷新浏览器地址栏查看。
查看我们maven的本地仓库:
Nexus是一个用于管理和分发软件包的开源仓库管理器。它提供了一个集中化的存储库,可以用来存储和共享各种类型的软件包,包括Java库、Docker镜像、Maven构建等。
1,先解压,nexus压缩包:
3,启动时间可以会很长,
4,在浏览器地址栏,输入 nexus的访问地址:http://localhost:8081
登录测试:
我先输入 用户:admin 密码:111111 (进行错误测试)
在输入正确的账号和密码进行测试:
查看登录之后的效果:
查看控制台:
上传完成后,记得要把我们maven的settings.xml配置文件里面的东西删掉或者注释掉
1,添加在 servers标签里的 配置私服的个人凭证
2,配置在mirrors里面我们私服的连接地址(记得把阿里云私服打开)
3,配置在profiles里面的指定快照版本的依赖
4,还有我刚刚演示的tlias-parent里面的pom文件(上传到我们自己私服的)
1,注释servers标签里面的:
2,注释mirrors标签里的:
注释掉,profiles:
然后开idea,重新加载。
在tlias-parent的pom文件里面,注释。
刷新maven,重启项目。