Spring Boot入坑-3-Maven简介

概述

  • Maven是一个自动化构建工具

  • 能够将支持Maven项目的依赖包从远程仓库拉取到本地仓库,并进行依赖管理

  • 项目中通过pom.xml来描述项目,对项目依赖进行管理与配置

  • 给项目提供编译、打包、安装、部署支持

  • IDE提供了比较紧密的支持,如IDEA

  • 在Maven项目中,会优先使用本地仓库依赖包,如果本地仓库有相应依赖包,不会去远程仓库拉取最新的依赖包

  • 国内有很多可供直接使用的Maven仓库,提供一些常用的开源依赖包的拉取,如阿里、网易等

  • 仓库搭建开源工具常用的有Nexus,一般中大型企业都会构建自己的Maven仓库

安装

  • IDEA安装后提供了默认的Maven安装,可直接使用,也可以单独安装自己需要的版本

  • 下载一个最新版本的Maven到本地(附件提供了一个文件版本的Maven)

  • 在IDEA中将项目的Maven根目录指向本地安装位置,并更改配置文件settings也指向本地

  • 同时,将Maven仓库规划到指定地址,避免重复的包每次都重新下载

  • 另外,在有些情况下,由于网络等原因,默认的Maven配置可能无法从远程仓库拉取依赖包,此时需修改Maven安装目录下conf/settings中的mirror内容

项目Maven配置

  • 在Spring Boot项目的pom.xml中,有一些很重要的配置,来支持快速构建一个Spring Boot项目

  • 熟悉并掌握这些配置是后端接口开发的重要基础

  • 这个配置的内容非常丰富,掌握常用的,需要时查询相关用法即可

pom.xml常用配置

  • group id:组织名,如com.example.demo

  • artifact id:项目唯一标识名,如spring-boot-demo

  • version:版本,如2.5.2,分别为主版本、次版本、修订版

  • packaging:打包方式,常用的是jarwar,分别表示自运行和web容器运行

  • scope:依赖库与项目的关系,默认为compile,分别表示

    • compile:编译和打包时需要此类库,默认

    • test:测试时需要此类库

    • provided:只在编译阶段需要,打包时不需要此类库

    • runtime:编译和打包时都不需要,只在运行时需要此类库

  • modelVersion:maven版本

  • build:可选,表示构建时需要的插件

【演示】

  1. 熟悉Maven配置,见附件项目springboot-demo中的pom.xml

构建Maven发布包

  • Maven提供了一系列的指令完成一个项目的编译到打包

  • 在IDEA工具中,右侧点击Maven面板,以可视化的方式使用这些指令

  • 展开的Lifecyle->package中右键构建,会在项目的target目录下构建出可执行的.jar包(如果pom.xml配置的是war,则为war包)

查找和使用第三方的依赖包

  • 工作中,经常会使用很多知名的第三方依赖包,如日志的、Redis集成的、数据访问集成的等

  • 可以直接使用第三方包官网推荐方式,也可以去相应的集中式网站获取,通常有

一个典型的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!--文档类型声明-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--Maven遵循的版本项目描述符,Maven2和Maven3都使用4.0-->
    <modelVersion>4.0.0</modelVersion>
    <!--【重要】当前项目的父依赖,表示当前项目是从spring-boot-starter-parent继承下来,并使用spring-boot-starter-parent的很多默认配置-->
    <!--通过继承,默认让项目具有了以下功能:Java版本(Java8)、源码的文件编码方式(UTF-8)、依赖管理、打包支持、动态识别资源、
    识别插件配置、识别不同的配置,如:application-dev.properties 和 application-dev.yml-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.14</version>
        <!--可配置资源查找路径,顺序为relativePath > 本地仓库 > 远程仓库,一般不配置,先从本地仓库找,再从远程仓库找
        如果是多模块项目,子模块配置../pom.xml-->
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <!--【重要】组织id-->
    <groupId>com.example.demo</groupId>
    <!--【重要】项目标识唯一id-->
    <artifactId>springboot-demo</artifactId>
    <!--【重要】版本,SNAPSHOT用于解决正式版依赖包如果本地仓库存在,不会去远程仓库拉取问题,SNAPSHOT版本不管本地仓库是否有,都会实时拉取-->
    <version>0.0.1-SNAPSHOT</version>
    <!--【重要】打包的机制,主要有jar、war、pom等,默认为jar,war用于打包部署到Web服务器,pom为分模块时父模块标识 -->
    <packaging>jar</packaging>
    <!--项目名称,用于Maven产生的文档-->
    <name>springboot-demo</name>
    <!--项目描述,用于Maven产生的文档-->
    <description>Demo project for Spring Boot</description>
    <!--自定义属性,在dependencies中使用,如${java.version},还有一些默认的内置属性和POM属性-->
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <!--【重要】定义项目的依赖列表-->
    <dependencies>
        <!--【重要】每个依赖都是一个jar包,主要包括groupId、artifactId、version-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <!--屏蔽依赖关系,比如当前依赖包依赖com.example.dmeo-api.jar的0.1版本,但项目中其他依赖包依赖的是0.2版本了,就屏蔽掉这个依赖-->
<!--            <exclusions>-->
<!--                <exclusion>-->
<!--                    <groupId>com.example</groupId>-->
<!--                    <artifactId>demo-api</artifactId>-->
<!--                        <version>0.1</version>-->
<!--                </exclusion>-->
<!--            </exclusions>-->
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.alibaba.fastjson2/fastjson2 -->
        <dependency>
            <groupId>com.alibaba.fastjson2</groupId>
            <artifactId>fastjson2</artifactId>
            <version>2.0.26</version>
        </dependency>
    </dependencies>
    <!--构建配置,与Maven中的settings.xml内容类似,主要是如果项目中需要有修改化的构建时设置-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                <!--fork :  如果没有该项配置,肯呢个devtools不会起作用,即应用不会restart   这个要手动加进去 -->
                <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <!--还可以单独配置仓库、插件等-->
</project>

另外,现在很多项目也使用gradle,配置和打包方式类似。

相关推荐
七星静香8 分钟前
laravel chunkById 分块查询 使用时的问题
java·前端·laravel
Jacob程序员9 分钟前
java导出word文件(手绘)
java·开发语言·word
ZHOUPUYU9 分钟前
IntelliJ IDEA超详细下载安装教程(附安装包)
java·ide·intellij-idea
stewie612 分钟前
在IDEA中使用Git
java·git
Elaine20239128 分钟前
06 网络编程基础
java·网络
G丶AEOM29 分钟前
分布式——BASE理论
java·分布式·八股
落落鱼201330 分钟前
tp接口 入口文件 500 错误原因
java·开发语言
想要打 Acm 的小周同学呀31 分钟前
LRU缓存算法
java·算法·缓存
镰刀出海34 分钟前
Recyclerview缓存原理
java·开发语言·缓存·recyclerview·android面试
阿伟*rui3 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel