• Maven学习归纳(三)——依赖添加依赖排除与项目整合


    一、Maven的坐标

    1. 坐标的定义

    数学意义上的坐标可以是平面上的(x,y)也可以是空间上的(x,y,z),都可以确定一个质点的位置和方向。

    Maven中有很多构件,为了能够自动化解析任何一个构件,需要将它们做成唯一标识,即依赖管理的基础——坐标,通过坐标确定jar的位置

    2. 为什么需要坐标

    在没有坐标之前,当我们需要一些jar包的时候,总需要到各个网站上下载。这样一来,就浪费了很多时间,提高了程序开发成本。

    另一方面,下载没有统一规范,导致版本不统一等,又严重提高了运维成本。

    拥有了统一规范,就可以把查找工作交给机器。

    3. 定义的规则

    因为实现了统一管理,Maven定义了一组规则,让机器基于预定的规则去自动实现下载jar包。

    只要提供了正确的坐标,Maven就能找到对应的jar包

    Maven坐标的元素包括:

    groupId:组织的标识

    artifactId:项目的名称

    version:项目的当前版本

    packageing:项目的的打包发格式,分为jar pom war 三种

    classifier:构建输出附件

    二、Maven的生命周期

    Maven生命周期就是为了对所有的构建过程进行抽象和统一,包括项目清理,初始化,编译,打包,测试,部署等几乎所有构建步骤

    1. 三个生命周期

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

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

    site:      Site Lifecycle生成项目报告,站点,发布站点。

    2. 三个周期的关系

    每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就调用这些生命周期阶段

    较之于生命周期阶段的前后依赖关系,三套生命周期本身是相互独立的,用户可以仅仅调用clean生命周期的某个阶段,或者仅仅调用default生命周期的某个阶段,而不会对其他生命周期产生任何影响。

    3. clean周期解析

    pre-clean 执行一些需要在clean之前完成的工作

    clean 移除所有上一次构建生成的文件

    post-clean 执行一些需要在clean之后立刻完成的工作

    在一个生命周期中,运行某个阶段的时候,它之前的所有阶段都会被运行

    也就是说,"mvn clean"等同于 mvn pre-clean clean ,

    如果我们运行 mvn post-clean ,那么 pre-clean,clean 都会被运行。

    这是Maven很重要的一个规则,可以大大简化命令行的输入。

    4. default周期解释

    validate 验证项目是否正确和所有需要的相关资源是否可用,这包含对pom.xml文件树的验证

    default  生命周期定义了真正构件时所需要执行的所有步骤,它是生命周期中最核心的部分,它包含的阶段如下:

    initialize 初始化构建

    generate-sources 生成源码

    process-sources 处理源代码

    generate-resources  生成资源

    process-resources 处理项目主资源文件。对src/main/resources目录的内容进行变量替换等工作后,复制到项目输出的主classpath目录中。

    compile 编译项目的主源代码

    process-classes

    generate-test-sources

    process-test-sources 处理项目测试资源文件

    generate-test-resources

    process-test-resources 处理测试的资源文件

    test-compile 编译项目的测试代码

    process-test-classes

    test 使用单元测试框架运行测试,测试代码不会被打包或部署

    prepare-package 做好打包的准备

    package 接受编译好的代码,打包成可发布的格式

    pre-integration-test 前集成测试

    integration-test  集成测试

    postintegration-test 后集成测试

    verify 检验

    install 将包安装到Maven本地仓库,供本地其他Maven项目使用

    deploy 将最终的包复制到远程仓库,供其他开发人员和Maven项目使用

    5. site周期解释

    site生命周期的目的是建立和发布项目站点,Maven能够基于POM所包含的信息,自动生成一个友好的站点,方便团队交流和发布项目信息。该生命周期包含如下阶段:

    pre-site 执行一些在生成项目站点之前需要完成的工作

    site       生成项目站点文档

    post-site 执行一些在生成项目站点之后需要完成的工作

    site-deploy 将生成的项目站点发布到服务器上

    运行任何一个阶段的时候,它前面的所有阶段都会被运行,这也就是为什么我们运行mvn install 的时候,代码会被编译,测试,打包。此外,Maven的插件机制是完全依赖Maven的生命周期的,因此理解生命周期至关重要。

    三、Maven的依赖添加

    例如:我想要完成文件上传到功能,就需要用到Fileupload的包,需要如何做呢?

    在maven的官网上搜索要下载的包,http://mvnrepository.com/

    点击进去之后,再复制下面这个框的内容

    复制黏贴到pom.xml上面

    结果如下:成功把jar包进去

    仔细观察,还发现此时还多了commons-io-2.2.jar???为什么???这就涉及到了“依赖”

     当A jar包需要用到B jar包中的类时,我们就说A对B有依赖。

    如本例:commons-fileupload-1.3.3jar依赖于commons-io-2.2.jar。

    当前工程会到本地仓库中根据坐标查找它所依赖的jar包。

    配置的基本形式时使用,dependency标签指定目标jar包的坐标。

    四、Maven的依赖排除

    有时候为了确保程序正确,可以将有可能重复的间接依赖排除

    例如,我不想要刚刚添加的commons-io-2.2.jar了

    复制并黏贴到pom.xml上,注意要跟原来引出依赖的原包处于同一个<dependency></dependency>范围

    看到项目结构上已经显示没有commons-io-2.2.jar了

    五、Maven的项目整合

    如何把两个maven项目整合在一个呢?

    因为两个项目不能相互沟通,必然需要,将一个放入仓库中的

    如上,我想将项目 HelloWorld2 依赖项目 HelloWorld ,就需要将被依赖的HelloWorld2放入仓库install下

    如下所示:

    然后对HelloWrold的项目进行install下,把它放入仓库

    修改完pom.xml都要update一下,加入成功

    测试下添加进来的项目是否可用

    写好后再test下代码,执行成功

    就先到此为止吧~ o(* ̄▽ ̄*)o

  • 相关阅读:
    Intel 编译器 线程安全检查 真心的很详细 转
    当前软件设计分析
    当代并行机系统
    多人游戏服务器
    ACE源代码目录结构
    (转!)Z buffer和W buffer简介
    数据库-视图(View)详解
    推荐一个vs自带工具分析代码的复杂度
    SCOPE_IDENTITY的用法
    vs2013开发调试cocos2d-x-Lua工程项目
  • 原文地址:https://www.cnblogs.com/LaiCuiTing/p/9540793.html
Copyright © 2020-2023  润新知