Maven基础

第一章 Maven介绍

1.1 什么是Maven

Maven 是一个项目管理工具,它包含了一个项目对象模型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。

1.2 Maven两个经典作用

1.2.1 Maven 的依赖管理

要将项目运行起来,就得要把项目所依赖得jar包添加到工程,项目工程大小就很大,得几兆。

如果使用Maven则会发现总体上工程的大小会少很多。

因为Maven把所用到得jar包管理到了一个仓库中。它让任何想要用jar包的工程都去从仓库中引用。那么每个工程就不用自己携带jar包了。在每个项目中放置jar包在jar包仓库中的坐标即可。

这个就叫做Maven的依赖管理

Maven 的一个核心特性就是依赖管理。当我们涉及到多模块的项目(包含成百个模块或者子项目),管理依赖就变成 一项困难的任务。Maven 展示出了它对处理这种情形的高度控制。

image-20210313221728818

maven 工程中不直接将 jar 包导入到工程中,而是**通过在 pom.xml 文件中添加所需 jar 包的坐标**。 > 问题一:通过读取 pom.xml 文件中的坐标,再到仓库中找到 jar 包,会不会很慢?从而导致这种方式 不可行! > > ​ 通过 pom.xml 文件配置要引入的 jar 包的坐标,再读取坐标并到仓库中加载 jar 包,这样我们就可以直接使用 jar 包了,为了解决这个过程中速度慢的问题,maven 中也有索引的概念,通 过建立索引,可以大大提高加载 jar 包的速度,使得我们认为 jar 包基本跟放在本地的工程文件中再 读取出来的速度是一样的。 #### 1.2.2 项目的一键构建 项目往往都要经历编译、测试、运行、打包、安装 ,部署等一系列过程。 **构建**指的是项目从编译、测试、运行、打包、安装 ,部署整个过程都交给 maven 进行管理的过程。 **一键构建**指的是整个构建过程,使用 maven一个命令(**mvn tomcat:run**)可以轻松完成整个工作。 ## 第二章 Maven的使用 ### 2.1 Maven的安装 #### 2.1.1 下载与安装 下载后解压即可,放在一个没有中文没有空格的路径下。 ![image-20210314193027480](Maven-basic-md/image-20210314193027480.png) #### 2.1.2 配置系统变量 配置 **MAVEN_HOME** ,变量值就是你的 maven 安装 的路径(bin 目录之前一级目录) 然后在系统变量中加入 **%MAVEN_HOME%/bin** #### 2.1.3 Maven 版本测试 `mvn -v` 检查maven是否安装成功。 ### 2.2 Maven仓库 #### 2.2.1 Maven 仓库的分类 **“远程仓库”**,**“本地仓库”**,“**中央仓库**”的关系 - **本地仓库**:用来存储从远程仓库或中央仓库下载的插件和 jar 包, - 默认本地仓库位置在 `${user.dir}/.m2/repository`,`${user.dir}`表示 windows 用户目录。 - **远程仓库**:如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载。 - **中央仓库**:在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中 央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包 含了世界上大部分流行的开源项目构件。 ![maven仓库的种类和关系](Maven-basic-md/maven仓库的种类和关系.png) #### 2.2.2 Maven 本地仓库的配置 在 `MAVE_HOME/conf/settings.xml` 文件中配置本地仓库位置(maven 的安装目录下) 打开 settings.xml文件,配置其中`localRepository`标签:
1
<localRepository>D:\software\Programing_software\maven_repository</localRepository>

2.2.3 全局 setting 与用户 setting

maven 仓库地址、私服等配置信息需要在 setting.xml 文件中配置,分为全局配置和用户配置。

在 maven 安装目录下的有 conf/setting.xml 文件,此 setting.xml 文件用于 maven 的所有 project 项目,它作为 maven 的全局配置。

如需要个性配置则需要在用户配置中设置,用户配置的 setting.xml 文件默认的位置在:${user.dir} /.m2/settings.xml 目录中,${user.dir} 指 windows 中的用户目录。

maven 会先找用户配置,如果找到则以用户配置文件为准,否则使用全局配置文件。

image-20210314195549254

2.3 Maven 工程的认识

2.3.1 Maven 工程的目录结构

这个目录结构不是上面那个Maven软件的目录结构。而是用Maven管理的工程的目录结构

一个项目管理起来所需要的几个组成部分都有四种:

(1)核心代码部分

(2)配置文件部分

(3)测试代码部分

(4)测试配置部分

传统项目目录结构:

src目录下存放着四种代码。打包的时候可能会发生交叉混乱。

Maven建立了一个项目的标准目录结构

image-20210314195150747

第3章 Maven 常用命令

3.1 Maven 常用命令

在Maven工程下,打开命令提示符,可以输入Maven 常用命令对Maven工程进行操作。

3.1.1 mvn clean

可以把target文件夹删除掉。也就是删除之前编译的信息。

3.1.2 mvn compile

仅把src/main目录下的代码进行编译。

3.1.3 mvn test

src/test下的代码进行测试。而且还把src/main目录下的代码也进行编译

3.1.4 mvn package

对整个项目进行打包。还生成了war文件。

查看pom.xml文件就会发现,配置文件中配置了打包成war包。

3.1.5 mvn install

相当于mvn package后,再把war包安装到了本地仓库。

3.2 Maven 指令的生命周期

Maven工程的过程

清理生命周期(Clean Lifecycle) 在进行真正的构建之前进行一些清理工作。

默认生命周期(Default Lifecycle) 构建的核心部分,编译,测试,打包,部署等等。

站点生命周期(Site Lifecycle) 生成项目报告,站点,发布站点。

image-20210315110019302

3.3 Maven概念模型

Maven 包含了一个项目对象模型 (Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管理系统(Dependency Management System),和用来运行定义在生命周期阶段 (phase)中插件(plugin)目标(goal)的逻辑。

image-20210315110905565

3.4 idea开发maven项目

3.4.1 在idea中配置maven

要在idea中使用maven就要配置它。

setttings里搜maven。然后填写maven主目录,设置文件路径,还有本地仓库路径。

running里面配置:-DarchetypeCatalog=internal 使得它首先从本地仓库中找包。

再对maven下的setting进行配置阿里云的镜像:

1
2
3
4
5
6
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>

3.4.2 使用maven骨架创建java工程

新建maven项目就好。选择quickstart骨架。然后结束后,它不会把整个的目录创建好,需要手动补齐。

添加 resources文件。

3.4.3 使用maven无骨架创建java工程

新建maven项目就好。然后结束后,他有着默认的maven目录结构。

3.4.4 使用maven骨架创建web工程

用到了webapp骨架。创建好以后,只有src/main/webapp目录。其他的需要自主创建。

3.5 创建一个servlet

3.5.1 指定某目录为web资源包

可以在webapp下加入网页资源文件。要想在其他文件夹下加入网页资源文件可以把该文件设为该工程的”project structure”,“module”,然后“web”。

3.5.2 导入项目依赖的jar包

pom.xml加入依赖jar包。可以直接在中央仓库中找xml的写法。

这里写了一个servlet。需要两个jar包。servletjsp

然后用 mvn tomcat:run 来运行。

发现报错

3.5.3 解决jar包冲突

因为tomcat是maven带的。它里面也带了servletjsp。运行时把代码拿进去发现这两个对象不一样。所以会出现冲突。

为解决这个问题需要给pom.xml里的依赖包加入一个范围。这个范围决定了该jar包仅在写的时候不让他报错就好。

1
<scope>provided</scope>

这样下来就可以使得代码用tomcat里的包了。

3.5.4 maven工程运行环境修改

还可以用tomcat7,还设置了端口

1
2
3
4
5
6
7
8
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8888</port>
</configuration>
</plugin>

一般这种可以设置动态模板的方式来定义。

setting ——Live templates——加号选择创建动态模板的组。然后在该组里创建模板。写入模板代码,然后定义模板使用范围XML。就可以在XML中写入tomcat7,自动导入tomcat7插件模板。

3.5.5 maven的java工程从mysql中取数据

  1. 先在mySQL里建立一个数据库,建立表Items,有id,name两个列
  2. 创建一个java工程
  3. 创建一个Items类,有两个私有变量。