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的解决规则如下:

  1. 最短路径优先:即Maven会优先使用最外层、最直接引用的依赖
  2. 先声明优先:在依赖层级相同时,在pom.xml文件中靠前声明的依赖会优先被引用
  3. 手动解决

设现在有模块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的父子工程来统一管理这些公共依赖

新建一个父工程

  1. 新建一个maven工程,选择quickstart
  2. pom.xml<packaging>属性改为pom。表示用来管理子工程
  3. 在父子工程中,src目录没有任何作用,可以删去。
  4. 在根目录下新建一个子模块,选择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.通过依赖管理来选择性继承依赖(常用)

作为2级标签。然后将标签及其全部内容全部剪切进来。

这样子模块在继承父工程依赖时就可以自己选择,而不是强制继承所有

<!-- 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

  1. cd到jar包所在目录
  2. 执行命令:(替换掉相应部分)
   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
posted @ 2026-07-02 17:40  畅畅c  阅读(2)  评论(0)    收藏  举报