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. 安装
- 检查JAVA_HOME,echo %JAVA_HOME%
- 下载Maven压缩包,解压到一个非中文的目录下
- 配置MAVEN_HOME放到path
- mvn -v查看
2. 核心概念
1. 目录结构
- 根目录是工程名
- src 源码
- pom.xml 核心配置
- main 主程序
- test 测试程序
- resources 配置文件
2. POM
3. 坐标(GAV)
- groupId:公司域名倒叙+项目名
- artifactId:模块的名称
- version:版本,SNAPSHOT快照版本,更新很快,不稳定;RELEASE,正式版
- 仓库中和jar包同级的pom文件记录了该jar包的坐标以及依赖的其它jar包
- jar包名:artifactId + version
4. 依赖
- 依赖范围(scope)
- compile(默认):对主程序和测试程序有效,参与打包和部署,开发,部署,运行的时候都需要
- test:只对测试程序有效,不参与打包和部署,如junit
- provided:对主程序和测试程序有效,开发的时候要,不参与打包和部署,由servlet容器提供,如servlet-api.jar
- 依赖的传递性
- 分为直接依赖和传递过来的依赖
- 非compile范围的依赖不能传递
- 依赖的排除:<exclusions><exclusion><groupId></groupId><artifactId></artifactId></exclusion></exclusions>
- 相同的 GA,路径最短者优先;路径相同时,先声明这优先,即<dependency>在前
- 统一管理依赖的版本:<properties></properties>,不只版本号,任何自定义的标签都可以用 ${} 来引用
5. 仓库
- 本地仓库
- 远程仓库
- 局域网(私服)
- 中央仓库
- 中央仓库的镜像
- 查找顺序:本地仓库->私服->中央仓库,从中央仓库下完后,会保存到私服,下次就不用下了
- 仓库保存的内容
- maven自身所需要的插件
- 第三方框架或工具的jar包
- 我们自己开发的maven工程
- 本地仓库默认:[用户目录].m2\repository
- 修改本地仓库:[maven目录]\conf\settings.xml:修改<localRepository>
6. 生命周期/插件/目标
- maven只是定义了生命周期,具体工作由插件完成,插件本身不在maven核心程序中。
- clean:pre-clean clean post-clean
- default
- site:pre-site site post site
- 不管执行哪一个阶段,都是从最开始执行
- 阶段/目标/插件的关系,如:test-compile/testCompile/maven-compiler-plugin,在执行mvn命令后,可以看到输出的详细信息
- 可以将目标看作是调用插件功能的命令
- 自动化部署
配置build,build用于配置当前工程构建工程中的特殊设置,要自动部署,需要在这配置cargo插件,还有生命周期的阶段,如 install,和插件的目标(goals),如 run
7. 继承
统一管理各个模块的依赖版本,比如 junit 是 test 依赖,不能传递,很容易造成版本的不一致,
- 父工程打包的方式是pom
- 子工程声明对父工程的引用<parent>父工程的GAV</parent>,里面还有一个<relativePath>父工程的pom.xml的相对路径</relativePath>
- 子工程的GV去掉
- 父工程配的是<dependencyManagement><dependencies></dependencies></dependencyManagement>,声明GAV
- 子工程只声明GA
- 如果引用了父工程的依赖,则必须安装了父工程,才能构建子工程,如果没有引用依赖(自己声明版本),则不用管父工程是否安装
8. 聚合
一键安装各个模块工程。
- 在一个总的聚合工程中,配置各个参与聚合的模块,父工程可以做,也可以用其它工程做,继承与聚合是毫无关系的,不过大部分情况还是用父工程做。
- modules -> module -> 各个模块的相对路径(顺序无影响)
- 聚合工程中使用 mvn install
9. settings.xml
- 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工程
- 如果new的时候没有maven project:window -> perspective -> customize perspective -> menu visibility -> new -> maven project
- new -> maven project -> 勾选 create... 和 use... -> GAVP -> Finish
3. 创建Maven版Web工程
- new -> maven project -> 勾选 create... 和 use... -> 打包方式改成 war -> Finish
- 右键 properties -> project facets -> 去掉 dynamic web module -> apply -> 再勾上 -> 点击下面的 Further Conf... -> 修改 Content directory 为 src/main/webapp -> 一直确定
- 新建的jsp上面的页面会报错,可以通过以下两种方式解决
- 增加项目运行环境:build path -> add library -> server runtime -> 选tomcat
- pom.xml 中加入依赖 G:javax.servlet A:servlet-api,注意范围是 provided
4. 执行Maven命令
- 选择 pom.xml ,右键run as
- 没有的命令,点击 run build...,goals中输入命令
浙公网安备 33010602011771号