😀😀😀创作不易,各位看官点赞收藏.
Maven:是Apache组织维护的一款专门为Java项目提供构建和依赖管理的工具。


下载地址:https://maven.apache.org/download.cgi

解压文件并配置Maven:



<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
<mirrorOf>centralmirrorOf>
mirror>
<profile>
<id>jdk-1.8id>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<maven.compiler.source>1.8maven.compiler.source>
<maven.compiler.target>1.8maven.compiler.target>
<maven.compiler.compilerVersion>1.8maven.compiler.compilerVersion>
properties>
profile>
配置系统Maven 环境变量:
java -version命令


mvn -v 命令
坐标:由三部分组成groupId、artifactId、version,它用于去定位中央仓库中jar 包的位置。
org.spring。
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.24version>
dependency>
坐标与Jar 存放本地仓库路径映射:从坐标能知道jar 包存放在本地仓库的位置。
例如:上面坐标映射为:Maven仓库位置/org/projectlombok/lombok/1.18.24/lombok.jar
初始化maven项目:
mvn archetype:generate


直接回车,然后设置对应项目的groupId、artifactId、version。


解读 pom.xml 文件:pom.xml是maven工程的核心配置文件,
Project Object Module项目模型。
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0modelVersion>
<groupId>com.jxgroupId>
<artifactId>maven-testartifactId>
<version>1.0-SNAPSHOTversion>
<packaging>jarpackaging>
<properties>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>3.8.1version>
<scope>testscope>
dependency>
dependencies>
project>
Maven 项目目录规则:这是Maven 约定的目录规则,不能改变(约定大于配置)。使用约定的目录结构,这样可以实现项目的自动化,自动构建、编译、打包等操作,因为知道每个目录下存放的是什么文件。

Maven 都会去依赖一个超级POM,它里面定义了一个项目结构,这样其它的POM也需要按照这个结构去定义。另外在构建时会生成一个target文件,去存放构建生成的文件。
常用命令:
运行 Maven 中构建相关命令时,必须进入到 pom.xm 所在目录,不然后会报错。
mvn clean:删除 target 目录。mvn compile:编译主程序,把编译结果输出到 target/classes 下。mvn test-compile:编译测试程序,把编译结果输出到 target/classes 下。mvn test:执行测试程序并将测试报告存放到 target/surefire-reports 下。mvn package:打包,将程序打包成指定程序,jar 或 war 包,存放在target 下,打包成的名称是 artifactId-version.jar 。mvn install:安装,将打包好的jar 包存放到本地仓库,存放路劲就是按在gav 规定的路径。mvn clean install -Dmaven.test.skip=true:上面的命令可以一次执行多个,常见打包命令会去跳过 test 阶段。依赖方式:

依赖范围:在使用 gav 坐标时,可以指定一个
标签去指定 jar 包的使用范围以及使用时间。
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.13.2version>
<scope>testscope>
dependency>
| 范围 | main目录 | test目录 | 开发过程 | 部署服务器 |
|---|---|---|---|---|
| compile(默认值) | 有效 | 有效 | 有效 | 有效 |
| test | 无效 | 有效 | 有效 | 无效 |
| provided | 有效 | 有效 | 有效 | 无效 |
依赖传递:在一个项目中 A 依赖 B,然后 B 依赖 C,那么 A 可以直接使用 C,相当于是C传递给B,然后B传递给A。
mvn dependency:tree用于查看依赖的树形结构。如果在没有使用继承管理模式,从一个模块去依赖另一个模块需要将另一个模块进行 install 安装到本地仓库才能使用。

在 jar 包的使用范围是 test、provided 时,该依赖不能进行传递,因为 test 只在测试范围有效,test、provided 都不会打包。
依赖排除:当引入的两个依赖中,存在相同依赖并且相同依赖的版本号不同就会出现依赖冲突,这就需要排除冲突的依赖。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.6.8version>
<exclusions>
<exclusion>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starterartifactId>
exclusion>
exclusions>
dependency>
Maven 继承:模块 B 继承 模块 A ,A 作为父工程,B作为子工程,本质上是B继承了A的 pom.xml 配置。作用:就是在父工程中实现项目的统一依赖管理,具体就是管理依赖的版本信息。
pom 方式。<groupId>com.jxgroupId>
<artifactId>maven-parentartifactId>
<packaging>pompackaging>
<version>1.0-SNAPSHOTversion>
<parent>
<artifactId>maven-parentartifactId>
<groupId>com.jxgroupId>
<version>1.0-SNAPSHOTversion>
parent>
<modelVersion>4.0.0modelVersion>
<artifactId>module-01artifactId>
当创建子工程后,会在父工程的 pom 文件下发现 modules 标签。
<modules>
<module>module-01module>
modules>
父工程管理依赖版本:将项目中所用到的依赖在父工程中进行版本管理,然后所有子工程继承的父工程的依赖版本全都是一致的。
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>2.6.8version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-redisartifactId>
<version>1.3.6.RELEASEversion>
dependency>
dependencies>
dependencyManagement>
子工程引入父工程依赖:
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
dependencies>
父工程自定义属性变量:
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<spring.boot.version>2.5.6spring.boot.version>
properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
<version>${spring.boot.version}version>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-redisartifactId>
<version>1.3.6.RELEASEversion>
dependency>
dependencies>
dependencyManagement>
IDEA配置Maven:需要在后面的 Override 打钩才能进行配置。

在 Maven 中为了自动化构建项目,设定了三个生命周期,每个生命周期中的每个环节都是构建过程中的一个操作。==每个生命周期他有好多个环节,不管从生命周期的哪个环节下命令,他都是从生命周期的最开始环节开始执行,直到执行到下命令的环节。==Maven中有三个主要的生命周期Clean、Site、Default。


spring-boot-maven-plugin打包插件:在没有使用这个 Maven 打包插件时,会打成一个普通的 jar 包,没有打包依赖也没有指定main-class,所以无法直接运行。使用 Maven 打包插件可以将 Spring Boot 项目打包成一个可以运行的 jar 包,它可以自动打包所依赖的第三方 jar 包和内置的 Tomcat 中的 jar 包。
<build>
<finalName>${project.artifactId}finalName>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>2.0.1.RELEASEversion>
plugin>
plugins>
build>
注意:mvn clean package spring-boot:repackage打包命令,spring-boot:repackage命令必须在前两个命令前面,先要打成一个普通的 jar 包,不然后报错Source file must not be null。
设置默认执行的goal:每次执行都要去执行三个命令,可以在 execution 标签内指定默认执行的 goal。
<build>
<finalName>${project.artifactId}finalName>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>2.6.8version>
<executions>
<execution>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
build>
注意:采用如上配置时,只需要运行mvn的package阶段即可,由于repackage目标默认绑定在default生命周期的package阶段,所以运行mvn的package时,便会按照如上配置执行repackage目标。
超级POM:如果pom.xml没有指定父工程,它会默认去继承一个超级POM文件,类似于Java中的Object类。在超级POM定义了一些默认的配置,文件存放位置、打包编译输出位置以及一些基本信息。

有效POM:在Maven 实际的构建过程中,实际是通过有效POM去完成构建的,而有效POM是当前pom.xml文件、父pom.xml、超级pom.xml文件组合起来的,而子pom.xml会覆盖父pom.xml文件的内容,相当于离当前pom.xml越近,优先级越高,没有设置就是用默认的。
<project>
<modelVersion>4.0.0modelVersion>
<repositories>
<repository>
<id>centralid>
<name>Central Repositoryname>
<url>https://repo.maven.apache.org/maven2url>
<layout>defaultlayout>
<snapshots>
<enabled>falseenabled>
snapshots>
repository>
repositories>
<pluginRepositories>
<pluginRepository>
<id>centralid>
<name>Central Repositoryname>
<url>https://repo.maven.apache.org/maven2url>
<layout>defaultlayout>
<snapshots>
<enabled>falseenabled>
snapshots>
<releases>
<updatePolicy>neverupdatePolicy>
releases>
pluginRepository>
pluginRepositories>
<build>
<directory>${project.basedir}/targetdirectory>
<outputDirectory>${project.build.directory}/classesoutputDirectory>
<finalName>${project.artifactId}-${project.version}finalName>
<testOutputDirectory>${project.build.directory}/test-classestestOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/javasourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scriptsscriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/javatestSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resourcesdirectory>
resource>
resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resourcesdirectory>
testResource>
testResources>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-antrun-pluginartifactId>
<version>1.3version>
plugin>
<plugin>
<artifactId>maven-assembly-pluginartifactId>
<version>2.2-beta-5version>
plugin>
<plugin>
<artifactId>maven-dependency-pluginartifactId>
<version>2.8version>
plugin>
<plugin>
<artifactId>maven-release-pluginartifactId>
<version>2.5.3version>
plugin>
plugins>
pluginManagement>
build>
<reporting>
<outputDirectory>${project.build.directory}/siteoutputDirectory>
reporting>
<profiles>
<profile>
<id>release-profileid>
<activation>
<property>
<name>performReleasename>
<value>truevalue>
property>
activation>
<build>
<plugins>
<plugin>
<inherited>trueinherited>
<artifactId>maven-source-pluginartifactId>
<executions>
<execution>
<id>attach-sourcesid>
<goals>
<goal>jar-no-forkgoal>
goals>
execution>
executions>
plugin>
<plugin>
<inherited>trueinherited>
<artifactId>maven-javadoc-pluginartifactId>
<executions>
<execution>
<id>attach-javadocsid>
<goals>
<goal>jargoal>
goals>
execution>
executions>
plugin>
<plugin>
<inherited>trueinherited>
<artifactId>maven-deploy-pluginartifactId>
<configuration>
<updateReleaseInfo>trueupdateReleaseInfo>
configuration>
plugin>
plugins>
build>
profile>
profiles>
project>
build 标签:一般用于配置构建项目时的一些参数配置和一些打包插件,如果没有配置一般使用超级POM的默认配置。
常用配置:
<build>
<directory>${project.basedir}/targetdirectory>
<outputDirectory>${project.build.directory}/classesoutputDirectory>
<finalName>${project.artifactId}-${project.version}finalName>
<testOutputDirectory>${project.build.directory}/test-classestestOutputDirectory>
<sourceDirectory>${project.basedir}/src/main/javasourceDirectory>
<scriptSourceDirectory>${project.basedir}/src/main/scriptsscriptSourceDirectory>
<testSourceDirectory>${project.basedir}/src/test/javatestSourceDirectory>
<resources>
<resource>
<directory>${project.basedir}/src/main/resourcesdirectory>
resource>
resources>
<testResources>
<testResource>
<directory>${project.basedir}/src/test/resourcesdirectory>
testResource>
testResources>
build>
plugins 插件标签:用来指定项目构建时使用的插件。
<build>
<finalName>${project.artifactId}finalName>
<plugins>
<plugin>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-maven-pluginartifactId>
<version>2.6.8version>
<executions>
<execution>
<id>boot-maven-pluginid>
<phase>packagephase>
<goals>
<goal>repackagegoal>
goals>
execution>
executions>
plugin>
plugins>
build>
插件执行过程:可以在 configuration标签中去自定义自己插件的执行过程,不同的插件的执行过程不一致,因插件不同有不同的配置。
指定 JDK 版本:我们在
setting.xml指定了 JDK 的版本,但是也可以在插件中去配置,这样无论项目在那个Maven环境下都可以使用指定 JDK 版本。
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<configuration>
<source>1.8source>
<target>1.8target>
<encoding>UTF-8encoding>
configuration>
plugin>
注意:也可以通过在属性定义中去指定 JDK 编译的版本。
<properties>
<maven.compiler.source>8maven.compiler.source>
<maven.compiler.target>8maven.compiler.target>
<project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
properties>
import:在Maven 中只能继承一个父pom,如果需要继承多个管理依赖的pom,可以使用import 来引入。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-dependenciesartifactId>
<type>pomtype>
<scope>importscope>
<version>2.6.8version>
dependency>
注意:
dependencyManagement标签中。System:本地依赖,如果需要引入本地磁盘上的依赖,可以使用这个类型,一般不用这种方式。
<dependency>
<groupId>xxxgroupId>
<artifactId>xxxartifactId>
<version>xxxxversion>
<systemPath>例如d:/xxxx.jarsystemPath>
<scope>systemscope>
dependency>
runtime:运行时依赖,表示这个依赖在运行时才起作用,在编译时没有作用。
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-devtoolsartifactId>
<version>${spring.boot.version}version>
<scope>runtimescope>
dependency>
依赖版本仲裁:当在依赖中存在依赖同一个jar,但是依赖对应jar 包的版本不同,这时在Maven 中使用了依赖版本仲裁。


profile:可以设置成在不同的环境下去激活不同的配置。例如生产环境、测试环境、开发环境等,通过配置不同profile 去启用不同环境配置。其实pom就是一个profile,在project 标签下除了
modelVersion标签不能写,其它标签都是可以写到profile 中的,一般吧profile 标签写到pom 文件的最后,以便不同环境去覆盖之前配置好的环境。
<profiles>
<profile>
<id>devid>
<activation>
<activeByDefault>trueactiveByDefault>
<jdk>1.8jdk>
activation>
<properties>
<profiles.active>devprofiles.active>
<nacos.namespace>testnacos.namespace>
<nacos.server-addr>127.0.0.0:8848nacos.server-addr>
properties>
profile>
profiles>
基于环境激活profile:Maven 可以是基于运行环境去激活对应的配置环境,一个profile 被激活那么profile 定义的配置会覆盖原来的配置。
<profile>
<id>testid>
<activation>
<activeByDefault>falseactiveByDefault>
<jdk>1.8jdk>
<os>
<name>Window XPname>
os>
<property>
<name>mavenVersionname>
<value>3.8.6value>
property>
activation>
profile>
资源过滤:在配置文件中可以去使用pom.xml 文件声明的变量,properties 文件使用
${xxxx},yaml 文件使用@xxxx@引用。
<build>
<resources>
<resource>
<directory>${project.basedir}/src/main/resourcesdirectory>
<filtering>truefiltering>
resource>
resources>
build>
spring:
profiles:
# 使用pom文件声明的属性
active: @profiles.active@
application:
name: module-01
cloud:
nacos:
discovery:
server-addr: @nacos.server-addr@

Nexus私服:一个特殊的远程仓库,它是架设在局域网内的仓库服务,供局域网内的开发人员使用。 当Maven 需要下载构建的使用, 它先从私服请求,如果私服上没有的话,则从外部的远程仓库下载,然后缓存在私服上 ,再为Maven的下载请求提供服务。
下载地址,下载后直接服务器然后解压。

etc/nexus-default.properties下修改。
./nexus start,检查启动状态:./nexus status
ip:端口号


仓库类型:nexus 一共有三种仓库类型proxy、group、hosted。
| 类型 | 作用 |
|---|---|
| proxy | 某个远程仓库的代理,一般是中央仓库 |
| group | 存放:第三方jar 包的仓库 |
| hosted | 存放:团队自己开发的仓库 |

修改代理仓库镜像为阿里云镜像:


http://maven.aliyun.com/nexus/content/groups/public/
从私服仓库下载jar 包:

<mirror>
<id>nexusmavenid>
<name>nexus mavenname>
<url>http://192.168.32.128:11234/repository/maven-central/url>
<mirrorOf>centralmirrorOf>
mirror>
<servers>
<server>
<id>nexusmavenid>
<username>adminusername>
<password>liujixingpassword>
server>
servers>


上传jar 包:将自己打包好的jar 包上传到私服中,提供给其他人下载。
<distributionManagement>
<snapshotRepository>
<id>nexusmavenid>
<name>nexus mavenname>
<url>http://192.168.32.128:11234/repository/maven-snapshots/url>
snapshotRepository>
distributionManagement>
mvn deploy将jar 包部署到私服上 
依赖私服上的jar 包:在Maven 中默认访问的仓库是setting.xml 部署的public 仓库,如果想使用别人私有的jar 包需要在仓库中配置一个repository。
<repositories>
<repository>
<id>nexusmavenid>
<name>nexus mavenname>
<url>http://192.168.32.128:11234/repository/maven-releases/url>
<snapshots>
<enabled>trueenabled>
snapshots>
<releases>
<enabled>trueenabled>
releases>
repository>
repositories>
最近发现除了腾讯云和阿里云之外的一种好用的云服务器,那就是三丰云云服务器,它拥有众多的功能,其中一个就是可以免费试用一款云服务器,下面介绍它的使用方式。
官方地址:https://www.sanfengyun.com/

然后进行一个实名认证和微信的绑定就可以申请一个 1c1g的免费服务器。
