在目前的公司中,几乎所有项目都是使用Maven

一、Maven的介绍

Maven—内行,专家的意思,Maven的两大作用:依赖管理项目构建
大白话讲:
依赖管理—管理Jar包。
项目构建—帮我们创建项目,运行项目,测试项目,编译项目,打包项目。一个项目一般都经历从生到上线这样一个过程,我们的Maven帮助我们简化步骤。
负责上线的同事:编写了一个脚本文件,可以自动的识别本次大家更改的代码,并且自动抽取出来,创建对应的文件夹,并且可以自动上传至服务器,重启服务。使用Ant工具编写的脚本。
Ant能够完成的事情,其实就是项目构建。已经属于一个老的技术了。目前比较流行的是Maven.

二、Maven的安装

https://maven.apache.org/
image.png
第一步:解压到一个没有中文和空格的一个目录下
image.png
第二步:检查你的Java环境是否可以使用
因为Maven的运行需要依赖java环境。
image.png
第三步:配置Maven路径。
image.png
image.png
最后一步:验证配置是否生效 ,新打开一个黑窗口,输入 mvn -v 看到有版本号信息,就说明正常。
image.png

三、关于Maven的仓库

maven作为一个管理jar包的工具,jar包需要下载并存放到某个地方,这里面有由三个仓库。
image.png
我们目前作为一个新入门的人,本地仓库一个jar包都没有,所以我们需要去互联网上下载,但是互联网上的地址是一个国外的地址,默认下载速度非常的慢,所以我们需要将地址修改为国内的地址—阿里云的maven 仓库地址。
学习如何配置:
1、如何修改本地仓库地址
image.png
在你需要指定的地方创建一个文件夹,名字maven_repository
D:\tool\maven_repository
打开你的settings.xml文件夹,找到如下的地方:
image.png
2、将远程仓库地址,修改为阿里云 settings.xml 中 mirrors 标签内复制如下代码即可

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

四、idea如何和本地的maven进行关联呢?

第一步:
image.png
第二步:settings
image.png
第三步:配置other settings
settings配置的是当前的项目,对以后新建的项目不起作用,但是我们希望以后新建的项目都使用我们本地的maven以及maven仓库,就需要配置other settings
image.png
image.png

五、使用idea如何新建项目

1、新建java项目

image.png
image.png
image.png
image.png
以上的方式是使用骨架帮我们创建java项目,创建成功以后,pom.xml中以及项目中会自带一些内容,可以酌情删除,比如pom.xml可以只保留如下部分。

  1. <modelVersion>4.0.0</modelVersion>
  2. <groupId>com.qfedu</groupId>
  3. <artifactId>JavaDemo</artifactId>
  4. <version>1.0-SNAPSHOT</version>
  5. <name>JavaDemo</name>
  6. <!--每个项目都需要指定打包方式,java项目打包方式是jar , web项目 是war
  7. 还有一种打包方式是pom,以后再讲
  8. -->
  9. <packaging>jar</packaging>

接着演示,如何在项目中导入一个jar包?
https://mvnrepository.com/ 搜索你想导入的jar包的名称,比如mysql
image.png
image.png
可以在项目中的pom.xml 中将需要的jar包通过坐标的形式,一个个全部粘贴进来

<dependencies>
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.37</version>
    </dependency>
</dependencies>

担心的问题:我怎么知道我想要的jar包坐标是什么?
一般在企业中,没有一个项目是说让你从头到尾把这个项目中需要的坐标一个个找出来的,都是别人给的pom.xml

2、新建java web项目(重点)

1)不使用骨架创建web项目(我建议使用该形式)

    因为使用骨架给出来的东西,很多都需要,还需要手动的删除。<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631947901198-1b3fb585-f3a2-46e0-b446-0b71617a6a6b.png#clientId=uab100e35-15ba-4&from=paste&height=585&id=u76410704&margin=%5Bobject%20Object%5D&name=image.png&originHeight=585&originWidth=886&originalType=binary&ratio=1&size=71819&status=done&style=none&taskId=u216f5eb2-dbdf-48ec-adc7-df132da2a93&width=886)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631947963653-d879a284-279e-4e31-9caa-4e29ddc23616.png#clientId=uab100e35-15ba-4&from=paste&height=167&id=ue57525a5&margin=%5Bobject%20Object%5D&name=image.png&originHeight=167&originWidth=622&originalType=binary&ratio=1&size=6678&status=done&style=none&taskId=ubefc2c58-e444-429f-9d38-b9cd26ef6cb&width=622)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631948003122-07bfcf06-53f6-4a94-a8a0-7dfe0a7443ff.png#clientId=uab100e35-15ba-4&from=paste&height=163&id=u72b75ffe&margin=%5Bobject%20Object%5D&name=image.png&originHeight=163&originWidth=884&originalType=binary&ratio=1&size=7978&status=done&style=none&taskId=ub2fa6fb9-235d-4cb5-a342-989463024e5&width=884)<br />创建完之后,pom文件中少了很多杂七杂八的配置,整个项目也不需要一开始就下载很多的jar包和插件。<br />但是也有弊端,比如说没有web项目需要的内容,需要手动的配置:**这个是重点**<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631948331369-3112fd60-e058-40b7-8004-215be8d645a7.png#clientId=uab100e35-15ba-4&from=paste&height=495&id=u19f2ac6c&margin=%5Bobject%20Object%5D&name=image.png&originHeight=495&originWidth=1129&originalType=binary&ratio=1&size=61426&status=done&style=none&taskId=u4700ff5e-5362-4835-bfe0-0fb3087f737&width=1129)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631948373954-22cd1d6d-0959-402b-8dfe-5ed07a26d448.png#clientId=uab100e35-15ba-4&from=paste&height=577&id=u1ef8f9b6&margin=%5Bobject%20Object%5D&name=image.png&originHeight=577&originWidth=298&originalType=binary&ratio=1&size=26234&status=done&style=none&taskId=u4d44d81b-7ca0-4046-aaf6-c5f4c087076&width=298)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631948579544-1ae445e5-abcc-4669-bc36-9305c6d7f527.png#clientId=uab100e35-15ba-4&from=paste&height=430&id=u2bacad0f&margin=%5Bobject%20Object%5D&name=image.png&originHeight=430&originWidth=911&originalType=binary&ratio=1&size=43830&status=done&style=none&taskId=ubb77d2f3-9f30-4b1f-88c3-9e60b13f25c&width=911)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631948672089-fa3ebdbb-1e1a-480d-a3bd-1a58946dacab.png#clientId=uab100e35-15ba-4&from=paste&height=365&id=u5f4cfe33&margin=%5Bobject%20Object%5D&name=image.png&originHeight=365&originWidth=792&originalType=binary&ratio=1&size=28161&status=done&style=none&taskId=u8248c0dd-18e6-4e75-a3ac-7556e6c5644&width=792)<br />![image.png](https://cdn.nlark.com/yuque/0/2021/png/22131196/1631948729189-59bc8a2e-ae8b-44e0-bcc8-90accbebd29b.png#clientId=uab100e35-15ba-4&from=paste&height=446&id=u39f54847&margin=%5Bobject%20Object%5D&name=image.png&originHeight=446&originWidth=423&originalType=binary&ratio=1&size=16967&status=done&style=none&taskId=uf74f05f8-66f6-4e47-9571-c536da5e1f6&width=423)

看到创建出来的项目,目录如下就说明成功了。
image.png


2)使用骨架创建web项目

image.png
image.png
使用骨架,优点是帮我们创建好了webapp ,缺点是需要我们自己创建编写java代码的文件夹,以及需要删除不必要的配置。
在main文件夹下,创建一个java文件夹,并且将其修改为源代码文件目录
image.png
创建配置文件的文件夹resources,修改其文件夹的属性:
image.png
总结:不管使用不使用骨架都不是特别的方便,建议同学们不使用骨架,自己创建webapp

六、依赖管理

遇到了什么问题,导致非得使用Maven?
目前的项目,通过项目导入包的方式,来编写项目,会遇到如下问题:
image.png
1、我们的项目中Jar包占比很大,将来会更大。
2、jar包之间有版本问题(jar包会打架) jar的版本很老,tomcat版本很新,会不会有问题?
到公司,一定要注意工具与工具之间的协调问题。—开发的环境一定要跟服务器的环境非常接近。
3、我们每做一个项目,都需要将jar包重新导入到新的项目中,每个项目之间不能公用。
Maven横空出世,帮你解决以上问题。

七、实战一下【如何使用Maven项目编写servlet】

1、导入包【通过我们的坐标导入包】

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

2、编写servlet
3、关联tomcat
image.png
image.png
后面的操作跟之前一模一样。
如果想使用注解的形式,可以提高版本号
image.png

八、说一说scope — 依赖范围

A 依赖 B,需要在 A 的 pom.xml 文件中添加 B 的坐标,添加坐标时需要指定依赖范围,依赖范围包括:

    compile:编译范围,指 A 在编译时依赖 B,此范围为默认依赖范围。编译范围的依赖会用在编译、测试、运行,由于运行时需要所以编译范围的依赖会被打包。

    provided:provided 依赖只有在当JDK 或者一个容器已提供该依赖之后才使用, provided 依赖在编译和测试时需要,在运行时不需要,比如:servlet api 被tomcat 容器提供。

    runtime:runtime   依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以runtime 范围的依赖会被打包。

    test:test 范围依赖 在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用, 比如:junit。由于运行时不需要所以test 范围依赖不会被打包。

system:system 范围依赖与 provided 类似,但是你必须显式的提供一个对于本地系统中JAR
文件的路径,需要指定 systemPath 磁盘路径,system 依赖不推荐使用。

HQComing 项目,依赖了 ValidateCode.jar 需要编写一个坐标的。
不写 依赖范围就是 compile , HQComing 这个项目,在任何时候都会使用到ValidateCode.jar
如果是provided 依赖在编译和测试时需要,在运行时不需要 记住: servlet 和 jsp两个jar包,都是需要指定scope = provided
runtime 依赖在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc 的驱动包。由于运行时需要所以runtime 范围的依赖会被打包。
只有在测试编译和测试运行阶段可用, 比如:junit。
system 一般用于远程仓库没有这个jar包,但是你又需要使用,可以使用system指定。
我们只需要记住如下几个特殊情况即可:

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.37</version>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

以上内容,是maven 入门级的内容,Maven高级部分随后再讲。

九、项目构建

学习几个命令
image.png
clean : 清除maven中编译过的文件
指的就是删除 target 目录
compile: 编译maven项目
重新生成一个target文件夹
test : 运行maven项目中的单元测试
帮我们运行整个项目中的单元测试方法,并且生成一个测试报告
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.239 sec
package: 将你当前的maven项目打包(jar war)
image.png
install : 安装,将你的项目安装到本地仓库
image.png
image.png