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:打包方式,常用的是jar或war,分别表示自运行和web容器运行
scope:依赖库与项目的关系,默认为compile,分别表示
compile:编译和打包时需要此类库,默认
test:测试时需要此类库
provided:只在编译阶段需要,打包时不需要此类库
runtime:编译和打包时都不需要,只在运行时需要此类库
modelVersion:maven版本
build:可选,表示构建时需要的插件
【演示】
熟悉Maven配置,见附件项目springboot-demo中的pom.xml
构建Maven发布包
Maven提供了一系列的指令完成一个项目的编译到打包
在IDEA工具中,右侧点击Maven面板,以可视化的方式使用这些指令
展开的Lifecyle->package中右键构建,会在项目的target目录下构建出可执行的.jar包(如果pom.xml配置的是war,则为war包)
查找和使用第三方的依赖包
工作中,经常会使用很多知名的第三方依赖包,如日志的、Redis集成的、数据访问集成的等
可以直接使用第三方包官网推荐方式,也可以去相应的集中式网站获取,通常有
Maven官网:https://search.maven.org/
另外一个网站:https://mvnrepository.com/,提供了各种包及相应版本的使用方式和下载
一个典型的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,配置和打包方式类似。
Spring Boot入坑-3-Maven简介的更多相关文章
- Spring Boot 基础,理论,简介
Spring Boot 基础,理论,简介 1.SpringBoot自动装配 1.1 Spring装配方式 1.2 Spring @Enable 模块驱动 1.3 Spring 条件装配 2.自动装配正 ...
- Spring Boot踩坑之路一
Takes an opinionated view of building production-ready Spring applications. Spring Boot favors conve ...
- Spring Boot 多模块与 Maven 私有仓库
前言 系统复杂了,抽离单一职责的模块几乎是必须的:若需维护多个项目,抽离公用包上传私有仓库管理也几乎是必须的.其优点无需赘述,以下将记录操作过程. 1. 多模块拆分 在.NET 中由于其统一性,实现上 ...
- How to set spring boot active profiles with maven profiles
In the previous post you could read about separate Spring Boot builds for a local development machin ...
- spring boot 采坑
2019年2月19日19:25:42 版本 2.1.3.RELEASE 1,本地开发需要加依赖库,保存实时热更新 <dependency> <groupId>org.sprin ...
- Spring Boot 踩坑之路之 Configuration Annotation Proessor not found in classpath
1. 出现spring boot Configuration Annotation Proessor not found in classpath的提示是在用了@ConfigurationProper ...
- spring boot 项目打包到maven仓库供其它模块使用
在对spring boot项目进行打包发布的时候发现其它spring boot项目服务真正引用使用该spring boot包中的类 需对打包插件做如下修改: <build> <plu ...
- Spring boot项目分环境Maven打包,动态配置文件,动态配置项目
Spring boot Maven 项目打包 使用Maven 实现多环境 test dev prod 打包 项目的结构 在下图中可用看出,我们打包时各个环境需要分开,采用 application-环境 ...
- 一、Spring Boot系列:通过Maven创建第一个项目
1.打开idea选择创建工程 2.创建maven工程,同时选择jdk1.8 注意:不需要勾选其他选项 3.填写项目名称 4.创建好maven项目后,在pom.xml文件中导入Spring Boot需要 ...
- caoni大业 spring boot 跳坑记
IDEA环境 win10 跑得刚刚,到xp系统就戈壁 报错 Caused by: java.lang.NoSuchMethodError: javax.servlet.ServletContext.g ...
随机推荐
- Redis系列之——使用常见问题
文章目录 一 子进程开销和优化 二 fork操作 三 aof追加阻塞 一 子进程开销和优化 1 cpu 开销:rdb和aof文件生成,属于cpu密集型 优化:不做cpu绑定,不和cpu密集型的服务一起 ...
- Sunshine on my shoulders
https://music.163.com/#/song?id=1477706 Sunshine on my shoulders makes me happy照在我肩上的阳光让我欢乐Sunshine ...
- 从零用VitePress搭建博客教程(3) - VitePress页脚、标题logo、最后更新时间等相关细节配置
接上一节:从零用VitePress搭建博客教程(2) –VitePress默认首页和头部导航.左侧导航配置 五.默认主题相关细节配置 关于默认主题的标题,logo.页脚,最后更新时间等相关细节配置,我 ...
- 更改Kali Linux系统语言以及安装zenmap
更改Kali Linux系统语言以及安装zenmap 在使用kali的过程中,会遇到许多问题,其中一个就是看不懂英语,下面是如何更换语言的步骤. 更改Kali Linux系统语言 首先,打开kali, ...
- P1844 阅览室
此题现有题解较为冗长,因此前来贡献一发最短解. 首先正常的思路是直接按题意模拟.即: 枚举当前时刻 \(T\) 对于每个人,标记该时刻想要拿到的书 根据题目的要求判断冲突情况 对书进行分配 实现起来复 ...
- 深度解析BERT:从理论到Pytorch实战
本文从BERT的基本概念和架构开始,详细讲解了其预训练和微调机制,并通过Python和PyTorch代码示例展示了如何在实际应用中使用这一模型.我们探讨了BERT的核心特点,包括其强大的注意力机制和与 ...
- 词!自然语言处理之词全解和Python实战!
本文全面探讨了词在自然语言处理(NLP)中的多维角色.从词的基础概念.形态和词性,到词语处理技术如规范化.切分和词性还原,文章深入解析了每一个环节的技术细节和应用背景.特别关注了词在多语言环境和具体N ...
- JavaScript高级程序设计笔记06 集合引用类型
集合引用类型 1. Object(详见c08 p205) 适合存储,在应用程序间交换数据 创建实例: a. 显式构造函数 b. 字面量-->不会调用构造函数(代码更少.更有封装感) 函数:大量参 ...
- python之递归(斐波那契数列)与迭代
对于较大的计算来说,迭代不如递归计算速度快,并且可以说非常慢 但是迭代对于较小的运算又比递归巧妙 # 迭代方法 def slowsnail(x): am = [1, 1] if x < 0: p ...
- 【MRCTF2020】Ezpop_Revenge——PHP原生类SSRF
[MRCTF2020]Ezpop_Revenge--PHP原生类SSRF 1. 收获 CMS初审计 google.baidu hack PHP原生类反序列化 2. 看题 2.1 读源码 网页存在源码泄 ...