Maven学习笔记

B站-尚硅谷-Maven零基础入门教程(一套轻松搞定maven工具)

一、为什么要学Maven

1. 目前掌握的技术

  • 表述层
    • 视图层:H5/CSS/JS/JSP
    • 控制层:Servlet/Action/Handler
  • 业务逻辑层:Spring IOC/AOP
  • 持久化层:JDBC/DBUtils/Spring JDBCTempalte/Hibefrnate/MyBatis

2. 目前的问题

  • 一个项目就是一个工程,当项目庞大时,不适合用 package 划分项目,不利于管理
  • 项目中的 jar包以及依赖的其它 jar包 需要手动添加到 lib 下,还需要自己去找 jar包,太麻烦
  • 相同的 jar 包重复出现在不同的项目中,占空间

二、Maven是什么

1. 服务于 Java 的自动化构建工具,本身就是 Java 写的。

2. 构建

生产一个可以运行的项目。

  • 清理
  • 编译
  • 测试
  • 报告:测试执行的结果
  • 打包:动态web工程打war包,java工程打jar包
  • 安装:将打包好的文件复制到仓库
  • 部署:将war包复制到servlet容器下

三、Maven使用

1. 安装

  1. 检查JAVA_HOME,echo %JAVA_HOME%
  2. 下载Maven压缩包,解压到一个非中文的目录下
  3. 配置MAVEN_HOME放到path
  4. mvn -v查看

2. 核心概念

1. 目录结构

  1. 根目录是工程名
  2. src 源码
  3. pom.xml 核心配置
  4. main 主程序
  5. test 测试程序
  6. resources 配置文件

2. POM

3. 坐标(GAV)

  1. groupId:公司域名倒叙+项目名
  2. artifactId:模块的名称
  3. version:版本,SNAPSHOT快照版本,更新很快,不稳定;RELEASE,正式版
  4. 仓库中和jar包同级的pom文件记录了该jar包的坐标以及依赖的其它jar包
  5. jar包名:artifactId + version

4. 依赖

  1. 依赖范围(scope)
  • compile(默认):对主程序和测试程序有效,参与打包和部署,开发,部署,运行的时候都需要
  • test:只对测试程序有效,不参与打包和部署,如junit
  • provided:对主程序和测试程序有效,开发的时候要,不参与打包和部署,由servlet容器提供,如servlet-api.jar
  1. 依赖的传递性
  • 分为直接依赖和传递过来的依赖
  • 非compile范围的依赖不能传递
  • 依赖的排除:<exclusions><exclusion><groupId></groupId><artifactId></artifactId></exclusion></exclusions>
  • 相同的 GA,路径最短者优先;路径相同时,先声明这优先,即<dependency>在前
  1. 统一管理依赖的版本:<properties></properties>,不只版本号,任何自定义的标签都可以用 ${} 来引用

5. 仓库

  1. 本地仓库
  2. 远程仓库
  • 局域网(私服)
  • 中央仓库
  • 中央仓库的镜像
  1. 查找顺序:本地仓库->私服->中央仓库,从中央仓库下完后,会保存到私服,下次就不用下了
  2. 仓库保存的内容
  • maven自身所需要的插件
  • 第三方框架或工具的jar包
  • 我们自己开发的maven工程
  1. 本地仓库默认:[用户目录].m2\repository
  2. 修改本地仓库:[maven目录]\conf\settings.xml:修改<localRepository>

6. 生命周期/插件/目标

  1. maven只是定义了生命周期,具体工作由插件完成,插件本身不在maven核心程序中。
  2. clean:pre-clean clean post-clean
  3. default
  4. site:pre-site site post site
  5. 不管执行哪一个阶段,都是从最开始执行
  6. 阶段/目标/插件的关系,如:test-compile/testCompile/maven-compiler-plugin,在执行mvn命令后,可以看到输出的详细信息
  7. 可以将目标看作是调用插件功能的命令
  8. 自动化部署
    配置build,build用于配置当前工程构建工程中的特殊设置,要自动部署,需要在这配置cargo插件,还有生命周期的阶段,如 install,和插件的目标(goals),如 run

7. 继承

统一管理各个模块的依赖版本,比如 junit 是 test 依赖,不能传递,很容易造成版本的不一致,

  1. 父工程打包的方式是pom
  2. 子工程声明对父工程的引用<parent>父工程的GAV</parent>,里面还有一个<relativePath>父工程的pom.xml的相对路径</relativePath>
  3. 子工程的GV去掉
  4. 父工程配的是<dependencyManagement><dependencies></dependencies></dependencyManagement>,声明GAV
  5. 子工程只声明GA
  6. 如果引用了父工程的依赖,则必须安装了父工程,才能构建子工程,如果没有引用依赖(自己声明版本),则不用管父工程是否安装

8. 聚合

一键安装各个模块工程。

  1. 在一个总的聚合工程中,配置各个参与聚合的模块,父工程可以做,也可以用其它工程做,继承与聚合是毫无关系的,不过大部分情况还是用父工程做。
  2. modules -> module -> 各个模块的相对路径(顺序无影响)
  3. 聚合工程中使用 mvn install

9. settings.xml

  1. profiles

3. 常用Maven命令

1. mvn clean

2. mvn complie

3. mvn test-compile

4. mvn test

5. mvn package

6. mvn install

自己开发的项目使用 mvn install 可以放到本地仓库

7. mvn site

生成站点

四、Eclipse中使用maven

1. 设置

eclipse修改了工作区后要重新设置maven的 installations,User Settings

2. 创建Maven版Java工程

  1. 如果new的时候没有maven project:window -> perspective -> customize perspective -> menu visibility -> new -> maven project
  2. new -> maven project -> 勾选 create... 和 use... -> GAVP -> Finish

3. 创建Maven版Web工程

  1. new -> maven project -> 勾选 create... 和 use... -> 打包方式改成 war -> Finish
  2. 右键 properties -> project facets -> 去掉 dynamic web module -> apply -> 再勾上 -> 点击下面的 Further Conf... -> 修改 Content directory 为 src/main/webapp -> 一直确定
  3. 新建的jsp上面的页面会报错,可以通过以下两种方式解决
  • 增加项目运行环境:build path -> add library -> server runtime -> 选tomcat
  • pom.xml 中加入依赖 G:javax.servlet A:servlet-api,注意范围是 provided

4. 执行Maven命令

  1. 选择 pom.xml ,右键run as
  2. 没有的命令,点击 run build...,goals中输入命令
posted @ 2021-12-05 21:32  君子键  阅读(47)  评论(0)    收藏  举报