SpringBoot-Maven
Maven 生命周期阶段简要说明
在IDEA中创建一个Maven项目后,在右侧工具栏中选中Maven>生命周期可以看到这些功能。双击即可一键执行
1. clean
清理项目,删除 target/ 目录(编译输出与临时文件)。
2. validate
验证项目结构是否正确、依赖是否完整(检查是否能继续构建)。
3. compile
编译主程序代码(src/main/java),生成 .class 文件。
4. test
编译并执行测试代码(src/test/java),不会打包。
5. package
将编译结果打成包(例如 .jar、.war)。
6. verify
运行额外检查(如集成测试后的验证),确保包质量合格。
7. install
将打好的包安装进 本地仓库(~/.m2/repository),给本机其他项目使用。
8. site
生成项目站点文档(包括报告、测试报告等)。
9. deploy
将最终构件上传到 远程仓库(通常公司 Nexus/Artifactory),发布给别人使用。
Maven的结构说明
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>组织名</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
<scope>应用范围</scope>
</dependency>
其中scope属性有六个值,compile为默认值,通常可省略
| scope | 编译可用 | 测试可用 | 运行可用 | 打包进 JAR/WAR? | 场景 |
|---|---|---|---|---|---|
| compile | ✔ | ✔ | ✔ | ✔ | 默认依赖 |
| provided | ✔ | ✔ | ✘ | ✘ | 外部容器提供的库(如 servlet-api) |
| runtime | ✘ | ✔ | ✔ | ✔ | 运行时依赖(JDBC 驱动等) |
| test | ✘ | ✔ | ✘ | ✘ | JUnit 等测试库,最终不会被打包进Jar包,其定位的依赖也只能在test目录中使用 |
| system | ✔ | ✔ | ✘ | ✘ | 手动指定 JAR,本地依赖 |
| import | ✘ | ✘ | ✘ | ✘ | 引入 BOM 进行依赖版本管理 |
注:应尽量避免
system,因为会导致项目可移植性变差
注:若选择system属性,则需要提供一个本地目录,代码如下:
<dependency>
<groupId>组织名</groupId>
<artifactId>项目名</artifactId>
<version>版本号</version>
<scope>system</scope>
<systemPath>${basedir}/lib/你的Jar包路径</systemPath>
</dependency>
依赖冲突
你使用的直接依赖可能会与间接依赖出现引用同一个包的不同版本(即版本冲突)的情况
注:依赖冲突情况IDEA会有显示,但是有一定问题,要关了重启才能刷新,不太聪明
Maven的解决规则如下:
- 最短路径优先:即Maven会优先使用最外层、最直接引用的依赖
- 先声明优先:在依赖层级相同时,在
pom.xml文件中靠前声明的依赖会优先被引用 - 手动解决
设现在有模块A,引用了模块B与模块C。模块B与模块C安装了spring-jdbc的不同版本。想要引用后定义的模块C的版本,排除B的版本。
手动解决:在上级pom文件中排除那个你不想引用的依赖
<!-- child-a:pom.xml -->
<dependency>
<groupId>top.publicnote</groupId>
<artifactId>child-b</artifactId>
<version>1.0-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</exclusion>
</exclusions>
</dependency>
就在引用模块B的地方添加标签来排除模块B的某个依赖
<exclusions>
<exclusion>
<!-- 其内容为想要排除的包名和groupid,不需要版本号,把该Jar包的所以版本都排除掉 -->
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
</exclusion>
</exclusions>
手动解决:在有冲突依赖的pom文件中,标明该依赖是可选的
<!-- child-b:pom.xml -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.2.12</version>
<optional>true</optional>
</dependency>
打包方式
新建一个maven工程,pom.xml文件下的<packaging>属性用来控制打包方式
- jar:大多数Java工程所使用的方式
- war:打包web项目时所使用的方式
- pom:用于父子工程,不会生成任何的Jar包或war包,而是用来管理子工程的
父子工程
在一个项目中可以会有多个模块,他们会大量使用一些共同的依赖。面对这种情况就可以通过Maven的父子工程来统一管理这些公共依赖
新建一个父工程
- 新建一个maven工程,选择
quickstart - 将
pom.xml的<packaging>属性改为pom。表示用来管理子工程 - 在父子工程中,
src目录没有任何作用,可以删去。 - 在根目录下新建一个子模块,选择
quickstart。可以创建多个子模块。其pom.xml文件中的<parent>属性表示继承自父工程。
这时,父工程的
pom.xml文件中也会多出<modules>属性,其内容是该父工程管理的子模块。这些模块也被成为聚合,父工程通过聚合的方式来管理多个模块
父子工程的继承关系
1.生命周期操作继承
选择父工程的生命周期操作,同时也会对子模块生效
2.无条件依赖继承(很少用,因为耦合度太高,无论子模块是否需要都会继承)
在父工程中定义的依赖,同时也会被传递到子模块中。无论父工程的依赖范围是否为compile
即用
作为2级标签来管理的依赖
<project>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>6.2.12</version>
<optional>true</optional>
</dependency>
</dependencies>
</project>
3.通过依赖管理来选择性继承依赖(常用)
将
这样子模块在继承父工程依赖时就可以自己选择,而不是强制继承所有
<!-- parent:pom.xml -->
<project>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
子模块继承依赖(此时可以不指定版本号,因为继承自父工程的依赖版本)
<!-- child-a:pom.xml -->
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
PS:可以点击在
pom.xml文件左上角的Maven图标来快速的在父工程与子模块之间进行切换
标签定义公共属性
例:定义spring的版本号
spring有很多模块,它们的版本号也都是一样的
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>6.1.11</spring.version>
</properties>
通过${标签名}引用定义的版本号
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
从Jar包安装到Maven
- cd到jar包所在目录
- 执行命令:(替换掉相应部分)
mvn install:install-file -Dfile=D:\Code\javaProject\Dependence\tabr-auth-common-2023.0.1.jar -DgroupId=com.tabr -DartifactId=tabr-auth-common -Dversion=2023.0.1 -Dpackaging=jar

浙公网安备 33010602011771号