Maven 入门篇

要想人前显贵,必要人后受罪

Maven 介绍

1.为什么要使用 Maven?

由于 Java 的生态非常丰富,无论你想实现什么功能,都能找到它对应的工具类,这些工具类都是以 jar 包的形式出现的,例如 Spring、SpringMVC、数据库驱动等等,jar 包之间会有关联,在使用一个依赖之前,还需要确定这个依赖所依赖的其他依赖,所以当项目比较大的时候,依赖管理是非常麻烦的事情。

2.Maven 是什么?

Maven 是一个项目管理工具,全称是项目对象模型 (Project Object Model),反映在配置中,就是一个 pom.xml 文件,是一组标准集合,一个项目的生命周期,一个依赖管理系统,另外还包括定义在项目生命周期阶段的插件 (plugin) 以及目标 (goal)。
Maven 有两大核心:

  • 依赖管理:对 jar 的统一管理,Maven 提供了一个中央仓库,当我们在项目中添加过依赖后,Maven 会自动去中央仓库下载相关的依赖,并且解决依赖的依赖问题。
  • 项目构建:对项目进行编译、测试、打包、部署、上线到私服等

Maven 安装

  • Maven 是 Java 项目,因此需要先安装 JDK。检查自己是否配置了 JDK ,执行以下命令。
    在这里插入图片描述

  • 下载 Maven:
    下载地址:http://maven.apache.org/download.cgi
    在这里插入图片描述

  • 解压并配置环境变量
    在这里插入图片描述

  1. 配置 MAVEN_HOME:
    在这里插入图片描述
  2. 编辑环境变量 PATH:
    在这里插入图片描述
  3. 检验安装是否成功
    cmd 命令行输入 mvn -v ,如下图代表成功:
    在这里插入图片描述

Maven 配置

实际上,没有特殊要求,安装好就能直接使用的哈,一般来说,还是需要修改一下配置文件的,比如默认使用 Maven 的中央仓库网速比较慢,这种网速问题可以通过修改配置文件解决的,将仓库改成阿里巴巴的镜像站即可。

1.仓库类型

仓库类型 说明
本地仓库 就是你自己电脑上的仓库,默认位置在当前用户名\ .m2\repository
私服仓库 一般来说这个是公司内部搭建的 Maven 私服,处于局域网种,访问速度较快,这个仓库种存放的 jar 一般就是公司内部自己开发的 jar
中央仓库 有 Apache 团队来维护,包含了大部分的 jar ,早期不包含 Oracle 数据库驱动,从 2019年8月开始,包含了 Oracle 驱动

假如现在3个仓库同时存在,那么 jar 包如何查找?如下图所示
在这里插入图片描述

2.本地仓库设置

本地仓库默认位置是在 当前用户名.m2\repository ,这个位置可以自定义,但是不建议更改,虽然所有 jar 包都存放在C盘中,但是并不会占用太大空间的。
当然如果你非要改也是可以修改的,在 conf/settings.xml 中自定义本地仓库位置:
在这里插入图片描述

3.本地镜像站配置

由于默认的中央仓库下载速度较慢,因此,可以将远程仓库的地址修改为阿里巴巴的仓库地址:

<mirror>
	    <!--该镜像的id-->
	    <id>nexus-aliyun</id>
	    <!--该镜像用来取代的远程仓库,central是中央仓库的id-->
	    <mirrorOf>central</mirrorOf>
	    <name>Nexus aliyun</name>
	    <!--该镜像的仓库地址,这里是用的阿里的仓库-->
	    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
   </mirror>

复制这段配置,添加到 conf/settings.xml 中的 mirrors 节点中:
在这里插入图片描述

4.Maven 常用命令

Maven 中有一些常见的命令,如果你使用 IDEA ,那么可以不用命令,直接用 IDEA 自带的插件就可以了。

常用命令 中文含义 说明
mvn clean 清理 这个命令可以用来清理已经编译好的文件
mvn compile 编译 将 Java 代码编译成 Class 文件
mvn test 测试 项目测试
mvn package 打包 跟据用户的配置,将项目达成 jar 包或者 war 包
mvn install 安装 手动向本地仓库安装一个 jar
mvn deploy 上传 将 jar 上传到私服

这里需要注意,这些命令都不是独立运行的,它有一个顺序,列如:我想将 Jar 上传到私服,那么就要构建 jar ,就需要执行 package 命令,要打包,也要测试,那就要走 mvn test 命令,要测试也要先编译…,因此,最终所有的命令都会执行一遍,不过开发者也可以手动配置不执行某一个命令,这就是跳过,一般来说,除了测试,其他步骤都不建议跳过。

1.通过命令来构建项目
  • 可以直接通过命令来构建一个 Maven 项目,不过在实际开发中,一般使用IDE直接创建 Maven 项目。
  • 创建命令:
    mvn archetype:generate -DgroupId=org.javaboy -DartifactId=firstapp -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
    看到如下提示:表示项目创建成功:
    在这里插入图片描述
    项目创建成功后,就两个文件:
    在这里插入图片描述
    pom.xml 文件中定义了所有的项目配置:
    在这里插入图片描述
2.对项目进行打包

我们通过 mvn package 命令可以将刚刚创建的项目打成一个 jar 包,在打包之前,需要配置 JDK 的版本至少是 7 以上,因此,我们还需要手动修改一下 pom.xml 文件,既添加如下配置:

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
	<java.version>1.8</java.version>
	<maven.compiler.source>1.8</maven.compiler.source>
	<maven.compiler.target>1.8</maven.compiler.target>
</properties>

如下图,添加到如下位置即可:
在这里插入图片描述
添加后执行打包命令,注意执行所有命令的时候,都要注意命令行定位到 pom.xml 文件所在的目录,看到如下提示,表示项目打包成功。
在这里插入图片描述

3.将项目安装到本地仓库

如果需要将项目安装到本地仓库,可以直接执行 mvn install 命令。注意:mvn install 命令会包含上面的 mvn package 打包过程。
在这里插入图片描述
安装到本地仓库后,跟据命令行提示的位置即可找到相关的 jar 包了。
在这里插入图片描述

Maven 依赖管理

Maven 项目,如果需要使用第三方的控件,都是通过依赖管理来完成的,这里用到的一个东西就是 pom.xml 文件,概念叫做项目对象模型 (POM,Project Object Model),我们在 pom.xml 中定义了 Maven 项目的形式,所以, pom.xml 相当于是 Maven 项目的一个地图,就类似 web,xml 文件用来描述三大 web 组件一样。

1.Maven 坐标
<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  • dependencies
    在 dependencies 标签中,添加项目需要的 jar 所对应的 maven 坐标。
  • dependency
    一个 dependency 标签表示一个坐标
  • groupId
    团队、公司、组织机构等等的唯一标识。团体标识的约定是它以创建这个项目的组织名称的逆向域名开头,一个 Maven 坐标必须包含 groupId。
  • artifactId
    artifactId 相当于在一个组织中项目的唯一标识符
  • version
    一个项目的版本,一个项目可能会有多个版本,如果是正在开发的项目,我们可以给项目加上一个 SNAPSHOT,表示这是一个快照版(新建项目的默认版本就是快照版)。
  • scope
    表示依赖范围
依赖范围 编译有效 测试有效 运行时有效 打包有效 例子
Complie spring-core
test Junit
provided servlet-api
runtime JDBC 驱动
system 本地 maven 仓库之外的类库

我们添加了很多依赖,但是不同的依赖的使用范围不一样,最典型的有两个,一个是数据库驱动,另一个是单元测试。数据库驱动在使用的过程中,我们自己写代码,写的是 JDBC 代码,只有在项目运行时,才需要执行 MySQL 驱动中的代码,所以,MySQL 驱动这个依赖在添加到项目中之后,可以设置它的 scope 为 runtime,编译的时候不生效。
同样,单元测试,只有在测试的时候生菜,所以设置它的 scope 为 test,这样当项目打包发布时,单元测试的依赖就不会跟着发布。

2.依赖冲突
  • 依赖冲突产生的原因:
    在这里插入图片描述
    在图中,a.jar 依赖 b.jar ,同时 a.jar 依赖 d.jar ,这个时候, a 和 b、d 的关系是直接依赖的关系, a 和 c 的关系是间接依赖的关系。
1.冲突解决
  1. 先定义先使用
  2. 路径最近原则(直接声明使用)
    上面这两条是默认行为,我们也可以手动控制,手动控制主要通过排除依赖来实现,如下:
<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.1.9.RELEASE</version>
	  <exclusions>
		<exclusion>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
		</exclusion>
	  </exclusions>
    </dependency>

这段配置表示从 spring-context 中排除 spring-core 依赖。

Maven 私服

  • Maven 仓库管理也叫 Maven 私服或者代理仓库。使用 Maven 私服有两个目的:

    1. 私服是一个介于开发者和远程仓库之间的代理
    2. 私服可以用来部署公司自己的 jar

1.Nexus 介绍

Nexus 是一个强大的 Maven 仓库管理工具,使用 Nexus 可以方便的管理内部仓库同时简化外部仓库的访问。官网是:https://www.sonatype.com/

2.安装 Nexus
  • 下载
    下载地址:https://www.sonatype.com/download-oss-sonatype
  • 解压
    将下载下来的压缩包,拷贝到一个没有中文的路径下进行解压。
  • 启动
    解压之后,通过管理员身份打开 cmd 窗口,然后进入 nexus 解压后的目录,执行 nexus.exe/run 命令启动服务即可。
    启动成功后,浏览器访问 localhost:8081 打开管理员页面。然后点解右上角的的登陆按钮进行登陆,默认的用户名、密码是:admin/admin123。当然,用户也可以点击设置按钮,手动配置其他用户。
1.仓库类型
名称 说明
proxy 表示这个仓库是一个远程仓库的代理,最典型的就是代理 Maven 中央仓库
hosted 宿主仓库,公司自己开发的一些 jar 存放在宿主机仓库中,以及一些在 Maven 中央仓库上没有的 jar
group 仓库组,包含代理仓库和宿主仓库
virtual 虚拟仓库
2.上传 jar

上传 jar ,配置两个地方:

  • Maven 的 conf/setttings.xml 文件配置:
<server>
	<id>releases</id>
	<username>admin</username>
	<password>admin123</password>
</server>
<server>
	<id>snapshots</id>
	<username>admin</username>
	<password>admin123</password>
</server>
  • 在要上传的 jar 的项目的 pom.xml 文件上,配置上传路径:
<distributionManagement>
	<repository>
		<id>releases</id>
		<url>http://localhost:8081/repository/maven-releases</url>
	</repository>
	<snapshotRepository>
		<id>snapshots</id>
		<url>http://localhost:8081/repository/maven-snapshots</url>
	</snapshotRepository>
</distributionManagement>
  • 配置完成后,点击 deploy 按钮,或者执行 mvn deploy 命令就可以将 jar 上传到私服了。
3.下载私服上的 jar
  • 直接在项目中添加如下依赖,添加完成后,额外增加私服地址即可:
<repositories>
	<repository>	
		<id>local-repository</id>
		<url>http://localhost:8081/repository/maven-public</url>
		<releases>
			<enabled>true</enabled>
		</releases>
		<snapshots>
			<enabled>true</enabled>
		</snapshots>
	</repository>
</repositories>
发布了47 篇原创文章 · 获赞 312 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43647359/article/details/105053241