# HelloMaven **Repository Path**: souls/HelloMaven ## Basic Information - **Project Name**: HelloMaven - **Description**: maven study - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-04-28 - **Last Updated**: 2020-12-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 自动化构建工具 * 统一的规范 * 解决依赖关系,不清楚的情况,自动依赖 * 发展:Make->Ant->Maven->gradle * Maven是目前最流行的自动化构建工具,对于生产环境下多框架、多模块整合开发有重要作用Maven是一款在大型项目开发过程中不可或缺的重要工具。本课程将帮助你了解Maven的作用,常用命令,如何配置依赖,以及依赖的范围、依赖的传递性、依赖的排除、生命周期等重要概念,以及继承、聚合这样的Maven配置。更会手把手教你在 Eclipse中玩转Maven。 # maven是什么[what] * 服务与java平台的自动化构建工具 ## 工程构建 1. 以java源文件、框架配置文件、jsp、html、图片等资源原材料去生产一个可以运行的项目的过程 2. 生产(编译、部署、搭建) 3. 编译:java源文件(*.java)->编译->class字节码(*.class)->jvm执行 4. 部署:运行一个编译的结果 * 构建环节 1. 清理:删除旧的class字节码文件删除 2. 编译: 将java转为class 3. 测试:自动测试(Junit测试用例) 4. 报告:测试结果 5. 打包:动态web工程打war包,java工程jar包 6. 安装:mvn特定的概念,将打包得到的文件复制到“仓库”中的过程 7. 部署:将jar复制到Servlet容器下,使其运行 * 自动化构建 - 编译、打包、部署、测试 * 安装mvn核心程序 - JAVA_HOME环境变量 - 解压mvn核心程序压缩包,非中文目录 - 配置mvn的环境变量(MAVEN_HOEM/PATH/M2_HOME[向下兼容]) - 运行mvn -v查看版本 * maven核心概念 - 约定的目录 - POM - 坐标 - 依赖 - 仓库 - 生命周期、插件、目标 - 集成 - 聚合 * 创建mvn工程 - 目录结构 - 根目录就是工程名 - src目录源码 - pom.xml,mvn核心配置文件 - main 主程序 - java目录,源程序 - resources目录,存放配置文件 - test 测试程序 - 为什么要遵守约定 - mvn负责项目自动化构建,必须知道源文件在哪里 - 自定义的,有两种 1. 以配置的方式告诉,标签context-param 2. 遵守内部约定,如:log4j.properties(或xml) - 约定>配置>编码 * maven命令 - mvn clean 清理 - mvn compile 编译主程序 - mvn test-compile 编译测试 - mvn test 执行测试 - mvn package 打包 - mvn install 安装 - mvn site 生成站点 - mvn deploy 部署 * 网络问题 - 本地仓库查找,系统用户的家目录.m2\repository - 外网中央仓库下载 - settings.xml中localRepository标签定义仓库位置 * target目录 - classes:编译文件 - mvn-archiver:pom.propertie辅助文件 - surefire-reports:报告文件(测试报告) - *.jar 打好的包 # POM ## 含义 * POM = project Object Model 项目对象模型 * DOM = Document Object Model 文档对象模型 ## pom.xml * 项目的核心文件,与构建相关的一切都在这个文件中配置 ## 标签 * :依赖的范围 - compile: 1. 对主程序是否有效(main),有效; 2. 对测试程序是否有效(test),有效; 3. 是否参与打包,主程序参与; - test 1. 对主程序是否有效,无效 2. 对测试是否有效,有效 3. 不参与打包 4. junit - provided 1. 开发需要 2. 部署不需要,忽略 3. 有servlet容器提供 4. 对主程序是否有效(main),有效; 5. 对测试程序是否有效(test),有效; 6. 是否参与打包,不参与; 7. 不参与部署; # 坐标(gav) * 数学中的坐标 - 在平面中,x,y可以唯一定位一个点 - 在空间中,xyz三个向量,定位空间中的一个点 * maven坐标 - 使用三个向量定位一个工程 - groupid:公司或组织域名倒序+项目名,cn.jj.maven - artifactid:(特征)模块的名称,Hello - version:版本,0.0.1 * 坐标与仓库中路径的对应关系一致 # 仓库 ## 本地仓库:当前电脑上的仓库 ## 远程仓库: #### 局域网(私服)- Nexus * 搭建在局域网范围内使用的 #### 中央仓库 - Central * 架设在Internet上,为全世界工程服务 #### 中央仓库镜像 * 分担中央仓库的流量,提升用户访问速度,如各大洲 ## 保存的内容 * maven工程 1. 自身需要的插件 2. 第三方框架,或是工具的jar包 - 第一jdk - 第二自己 3. 自己开发的maven工程 # 生命周期 * 各个构建环节的执行,按顺序执行 * 在maven核心程序中定义的抽象生命周期,具体任务由插件来完成 * clean、site、default三个生命周期,如:mvn site * 自动化构建,按照如下的特点执行各个阶段,都是从开始位置开始执行 # settings.xml * 在中加入如下,指定jdk版本 ```xml jdk-1.8 true jdk-1.8 1.7 1.7 1.7 ``` # 依赖 ## 依赖传递性 * 直接依赖 * 间接依赖,依赖中的依赖 * 非compile范围的依赖不能传递 ## 依赖的排除 * 设置 - 使用如下: ```xml ``` ## 依赖原则 * 解决Jar包或模块冲突问题 * 依赖路径最短者优先 * 路径相同时,先声明(dependency)这优先 ## 统一管理依赖的版本 * 配置方式 - 使用内使用自定义统一声明版本号 - 在统一版本的位置使用${自定义版本} - 内并非只能配置版本号,也可配置如utf8编码、自定义等其它 ## 继承 * test范围的依赖不能传递,分散使用 * 可以将junit依赖放到父工程中,那么子就可以使用了,也便于修改 * 父工程 ``` 配置依赖管理 junit junit 4.0 test ``` * 子工程中配置以当前文件为基准的父工程pom.xml文件的相对路径 ``` ../Parent/pom.xml ``` ## 聚合 * 先安装(install)父工程 * 在安装子工程 * 一键安装 ``` 聚合配置 子工程的相对路径 ``` ## 部署 * ,配置当前工程特殊设置 * ,当前工程的名字 * ...,配置过程需要的插件 ``` test org.codehaus.cargo cargo-maven2-plugin 1.2.3 tomcat6x 服务路径 8989 cargo-run install run ``` # TIps ## 版本 * SNAPSHOT 不稳定 * RELEASE 稳定 # 参考资料 > 找jar包 * http://mvnrepository.com