Maven

发布于:2024-04-28 ⋅ 阅读:(26) ⋅ 点赞:(0)

1、Maven简介【百度百科】

在这里插入图片描述
Maven是Apache一款开源项目管理工具。

重点:
项目对象模型(Project Object Model, POM)
通过一小段描述信息管理项目的构建,报告和文档的项目管理工具。
Maven项目相当于一个对象,对象与对象之间存在关系【依赖、继承、聚合】。通过关系实现项目更加方便导jar包、拆分项目的效果。

2、下载

Maven官方
Maven下载binary压缩包到本地之后,直接在一个目录下解压就可以使用。【可以配置M2_HOME环境变量、Path环境变量】
在这里插入图片描述
在这里插入图片描述

3、Maven目录结构

在这里插入图片描述
bin目录:
在这里插入图片描述
conf目录:
在这里插入图片描述

4、仓库

基于简单文件系统存储,集中化管理Java API资源(构件)的服务。

仓库中每一个构件拥有唯一坐标标识,据此可以定位仓库中的唯一存储路径。

  • groupId
  • artifactId
  • version

Maven通常会在某一个位置(仓库)统一存储所有Maven项目共享的构件。当项目构建完毕后生成的构件也可以安装或部署到仓库中,供其他项目使用。

Maven项目分为两类:远程仓库本地仓库

4.1、远程仓库

远程仓库分为:中央仓库本地私服仓库

远程仓库指通过各种协议访问的仓库。这些仓库可能是第三方搭建的真实的远程仓库,用来提供他们的构件下载(例如repo.maven.apache.org和uk.maven.org是Maven的中央仓库)。
默认的远程仓库使用的Apache提供的中央仓库:Apache中央仓库
在这里插入图片描述

其它“远程”仓库可能是公司内部拥有的建立在文件或HTTP服务器上的内部仓库,用来在开发团队间共享私有构件和管理发布的。

4.2、本地仓库

本地仓库就是本机的一份拷贝,缓存远程下载。其中可以包含自己本地尚未发布的临时构件。

5、Maven项目

5.1、工程类型

  • POM工程
    逻辑工程。通常用于父级工程/聚合工程中,作为jar包的版本控制。
  • JAR工程
    将项目打包成jar包形式,是一种常见的本地工程【只要本地有Java运行时环境,即可运行】。
  • WAR工程
    将项目打包成war包形式,发布在服务器上的工程【需要有web容器才能运行】。

5.2、Eclipse中创建Maven项目

(1)Eclipse配置本地Maven
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)创建Maven项目

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(3)目录结构

6、Maven配置

配置setting.xml文件:

  • JDK
  • 仓库:本地仓库、镜像仓库

6.1、JDK配置

有多个JDK时,就需要指定编译和运行的JDK。
在这里插入图片描述

6.2、仓库

6.2.1 本地仓库

默认:`${user.home}/.m2/repository
在这里插入图片描述

6.2.2 镜像仓库

阿里云Maven仓库配置
在这里插入图片描述

6.2.3 仓库优先级

在这里插入图片描述

7、项目关系

7.1、依赖

A项目需要B项目提供支持。

(1)实现方式:
  在A项目的pom.xml文件中导入B项目jar包【自己项目打包成的jar包、中央仓库jar包】。

<dependecies>
	<dependency>
		B项目坐标(GAV)
	</dependency>
</dependencies>

(2)传递依赖:项目A依赖项目B,项目B依赖项目C。只需要在项目A中加入项目B即可,Maven会隐式地把依赖库所依赖的库加入项目中。【解析从远程仓库中获取的依赖库的项目文件来实现的】

(3)原则:
① 第一原则:最短路径优先原则
项目依赖关系树中路径最短的版本会被使用。
② 第二原则:最先声明原则
当依赖路径长度一致时,第一原则不能解决问题。
在依赖路径长度相等的前提下,pom.xml文件中依赖声明的顺序决定谁会被解析使用。

(4)排除依赖:
使用exclusions标签排除传递性依赖。

<dependencies>
	<dependency>
		GAV
		<exclusions>
			<exclusion>
				GA【不用写version】
			</exclusion>
		</exclusions>	
	</dependency>
</dependencies>

(5)依赖范围:决定依赖的坐标在什么情况下有效,什么情况下无效。

  • compiler(默认):编译、运行时
  • provided:编译、测试。如:servlet-api
  • runtime:只在运行时。如:JDBC驱动实现
  • system:范围与provided类似,但必须显式指定本地系统路径的jar。Maven不会去仓库中寻找
  • test:编译测试代码、运行测试。如:Junit
  • import:只适用于pom文件中的<dependencyManagement>。表明指定的pom**必须使用<dependencyManagement>**部分的依赖

父工程【打成jar包】:
在这里插入图片描述

子工程:
在这里插入图片描述

7.2、继承

A工程继承B工程:A工程默认依赖B工程的所有资源,且可以应用B工程中定义的所有资源信息。【B工程只能是POM工程】

放在<dependencyManagement>中的内容主要目的是进行版本管理。里面的内容在子项目中依赖时坐标只需要填写<groupId><artifactId>即可。(注意:如果子项目不希望使用父项目的版本,可以明确配置version)。
在这里插入图片描述

7.3、聚合

当工程有两个以上模块时,每个模块作为一个独立的功能集合起来。

总工程必须是POM工程。【前提是继承,聚合中包含了继承的特性】
多个项目被一个大的父项目包含【父项目:POM类型;pom.xml中出现<modules>标签显示包含的子模块】

8、插件

8.1、编译器

  • settings.xml文件中配置全局编译器插件:<profiles>节点下进行配置
  • pom.xml文件:<build>节点下的<plugins>中进行配置

8.2、资源拷贝

Maven在打包时,会在src/main/resources目录下的配置文件拷贝到项目中对应路径进行打包处理,而非该目录下不会打包到项目中。

将非src/main/resources目录下的配置文件打包:
在这里插入图片描述

8.3、tomcat

不适用外部Tomcat:可运行插件
启动命令:tomcat7:run
在这里插入图片描述

9、常见命令

install

本地安装【编译javac、打包jar、安装到本地仓库】
完成项目编译、单元测试、打包功能,没有把打包好的可执行 jar包/war包 部署到本地maven仓库,但没有部署到远程maven私服仓库

clean

清除已编译信息【删除target目录】

compiler

只编译

package

打包【编译、打包】
完成项目编译、单元测试、打包功能,没有把打包好的可执行 jar包/war包 部署到本地maven仓库和远程maven私服仓库


网站公告

今日签到

点亮在社区的每一天
去签到