文章目录

  • 一、Maven简介
  • 1.1 在项目中如何导入jar包?
  • 1.2 传统导入jar包的方式存在什么问题?
  • 1.3 项目生命周期
  • 1.4 Maven简介
  • 二、Maven安装及配置
  • 2.1 Maven下载
  • 2.2 Maven安装
  • 2.3 配置环境变量
  • 三、Maven的项目结构
  • 3.1 Maven的项目结构
  • 3.2 pom.xml
  • 四、依赖管理
  • 4.1 Maven依赖管理的流程
  • 4.2 Maven仓库介绍
  • 4.3 Maven仓库配置
  • 五、项目生命周期管理
  • 5.1 生命周期介绍
  • 5.2 生命周期管理指令
  • 六、基于IDEA的Maven使用
  • 6.1 在IDEA中关联Maven
  • 6.2 使用IDEA创建Maven项目
  • 6.2.1 Java项目
  • 6.2.2 web项目
  • 6.3 在IDEA中使用Maven进行依赖管理
  • 6.3.1 查找依赖坐标`一个查找依赖坐标的网址`
  • 6.3.2 添加依赖
  • 6.3.3 依赖范围
  • 6.4 在IDEA中使用Maven进行项目构建
  • 6.4.1 Maven项目构建生命周期说明
  • 6.4.2 IDEA进行生命周期管理
  • 七、私服
  • 7.1 私服搭建
  • 7.1.1 下载Nexus
  • 7.1.2 解压nexus
  • 7.1.3 安装并运行nexus
  • 7.1.4 登录Nexus
  • 7.2 配置私服
  • 7.2.1 在maven的settings.xml文件的`servers`标签中
  • 7.2.2 在maven的settings.xml文件的`profiles`标签中
  • 7.2.3 在maven的settings.xml文件的`activeProfiles`配置激活profile
  • maven替换中央仓库- 阿里云
  • 第一种,统一修改仓库地址
  • 第二种,分别给每个项目配置不同的中央库
  • 如何在当前目录下打开cmd
  • 环境变量的问题


一、Maven简介

1.1 在项目中如何导入jar包?
  • 下载jar包 (mvn)
  • 将下载的jar包拷贝到项目中(WEB-INF/lib)
  • 选择jar文件–右键–Add as Library
1.2 传统导入jar包的方式存在什么问题?
  • 步骤多(相对)——繁琐
  • 在不同的项目中如果需要相同的jar包,需要分别存储这个jar文件——冗余项目体积大
  • 在不同的环境下可能因为jar文件版本不一致导致项目无法运行(重新配置)——移植性差
1.3 项目生命周期

项目从编译到运行的整个过程

完整的生命周期:清理缓存—校验—编译—测试—打包—安装—部署

  • IDEA提供了一键构建项目的功能,但是如果我们需要自定义的生命周期管理,却没有现成的工具(清理缓存)
1.4 Maven简介

Maven是一个基于项目对象模型(POM)用于进行项目的依赖管理、生命周期管理的工具软件

核心功能

  • 依赖管理
  • 生命周期管理
  • 聚合工程

二、Maven安装及配置

2.2 Maven安装

Maven是基于Java语言进行开发的,因此依赖JDK(建议JDK1.7+)

开箱即用:直接解压即可

  • 解压(d:/mvn)
  • 目录结构:
  • bin 存放指令文件(Maven提供了一个mvn指令)
  • boot 包含了一个类加载框架的jar文件
  • conf 包含了Maven的核心配置文件settings.xml
  • lib 存放了maven运行所需的jar文件
2.3 配置环境变量
  • MAVEN_HOME D:\mvn\apache-maven-3.6.3
  • Path 增加 %MAVEN_HOME%\bin

测试

maven install pom maven install pom文件_maven install pom

三、Maven的项目结构

使用Maven进行项目还有一个好处:无论使用什么样 的开发工具(eclipse/idea)项目的结构是统一的。

3.1 Maven的项目结构
fmwy(项目名称)
--src
  --main (存放项目的源文件)
    --java (存放java代码,相当于传统项目中的src目录)
    --resources (存放配置文件和静态资源的目录,相当于传统项目的web目录)
  --test (存放项目的单元测试代码)
    --java(测试代码)
--pom.xml
3.2 pom.xml

POM Project Object Model,Maven可以根据pom文件的配置对此项目进行依赖管理;也就是说项目中需要依赖,直接在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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <!--指定项目模型版本-->
	<modelVersion>4.0.0</modelVersion>
    <!--指定项目的标识:G 企业标识 A 项目标识 V 版本-->
    <groupId>com.qfedu</groupId>
    <artifactId>fmwy</artifactId>
    <version>1.0.0</version>
    
    <!--配置当前项目的依赖-->
    <dependencies>
    	
    </dependencies>
</project>

如果需要在当前项目中添加依赖,只需在pom.xml文件中进行依赖配置即可

配置依赖 找到依赖的坐标,添加dependencies标签即可

<!-- http://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.47</version>
</dependency>

四、依赖管理

4.1 Maven依赖管理的流程

maven install pom maven install pom文件_maven install pom_02

4.2 Maven仓库介绍
  • 本地仓库 就是本地计算机上的某个文件夹(可以是自定义的任何文件夹)
  • 远程仓库 就是远程主机上的jar文件仓库
  • 中央仓库 maven官方提供的仓库,包含了所需的一切依赖(免配置)
  • 公共仓库 除了中央仓库以外的第三方仓库都是公共仓库,例如aliyun(需要配置)
  • 私服 企业搭建的供内部使用的maven仓库

maven仓库

maven install pom maven install pom文件_xml_03

4.3 Maven仓库配置

在maven_home/conf/settings.xml中进行配置

配置本地仓库

<localRepository>d:\repo</localRepository>

配置公共仓库

<mirrors>
	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>central</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	 </mirror>
</mirrors>

五、项目生命周期管理

5.1 生命周期介绍

项目构建的声明周期:项目开发结束之后部署到运行环境运行的过程

  • 清除缓存 不清除缓存会让项目用的是上一次编译后的内容
  • 检查 项目结构,和基础语法的检查,有问题会导致编译不成功的
  • 编译 编译成class文件
  • 测试 (就会执行maven项目中test目录下的单元测试)
  • 打包 (如果是web项目可能打包成war 、如果是普通的java项目打包成 jar)
  • 安装 (jar会被安装到本地仓库)
  • 部署 (将项目生成的包放到外部服务器中—私服仓库)
5.2 生命周期管理指令

在项目的根目录下执行mvn指令(此目录下必须包含pom.xml)

  • 清除缓存
mvn clean
  • 检查
mvn check
  • 编译
mvn compile
  • 测试
mvn test
  • 打包
mvn package
  • 安装
mvn install
  • 部署
mvn deploye

六、基于IDEA的Maven使用

6.1 在IDEA中关联Maven

maven配置(other Settings 为以后的项目做设置)

maven install pom maven install pom文件_maven_04

maven install pom maven install pom文件_java_05

说明: IDEA本身集成了Maven,考虑到IDEA和Maven版本的兼容性,Idea不建议配置比默认版本更新的版本,建议使用idea自带的maven。

6.2 使用IDEA创建Maven项目
6.2.1 Java项目

创建Java项目

maven install pom maven install pom文件_intellij-idea_06

maven install pom maven install pom文件_maven_07

maven install pom maven install pom文件_xml_08

6.2.2 web项目
  • 创建maven项目:maven-demo2
  • 在pom.xml文件设置打包方式为war
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.qfedu</groupId>
    <artifactId>maven-demo2</artifactId>
    <version>1.0.0</version>

    <!--设置项目打包方式为war-->
    <packaging>war</packaging>

</project>
  • 完成web项目结构(完善web项目结构)
    新建一个webapp文件夹然后在maven下点击刷新即可webapp就有一个小蓝点
  • 配置web组件—Tomcat

maven install pom maven install pom文件_maven_09

maven install pom maven install pom文件_intellij-idea_10

  • 部署web项目

maven install pom maven install pom文件_java_11

6.3 在IDEA中使用Maven进行依赖管理
6.3.1 查找依赖坐标一个查找依赖坐标的网址
6.3.2 添加依赖
  • 将依赖的坐标配置到项目的pom.xml文件dependencies标签中
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.qfedu</groupId>
    <artifactId>maven-demo2</artifactId>
    <version>1.0.0</version>

    <!--设置项目打包方式为war-->
    <packaging>war</packaging>

    <dependencies>
        <!--在此位置配置项目中所需依赖的坐标 GAV-->
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.18</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>
6.3.3 依赖范围

maven install pom maven install pom文件_maven_12

maven install pom maven install pom文件_xml_13

在通过dependency添加依赖时,可以通过scope标签配置当前依赖的适用范围

  • test 只在项目测试阶段引入当前依赖(编译、测试) 到test阶段
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>
  • runtime 只在运行时使用(运行、测试运行)编译时没有,只在运行时
  • provided 在(编译、测试、运行)``
  • compile 在(编译、测试、运行、打包)都引入 整个阶段
6.4 在IDEA中使用Maven进行项目构建
6.4.1 Maven项目构建生命周期说明
  • clean 清理缓存 清理项目生成的缓存

maven install pom maven install pom文件_maven_14

maven install pom maven install pom文件_maven install pom_15

  • validate 校验 验证项目需要是正确的(项目信息、依赖),不产生target缓存
  • compile 编译 编译项目专供的源代码,编译完成后会生成target缓存

compile产生的target缓存

maven install pom maven install pom文件_maven install pom_16

  • test 测试 运行项目中的单元测试,会生成新的target缓存

test产生的target缓存

maven install pom maven install pom文件_java_17

  • package 打包 将项目编译后的代码打包成发布格式, 会将上面的步骤依次执行一遍

package产生的target缓存

maven install pom maven install pom文件_java_18

生成maven-demo01-1.0-SNAPSHOT.war

将这个war包直接放在tomcat就可以运行了

maven install pom maven install pom文件_maven install pom_19

  • verify 检查 对集成测试的结果进行检查、确保项目的质量是达标的
  • install 安装 将包安装到maven的本地仓库, 以便在本地的其他项目中可以引用此项目(聚合工程)

将包安装到maven的本地仓库

maven install pom maven install pom文件_xml_20

  • deploy 部署 进行公开化,将包安装到私服的仓库,以供其他开发人员共享
6.4.2 IDEA进行生命周期管理
  • 可视化
  • 终端指令 Terminal

选择项目名称—右键—Open in Terminal

maven install pom maven install pom文件_xml_21

七、私服

企业搭建供内部使用的一个Maven仓库

  • 开发者需要依赖直接从私服下载
  • 私服可以实现企业内部依赖的共享:当企业开发了一个通用插件(jar),可以发布到私服,可以连接到当前私服的其他开发者就可以共享这个插件了
7.1 私服搭建

我们可以通过专门的Maven仓库管理软件来搭建私服。例如:Apache Archiva、Nexus

7.1.1 下载Nexus
  • 官网 http://www.sonatype.com/
  • 下载 http://help.sonatype.com/repomanager2/download
7.1.2 解压nexus

maven install pom maven install pom文件_java_22

7.1.3 安装并运行nexus
  • 进入到nexus-2.14.11-01/bin目录
  • 管理员身份打开cmd命令行,执行指令
7.1.4 登录Nexus

私服管理器登录地址: http://localhost:8081/nexus

maven install pom maven install pom文件_java_23

  • 私服中仓库类型

maven install pom maven install pom文件_maven install pom_24

  • 私服仓库组的配置 连接仓库组(group)-->寻找依赖-->连接(hosted本地文件夹)寻找第一个文件夹(仓库)有没有,没有找到下一个文件加(hosted)-->都没有会找到(proxy)公共仓库,

对外暴露的proxy公共仓库,一般写道文件夹后面

maven install pom maven install pom文件_maven_25

7.2 配置私服
7.2.1 在maven的settings.xml文件的servers标签中
<!--配置连接私服所需的帐号和密码-->
<server> 
    <id>nexus-public</id> <!-- nexus的认证id -->
    <username>admin</username> <!--nexus中的用户名密码-->
    <password>admin123</password> 
</server>
7.2.2 在maven的settings.xml文件的profiles标签中

repository 和 pluginRepository的 id子标签的值,要和上面配置的server 的id子标签的值一致

<profile> 
    <id>nexus</id> 
    <repositories> 
        <repository> 
            <id>nexus-public</id>      
            <name>Nexus Release Snapshot Repository</name>   
            <url>http://localhost:8081/nexus/content/groups/public/</url>
            <releases><enabled>true</enabled></releases> 
            <snapshots><enabled>true</enabled></snapshots> 
        </repository>
    </repositories> 
    <pluginRepositories>
        <pluginRepository> 
            <id>nexus-public</id> 
            <url>http://localhost:8081/nexus/content/groups/public/</url>
            <releases><enabled>true</enabled></releases> 
            <snapshots><enabled>true</enabled></snapshots> 
        </pluginRepository> 
    </pluginRepositories> 
</profile>
7.2.3 在maven的settings.xml文件的activeProfiles配置激活profile
<activeProfiles>
	<activeProfile>nexus</activeProfile>
 </activeProfiles>

enabled>
true



 

###### 7.2.3  在maven的settings.xml文件的`activeProfiles`配置激活profile

```xml
 <activeProfiles>
	<activeProfile>nexus</activeProfile>
 </activeProfiles>
maven替换中央仓库- 阿里云

在国内访问Maven仓库,连接速度太慢。下面是将中央仓库替换成阿里云的中央仓库的方法。

第一种,统一修改仓库地址

可以直接修改Mavenconf文件夹中的setting.xml文件,或者在.m2文件夹下建立一个setting·xml文件。

setting.xml里面有个mirrors节点,用来配置镜像URL。mirrors可以配置多个mirror,每个mirror有id,name,url,mirrorOf属性。

id是唯一标识一个mirror
name貌似没多大用,相当于描述
url是官方的库地址
mirrorOf代表了一个镜像的替代位置,例如central就表示代替官方的中央库。
mirror也不是按settings.xml中写的那样的顺序来查询的。所谓的第一个并不一定是最上面的那个。

当有id为B,A,C的顺序的mirror在mirrors节点中,maven会根据字母排序来指定第一个,所以不管怎么排列,一定会找到A这个mirror来进行查找,当A无法连接,出现意外的情况下,才会去B查询。

在setting·xml中添加如下代码:

...
<mirrors>  
    ...   
    <mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
    </mirror>
</mirrors>
第二种,分别给每个项目配置不同的中央库

直接在项目的pom.xml中修改中央库的地址。如下:

<repositories>
	<repository>
		<id>alimaven</id>
		<name>aliyun maven</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
	</repository>
</repositories>

完整的pom

<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.0</modelVersion>
	<groupId>com.xiaolyuh</groupId>
	<artifactId>spring-boot-student</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>pom</packaging>
	<name>spring-boot-student</name>
 
	<!-- 添加Spring Boot的父类依赖,这样当前项目就是Spring Boot项目了。 spring-boot-starter-parent是一个特殊的starter,他用来 
		提供相关的maven默认依赖, 使用它之后,常用的依赖可以省去version标签 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.3.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
 
	<repositories>
		<repository>
			<id>alimaven</id>
			<name>aliyun maven</name>
			<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		</repository>
	</repositories>
 
	<!-- 或者在maven的setting文件中加入 -->
	<!--<mirror>
		<id>alimaven</id>
		<name>aliyun maven</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
		<mirrorOf>central</mirrorOf>
	</mirror>-->
 
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
 
	<dependencies>
		<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>
	</dependencies>
 
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>
 
	<modules>
		<module>spring-boot-student-banner</module>
    </modules>
 
</project>
如何在当前目录下打开cmd

maven install pom maven install pom文件_maven install pom_26

环境变量的问题

任何一个指令都有一个执行文件

maven install pom maven install pom文件_java_27

bin 存放指令文件(Maven提供了一个mvn指令)

maven install pom maven install pom文件_maven_28