美文网首页
框架3 Maven

框架3 Maven

作者: 莫小归 | 来源:发表于2019-02-20 22:50 被阅读0次

参考:
极客学院Maven教程 http://wiki.jikexueyuan.com/project/maven/overview.html
关于Maven http://www.trinea.cn/android/maven/
Maven依赖 https://segmentfault.com/a/1190000000640821
Maven的setting.pom配置 https://www.cnblogs.com/yanghongfei/p/6995613.html
官方文档 http://maven.apache.org/settings.html

一.Maven概述

1.Maven是什么
  • 项目管理和整合工具
  • 简化工程构建过程,帮助完成 构建、文档生成、报告、依赖、SCMs、发布、分发、邮件列表 等工作
  • 构建(Build)包括编译、运行单元测试、生成文档、打包和部署等一系列工作
  • Maven遵循约定优于配置的原则,为工程提供了合理的默认过程。如下表格展示了工程源码文件和资源文件的默认配置,假定${basedir}表示工程目录
配置项 默认值
source code ${basedir}/src/main/java
resources ${basedir}/src/main/resources
Tests ${basedir}/src/test
Compiled byte code ${basedir}/target
distributable JAR ${basedir}/target/classes
2.Maven仓库(Repository)
  • 仓库是一个可以存储所有的工程Jar/Library Jar/插件的位置(如目录),包含3类:
    1)本地仓库:本地机器保存依赖Jar包的文件夹
    2)中央仓库:Maven社区提供的网络仓库,包含你大量常用库
    3)远程仓库:开发人员自行定制的网络仓库
  • 构建时Maven按照 本地---中央---远程 的顺序查找依赖的库
3.Maven插件
  • Maven是一个依赖插件执行的框架,每个任务实际上由插件完成
  • Maven提供以下两种类型插件
类型 描述
Build plugins 构建时执行,在pom.xml的元素中配置
Reporting plugins 网站生成过程中执行,在pom.xml的元素中配置
  • Maven常用插件如下
插件 描述
clean 构建后清理目标文件。删除目标目录
compiler 编译Java源文件
surefile 运行JUnit单元测试。创建测试报告
jar 从当前工程中构建Jar文件
war 从当前工程中构建War文件
javadoc 为工程生成Javadoc
antrun 从构建过程的任意一个阶段中运行一个ant任务的集合
4.pom.xml
  • pom代表工程对象模型,是使用Maven工作时的基本组件
  • pom包含关于工程和各种配置细节的信息,Maven使用这些信息构建工程
  • pom中常用配置包含
    1)project dependency
    2)plugins
    3)goals
    4)build profiles
    5)project version
    6)developers
    7)mailing list
  • pom通过groupId:artifactId:version确定仓库中的工程
节点 描述
groupId 工程组标识
artifactId 工程标识,通常是工程名称
version 工程版本号
5.setting.xml
  • 全局配置和用户配置
    1)全局配置位置:maven安装目录/conf/settings.xml
    2)用户配置位置:用户主目录/.m2/settings.xml
  • 主要配置项
    1)localRepository:本地仓库,默认为用户主目录/.m2/repository
    2)offline:构建系统是否需要离线运行,默认true
    3)pluginGroups:插件默认组织的Id,默认包含org.apache.maven.plugins
    4)proxies:代理
    5)servers:服务端设置,包括服务器id、鉴权用户名、鉴权密码、鉴权使用私钥的位置等
    6)mirrors:为仓库列表配置的下载镜像,包括镜像id、镜像名称、URL等
    7)profiles:根据环境参数来调整构建配置的列表,包括激活(activation)、仓库(repositories)、插件仓库(pluginRepositories)、属性(properties)共四个子元素。其中activation节点配置profile的激活条件,常见条件有根据os(操作系统)、jdk(jdk版本)、property(属性值)、file(文件是否存在)
    8)repositories:远程仓库列表

二.Maven构建生命周期和常用命令

1.构建生命周期
  • 构建生命周期是一组阶段的序列(sequences of phases)
  • 每个阶段定义了目标被执行的顺序
  • 典型的一个Maven构建生命周期包括
    1)prepare-resources(资源拷贝)
    2)compile(编译)
    3)package(打包)
    4)install(安装)
2.Maven三个标准生命周期
  • clean:处理项目的清除
    1)pre-clean
    2)clean
    3)post-clean
  • default(or build):处理项目的部署
  • site:处理项目的文档生成
    1)pre-site
    2)site
    3)post-site
    4)site-deploy
3.default(or Build)生命周期
生命周期阶段 描述
validate 检查工程配置是否正确,完成构建过程的所有必要信息是否能够获取到
initialize 初始化构建状态,例如设置属性
generate-sources 生成编译阶段需要包含的任何源码文件
process-sources 处理源代码
generate-resources 生成工程包中需要包含的资源文件
process-resources 拷贝和处理资源文件到目的目录中,为打包阶段做准备
compile 编译工程源码
process-classes 处理编译生成的文件,例如Java Class字节码的加强和优化
generate-test-sources 生成编译阶段需要包含的任何测试源代码
process-test-sources 处理测试源代码
test-compile 编译测试源代码到测试目的目录
process-test-classes 处理测试代码文件编译后生成的文件
test 使用适当的单元测试框架(如JUnit)运行测试
prepare-package 在打包之前,完成打包的准备工作
package 获取编译后的代码,按照可发布的格式进行打包
pre-integration-test 在集成测试执行之前,执行所需的操作。例如,设置所需的环境变量
integration-test 处理和部署必须的工程包到集成测试能够运行的环境中
post-integration-test 在集成测试被执行后执行必要的操作。例如,清理环境
verify 运行检查操作来验证工程包是有效的,并满足质量要求
install 安装工程包到本地仓库,该仓库可作为本地其他工程的依赖
deploy 拷贝最终的工程包到远程仓库中,以共享给其他开发人员和工程
4..Maven常用命令
  • mvn test-compile 编译测试代码
  • mvn test 运行程序中的单元测试
  • mvn compile 编译项目
  • mvn package 打包(target目录生成 maven-quickstart-1.0.SNAPSHOT.jar 文件)
  • mvn install 打包并安装到本地仓库(本地仓库新增 maven-quickstart-1.0.SNAPSHOT.jar 文件)
  • mvn eclipse:eclipse 生成eclipse项目文件
  • mvn eclipse:clean 清除eclipse项目文件
  • mvn site 生成项目相关信息的网站

三.Maven依赖

1.dependency标签
  • groupId,artifactId,version:依赖的基本坐标
  • type:依赖的类型,默认为jar
  • scope:依赖范围
  • optional:标记依赖是否可选
  • exclusions:用来排除传递性依赖
2.依赖范围
  • Maven通过作用域(scope)使程序对外部的依赖随程序所处的阶段和应用场景而变化
  • scope包括compile(编译范围),provided(已提供范围),runtime(运行时范围),test(测试范围),system(系统范围)
Scope compile classpath test classpath runtime classpath 例子
compile Y Y Y spring-core
test Y JUnit
provided Y Y servlet-api
runtime Y Y JDBC驱动
system Y Y
3.传递性依赖
  • A依赖于B,B依赖于C,则C是A的传递性依赖
  • 传递性依赖产生依赖冲突时将进行依赖仲裁
  • <dependency>的<exclusions>元素可排除引起冲突的依赖
4.依赖仲裁
  • 第一原则:最短路径优先
    项目有依赖关系A->B->C->X(1.0)和A->D->X(2.0),则将使用X(2.0)
  • 第二原则:第一声明优先
    项目有依赖关系A->B->Y(1.0)和A->C->Y(2.0),若B的依赖声明在C之前,则使用Y(2.0)

四.其他

1.模块聚合和项目继承
  • 模块聚合:使用<module>元素声明要聚合的模块
  • 项目继承:子模块中定义<parent>元素

千古风流今在此,万里功名莫放休。君王三百州

相关文章

网友评论

      本文标题:框架3 Maven

      本文链接:https://www.haomeiwen.com/subject/kozhyqtx.html