Maven

Maven

1. 学习内容

  • 介绍Maven的核心特性
  • 掌握Maven的依赖管理
  • 掌握Maven的打包方式

2. Maven介绍

  • 读音:[ˈmevən] 而不是”马瘟“

  • Maven是项目管理工具,对软件项目提供构建与依赖管理

  • Maven是Apache下的Java开源项目

  • Maven为Java项目提供了统一的管理方式,已成为业界标准

3. Maven解决的问题

  • 大项目需要引用大量的jar包,并且可能出现Jar包版本冲突

    Maven能帮我们管理jar包

  • 不同的集成开发工具(IDEA、Eclipse)开发出来的项目不能互用,(文件结构存在不同)

    即为IDEA开发的项目在Eclipse中不能使用,Maven可以解决这个问题

  • Java项目的输出方式无外乎两种格式:jar包以及war包

    对于这两种格式究竟应该如何打包呢?Maven可以解决这个问题

  • Maven可以帮助我们自动运行单元测试

4. Maven核心特性

  • 项目的一键构建,整个构建过程,使用 maven 一个命令可以轻松完成整个工作。

    构建过程:编译、测试、运行、打包、安装、部署等一系列过程

  • 项目设置遵循统一规则,保证不同开发环境的兼容性(统一的文件结构)

  • 强大的依赖管理,项目依赖组件自动下载、自动更新

    对于项目需要使用的不同产品(Jar包等),传统的做法是去官网下载。

    有了Maven,我们只需要确定Jar包的坐标,就能够自动为我们下载以及更新,提高项目开发效率。

    Jar包的坐标 = 公司名或组织名 + 项目名 + 版本号

    屏幕快照 2020-05-12 下午6.27.11

  • 可扩展的插件机制,使用简单,功能丰富

5. Maven的安装与配置

5.1 Maven的安装(Windows)

  1. 浏览器搜索网站 maven.apache.org

  2. 点击左侧导航栏中的Download

  3. 屏幕快照 2020-05-11 上午11.15.20

    选择图中的apache-maven-3.6.3-bin.zip下载

  4. 解压apache-maven-3.6.3-bin.zip

    屏幕快照 2020-05-11 下午2.46.59

    bin: 存放了 maven 的命令

    boot: 存放了一些 maven 本身的引导程序,如类加载器等

    conf: 存放了 maven 的一些配置文件,如 setting.xml 文件

    lib: 存放了 maven 本身运行所需的一些 jar 包

5.2 Maven的环境配置

  1. 首先,电脑需要安装Java环境,安装JDK1.7+版本

  2. 配置MAVEN_HOME,变量值就是Maven的安装路径(bin之前一级的目录)

    屏幕快照 2020-05-11 下午2.54.34

  3. 配置环境变量Path,添加**%MAVEN_HOME%\bin**,点击确定

    屏幕快照 2020-05-11 下午2.53.57

6. Maven仓库种类及关系

6.1 仓库种类(3类)

  1. 本地仓库:

    • 用来存储从远程仓库或中央仓库下载的插件和 jar 包,

      项目使用一些插件或 jar 包,优先从本地仓库查找

    • 默认本地仓库位置在 ${user.dir}/.m2/repository

      ${user.dir}表示 windows 用户目录(一般为C盘)。

  2. 远程仓库【私服】:

    • 如果本地需要插件或者 jar 包,本地仓库没有,默认去远程仓库下载

    • 远程仓库可以在互联网内也可以在局域网内

  3. 中央仓库:

    • 在 maven 软件中内置一个远程仓库地址 http://repo1.maven.org/maven2 ,它是中央仓库,服务于整个互联网,它是由 Maven 团队自己维护,里面存储了非常全的 jar 包,它包含了世界上大部分流行的开源项目构件。

6.2 仓库间的关系

  1. 项目需要一些插件或者jar包,优先从本地仓库查找。

  2. 本地仓库没有,默认去远程仓库中下载。

    远程仓库可以是不需要联网的局域网内的。

  3. 远程仓库中没有,就在中央仓库中下载【需要联网】。

6.3 自定义本地仓库的路径

在conf文件夹下的settings.xml配置文件中的55行添加如下配置:

<!-- 标签体内容为自定义的本地仓库的地址 -->
<localRepository>/Users/apple/Downloads/maven_repository</localRepository>

6.4 配置阿里云镜像

  • 镜像:mirrors

    • 作用:提高我们下载jar包的速度
    • 国内建议使用阿里云镜像
  • 配置步骤:

    1. 打开Maven的conf目录下的配置文件settings.xml

    2. 159行的<mirrors>标签下添加以下配置:

      <mirror>
          <id>nexus-aliyun</id>  
          <mirrorOf>*,!jeecg,!jeecg-snapshots</mirrorOf>  
          <name>Nexus aliyun</name>  
          <url>http://maven.aliyun.com/nexus/content/groups/public</url> 
      </mirror>
      

7. Maven项目标准目录结构

7.1 最终项目分为几部分

  1. 核心代码部分
  2. 配置文件部分
  3. 测试代码部分
  4. 测试配置文件

7.2 标准目录结构

src/main/java目录 核心代码部分

src/main/resources 配置文件部分

src/test/java目录 测试代码部分

src/test/resources 测试配置文件

src/main/webapp 页面资源,js、css、图片等

target 项目输出位置,编译后的class文件会输出到此目录

pom.xml maven 项目核心配置文件

屏幕快照 2020-05-11 下午9.06.30

src文件夹下:

屏幕快照 2020-05-11 下午7.47.34

8. Maven常用命令

命令行先进入到项目文件夹中,再执行Maven常用命令

8.1 mvn compile

  • compile 是 maven 工程的编译命令,作用是将 src/main/java 下的文件编译为 class 文件输出到 target目录下

  • cmd 进入命令状态,执行 mvn compile,如下图提示成功:

屏幕快照 2020-05-11 下午9.08.06

成功之后,target目录下,存放编译 src/main/java 目录下文件所生成的class文件。

8.2 mvn test

  • test 是 maven 工程的测试命令mvn test,会执行 src/test/java 下的单元测试类

    同时,也会执行 src/main/java 下的类文件

  • cmd 执行 mvn test ,在compile命令的基础上,执行 src/test/java 下单元测试类,下图为测试结果,运行 1 个测试用例,全部成功:

屏幕快照 2020-05-11 下午9.16.35

成功之后,target目录下的classes目录下,存放编译 src/main/java 目录下文件所生成的class文件。test-classes目录下,存放编译 src/test/java 目录下文件所生成的class文件。

8.3 mvn clean

  • clean 是 maven 工程的清理命令,执行 clean 会删除 target 目录及内容

8.4 mvn package

  • package 是 maven 工程的打包命令,对于 java 工程执行 package 打成 jar 包,对于 web 工程打成 war包

    package命令是在test命令的基础上,将工程进行打包

8.5 mvn install

  • install 是 maven 工程的安装命令,执行 install 将 maven 打成 jar 包或 war 包并发布到本地仓库

    install命令是在package命令的基础上,将工程打包发布到本地仓库

8.6 mvn deploy

  • 项目发布

    deploy命令是在install命令的基础上,将工程进行发布

9. Maven的生命周期

  • maven 对项目构建过程分为三套相互独立的生命周期,请注意这里说的是“三套”,而且“相互独立”。

  • 这三套生命周期分别是:

    1. Clean Lifecycle : (清理生命周期)

      在进行真正的构建之前进行一些清理工作。

    2. Default Lifecycle : (默认生命周期)

      构建的核心部分,编译,测试,打包,部署等等。

    3. Site Lifecycle : (站点生命周期)

      生成项目报告,站点,发布站点。

    屏幕快照 2020-05-12 上午10.17.05

10. Maven的概念模型

屏幕快照 2020-05-14 上午10.07.19

10.1 项目对象模型(POM)

  • pom.xml反映了项目对象模型,其中包含3部分:
    1. 项目自身信息
    2. 项目运行所依赖的jar包信息
    3. 项目运行环境信息,比如:JDK、Tomcat信息

10.2 依赖管理模型(Dependency)

  • 项目对象模型中的第二个部分:项目运行依赖jar包信息,

    又独立出来叫做依赖管理模型。

  • Jar包来源于三个仓库:本地仓库,远程仓库,中央仓库

    在公司中,本地仓库中没有从远程仓库中获取,

    远程仓库中没有,要么从中央仓库下载,要么从本地仓库加载

  • Jar包的依赖定义最基本的三个元素:

    <dependency>
      <!-- 公司组织的名称 -->
      <groupId>junit</groupId>
      <!-- 项目名称 -->
      <artifactId>junit</artifactId>
      <!-- 版本号 -->
      <version>4.9</version>
    </dependency>
    

11. IDEA集成maven插件

  1. 第一步

    点击IDEA设置(Preferences),找到Maven进行设置

    屏幕快照 2020-05-18 上午10.14.01

  2. 第二步

    在Maven - Runner 下,输入**-DarchetypeCatalog=internal**

    屏幕快照 2020-05-18 上午10.16.48

12. IDEA创建Maven项目

12.1 使用Maven骨架创建

12.1.1 Java项目
  1. 第一步 创建项目页面,选择quickstart骨架

    屏幕快照 2020-05-19 下午2.41.48

  2. 第二步 设置项目本身的依赖定义

    屏幕快照 2020-05-19 下午2.46.32

  3. 第三步 确认所使用Maven的信息

    屏幕快照 2020-05-19 下午3.11.13

  4. 第四步 确认项目位置信息

    屏幕快照 2020-05-19 下午3.15.01

  5. 查看目录结构

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KBgOnm5W-1602518890409)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\2.PNG)]

    • 默认情况下,骨架创建的Maven项目并不是完整的标准目录结构,

      还缺少配置文件目录src/main/resources 和 src/test/resources。

      需要我们手动添加 。

      例如 添加src/main/resources 步骤:

      右键main文件夹 → new → directory → 文件夹名为resources

      → 右键resources文件夹 → Mark Directory as → 改为resources格式

      添加 src/test/resources 步骤同理,最后改为Test resources格式

12.1.2 Web项目
  1. 第一步 创建项目页面,选择webapp骨架

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UxSODsvo-1602518890410)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\1.PNG)]

  2. 其他步骤与12.1.1相同

12.2 不使用骨架创建

  • 在12.1的第一步,不勾选 Create from archetype 即可

    之后的步骤与12.1相同

13. 指定为Web资源包

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pbrrXjHi-1602518890412)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\3.PNG)]

  • 只有在web资源包下才能创建JSP文件

    那么如何指定一个文件夹变为web资源包呢?

    第一步,选择项目目录结构选项:Project Structure

    如图下图所示,点击+号,选择要变为web资源包的文件夹即可。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LqMRhBp7-1602518890413)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\4.PNG)]

14. 导入项目依赖的jar包

  • 刚使用Maven创建的web项目是没有任何jar包的,需要我们手动配置。

当然,只需要指定jar包的坐标即可,步骤如下:

14.1 在本地仓库中获取

  1. 第一步:打开pom.xml文件

    前提是在本地仓库中有对应的jar包

  2. 在pom.xml文件中设置jar包的依赖定义

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CtVKJcyl-1602518890415)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\5.PNG)]

14.2 在中央仓库中获取

  • 需要联网的条件下进行
  1. 第一步:打开浏览器输入中央仓库的网址

    https://mvnrepository.com/

  2. 第二步:搜索需要的jar包

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T2yU9wbI-1602518890416)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\6.PNG)]

  3. 第三步:选择需要的jar包版本

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ulg8bENY-1602518890418)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\7.PNG)]

  4. 第四步:复制jar的坐标信息

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jDlyU9ZJ-1602518890419)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\8.PNG)]

  5. 第五步:粘贴到项目的pom.xml文件中

    这里就不做图片展示了,也是在标签里进行粘贴。

    粘贴后,项目会自动加载jar包

解决pom.xml文件中设置了jar包坐标,但是项目中依旧无法导入的问题:

  • 点击右侧的Maven → 刷新项目

15. 运行项目

15.1 Maven基本命令使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TlFgMKS-1602518890420)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\9.PNG)]

15.2 Maven运行项目

  1. 点击m形状的按钮

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S0lmQTvP-1602518890422)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\10.PNG)]

  1. 输入命令mvn tomcat7:run,老版本的IDEA可以不用加mvn

15.3 解决jar包冲突问题

  • Maven项目中导入的jar包往往容易和本地tomcat的jar包发生冲突

    解决方案:在依赖定义中,添加依赖范围标签,

    ​ 并设置为provided,仅编译时使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aGNpxv2J-1602518890424)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\11.PNG)]

15.3.1 依赖范围
  • 概念:A依赖B,需要在A的pom.xml文件中添加B的坐标,添加坐标时需要指定依赖范围。依赖范围通过标签中指定

  • 依赖范围包括:

    1. compile:不指定时默认的依赖范围,用于编译、测试和运行

    2. provided:只有在当JDK或者一个容器已提供该依赖之后才使用, provided依赖在

      译和测试时需要,在运行时不需要,比如:servlet api被tomcat容器提供。

    3. runtime:在运行和测试系统的时候需要,但在编译的时候不需要。比如:jdbc的驱动

      包。由于运行时需要所以runtime范围的依赖会被打包。

    4. test:在编译和运行时都不需要,它们只有在测试编译和测试运行阶段可用,比如:

      junit。由于运行时不需要所以test范围依赖不会被打包。

    5. system::system范围依赖与provided类似,但是你必须显式的提供一个对于本地系

      统中JAR文件的路径,需要指定systemPath磁盘路径,system依赖不推荐使用

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HWzvjfIE-1602518890425)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\14.PNG)]

  • 总结

    依赖排行从大到小
    默认引入 的jar包compile 【默认范围 可以不写,编译、测试、运行 都有效】
    servlet-api 、jsp-apiprovided【编译、测试 有效,防止和tomcat下jar冲突】
    jdbc驱动jar包runtime 【测试、运行有效 】
    junittest 【测试有效】

15.4 解决不能编译jsp问题

  • 在运行maven项目时,抛出 Unable to compile class for JSP 错误

    原因:Maven默认的tomcat插件是Tomcat6版本的,不支持JDK1.8以上的版本。

    解决方案:使用Maven的Tomcat7插件,在pom.xml文件中加入以下代码:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NVXulDm5-1602518890427)(G:\学习笔记\JavaWeb\黑马Maven\maven笔记图\12.PNG)]

15.4.1 设置tomcat7插件
<!-- 
	加入的代码就是使用了tomcat7插件
 	当然tomcat6插件依然存在,可以修改tomcat7的端口号:
	指定<configuration>标签即可
-->
<build>
	<plugins>
    	<plugin>
            <groupId>org.apache.tomcat.maven</groupId>
            <artifactId>tomcat7-maven-plugin</artifactId>
            <version>2.2</version>
            <!-- 修改端口号 --> 
            <configuration>
                <port>8888</port>
            </configuration>
        </plugin>
    </plugins>
</build>
15.4.2 设置编译时的JDK插件
<!-- 设置编译时的插件为JDK1.8 -->
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
                <encoding>utf-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>

16.IDEA添加模板代码

  • 以在pom.xml文件中增加tomcat7插件为例,如果我们忘记了代码怎么写,那怎么办?

    解决方案:在IDEA中添加模板代码

    步骤如下:

    1. 第一步,打开IDEA的File → settings

    2. 第二步,开始设置

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-asetzXJG-1602518890428)(maven笔记图/13.PNG)]

    3. 如何使用模板?

      因为已经设置了在xml中才能使用该模板,所以在xml文件中需要用到该模板的位置,

      输入该模板名tomcat7,IDEA会自动显示

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值