• maven之相关概念


    1、pom

    含义:Project Object Model 项目对象模型
    DOM :Document Object Model 文档对象模型

    pom.xml 对于 Maven工程是核心配置文件,与构建过程相关的一切设置都在这个文件中进行配置。
    重要程度相当于web.xml 对于动态web工程

    2、坐标

    (1)数学中的坐标:
    ①在平面中,使用X,Y坐标可以唯一的定位平面中任何一个点。
    ②在空间中,使用X,Y,Z三个向量可以唯一的定位空间中的任何一个点。

    (2)Maven的坐标:
    使用下面三个向量在仓库中唯一定位一个Maven工程

    ①groupid:公司或组织域名倒序+项目名

      < groupid>com.gong.maven< /groupid>
    ②artifactid:模块名

      < artifactid>Hello< /artifactid>
    ③version:版本

      < version>1.0.0< /version>


    Maven 工程的坐标与仓库中路径的对应关系,以spring为例

      < groupId>org.springframework< /groupId>
      < artifactId>spring-core< /artifactId>
      < version>4.0.0.RELEASE< /version>
    org/springframework/spring-core/4.0.0.RELEASE/spring-core-4.0.0.RELEASE.jar
    注意:我们自己的 Maven 工程必须执行安装操作才会进入仓库。安装的命令是:mvn install

    3、仓库

    (1)仓库的分类
      ①本地仓库:当前电脑上部署的仓库目录,为当前电脑上所有Maven工程服务
      ②远程仓库
      1)私服:搭建在局域网环境中,为局域网范围内的所有Maven工程服务
      2)中央仓库:假设在Internet上,为全世界所有Maven工程服务
      3)中央仓库镜像:为了分担中央仓库流量,提升用户访问速度

    (2)仓库中保存的内容:Maven工程
      ①Maven自身所需要的插件
      ②第三方框架或工具的jar包
      ③我们自己开发的Maven工程

    不管是什么样的 jar 包,在仓库中都是按照坐标生成目录结构,所以可以通过统一的方式查询或依赖。

    4、依赖

    当 A jar 包用到了 B jar 包中的某些类时,A 就对 B 产生了依赖,这是概念上的描述。Maven解析依赖信息时会到仓库中查找被依赖的jar包。
    对于我们自己开发的Maven工程,要使用mvn install 命令安装后就可以进入仓库。

    (1)依赖的范围
      ①从项目结构角度理解compile和test的区别

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.3.7.RELEASE</version>
            <scope>test</scope>
        </dependency>

    compile范围依赖
    》对主程序是否有效:有效
    》对测试程序是否有效:有效
    》是否参与打包:参与
    》是否参与部署:参与
    》典型例子:spring-test

    test范围依赖
    》对主程序是否有效:无效
    》对测试程序是否有效:有效
    》是否参与打包:不参与
    》是否参与部署:不参与
    》典型例子:Junit

      ②从开发和运行这两个阶段理解compile 和 provided 的区别

    》对主程序是否有效:有效
    》对测试程序是否有效:有效
    》是否参与打包:不参与
    》是否参与部署:不参与
    》典型例子:Servlet-api.jar

      ③有效性总结

    (2)依赖的传递性
    A依赖B,B依赖C,A能否使用C呢?要看B依赖C的范围是不是compile

    (3)依赖的排除
    如果我们当前工程中引入了一个依赖是A,而A又依赖了B,那么Maven会自动将A依赖的B引入当前工程,但是个别情况下B有可能是一个不稳定版本,或对当前工程有不良影响。这时我们可以在引入A的时候将B排除。

      ①情景举例

      ②配置方式

    <dependency>
    <groupId>com.atguigu.maven</groupId>
    <artifactId>HelloFriend</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <type>jar</type>
    <scope>compile</scope>
    <exclusions>
        < exclusion>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
        </ exclusion> 
    </exclusions>
    </dependency>

      ③排除后的效果

    (4)统一管理所依赖 .jar 包的版本
    对同一个框架的一组jar包最好使用相同的版本。为了方便升级架构,可以将jar包的版本信息统一提取出来

      ①统一声明版本号

    其中 atguigu.spring.version 部分是自定义标签。

      ②引用前面声明的版本号

      ③其他用法

    (5)依赖的原则,解决jar包冲突
      ①路径最短者优先

      ②路径相同时先声明者优先

    5、生命周期

    (1)各个构建环节执行的顺序:不能打乱顺序,必须按照既定的正确顺序来执行。
    (2)Maven的核心程序中定义了抽象的生命周期,生命周期中各个阶段的具体任务是由插件来完成的。
    (3)Maven核心程序为了更好的实现自动化构建,按照这一特点执行生命周期中各个阶段:不论现在要执行生命周期中的哪一阶段,都是从这个生命周期最初的位置开始执行。
    (4)Maven有三套相互独立的生命周期,分别是:
      ①Clean Lifecycle 在进行真正的构建之前进行一些清理工作。
      ②Default Lifecycle 构建的核心部分,编译、测试、打包、安装、部署等等。
      ③Site Lifecycle 生成项目报告,站点,发布站点。

      他们相互独立。也可以直接运行 mvn clean install site 运行所有这三套生命周期。

      每套生命周期都由一组阶段(Phase)组成,我们平时在命令行输入的命令总会对应于一个特定的阶段。比如,运行 mvn clean,这个 clean 是 Clean 生命周期的一个阶段。有 Clean 生命周期,也有 clean 阶段。

    (5)Clean声明周期
      ①pre-clean 执行一些需要在clean之前完成的工作
      ②clean 移除所有上一次构建生成的文件
      ③post-clean 执行一些需要在clean 之后立刻完成的工作

    (6)Default声明周期
      Default 生命周期是 Maven 生命周期中最重要的一个,绝大部分工作都发生在这个生命周期中。这里,只解释一些比较重要和常用的阶段:
      validate
      generate-sources
      process-sources
      generate-resources
      process-resources 复制并处理资源文件,至目标目录,准备打包。
      compile 编译项目的源代码。
      process-classes
      generate-test-sources
      process-test-sources
      generate-test-resources
      process-test-resources 复制并处理资源文件,至目标测试目录。
      test-compile 编译测试源代码。
      process-test-classes
      test 使用合适的单元测试框架运行测试。这些测试代码不会被打包或部署。
      prepare-package
      package 接受编译好的代码,打包成可发布的格式,如 JAR。
      pre-integration-test
      integration-test
      post-integration-test
      verify
      install 将包安装至本地仓库,以让其它项目依赖。
      deploy 将最终的包复制到远程的仓库,以让其它开发人员与项目共享或部署到服务器上运行。

    (7)Site生命周期
      ①pre-site 执行一些需要在生成站点文档之前完成的工作
      ②site 生成项目的站点文档
      ③post-site 执行一些需要在生成站点文档之后完成的工作,并且为部署做准备
      ④site-deploy 将生成的站点文档部署到特定的服务器上

      这里经常用到的是 site 阶段和 site-deploy 阶段,用以生成和发布 Maven 站点,这可是 Maven 相当强大的功能,Manager 比较喜欢,文档及统计数据自动生成,很好看。

    (8)插件和目标
      Maven的核心仅仅定义了抽象的声明周期,具体的任务都是交由插件完成的。
      每个插件都实现多个功能,每个功能就是一个插件目标
      Maven的生命周期与插件目标相互绑定,以完成某个具体的构建任务。
      可以将目标看做“调用插件功能的命令”

    例如:compile 就是插件 maven-compiler-plugin 的一个目标;pre-clean 是插件 maven-clean-plugin 的一个目标。
    6、继承

    (1)现状
      Hello依赖的Junit:4.0
      HelloFriend依赖的Junit:4.0
      MakeFriends依赖的Junit:4.9

      由于test范围的依赖不能传递,所以必然会分散在各个模块工程中,很容易造成版本不一致。

      需求:统一管理各个模块工程中对Junit依赖的版本。

      解决思路:将Junit依赖统一提取到“父”工程中,在子工程中声明Junit依赖是不指定版本,以父工程中统一设定的为准。同时也便于修改。

      操作步骤:
      ①创建一个Maven工程作为父工程。注意:打包方式为pom

      

      ②在子工程中声明对父工程的引用

      

      ③将子工程的坐标中与父工程坐标中重复的内容删除

     

      ④在父工程中统一管理Junit的依赖

      

      ⑤在子工程中删除Junit依赖的版本号部分

      

    注意:配置集成后,执行安装命令时要先安装父工程。

    7、聚合

    (1)作用:一键安装各个模块工程。
    (2)配置方式:在一个“总的聚合工程”中配置各个参与聚合的模块

     (3)使用方式:在聚合工程的pom.xml 上点右键->run as->maven install

    8、Maven工程自动部署

    在pom.xml 中添加如下配置:

      <!--配置当前工程构建过程中的特殊设置   -->
      <build>
        <finalName>AtguiguWeb</finalName>
        <!-- 配置构建过程中需要使用的插件 -->
        <plugins>
            <plugin>
                <!-- cargo是一家专门从事启动Servlet容器的组织 -->
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.2.3</version>
                <!-- 针对插件进行的配置 -->
                <configuration>
                    <!-- 配置当前系统中容器的位置 -->
                    <container>
                        <containerId>tomcat6x</containerId>
                        <home>D:DevInstallapache-tomcat-6.0.39</home>
                    </container>
                    <configuration>
                        <type>existing</type>
                        <home>D:DevInstallapache-tomcat-6.0.39</home>
                        <!-- 如果Tomcat端口为默认值8080则不必设置该属性 -->
                        <properties>
                            <cargo.servlet.port>8989</cargo.servlet.port>
                        </properties>
                    </configuration>
                </configuration>
                <!-- 配置插件在什么情况下执行 -->
                <executions>  
                    <execution>  
                        <id>cargo-run</id>
                        <!-- 生命周期的阶段 -->  
                        <phase>install</phase>  
                        <goals>
                            <!-- 插件的目标 -->  
                            <goal>run</goal>  
                        </goals>  
                    </execution>  
                </executions>
            </plugin>
         </plugins>
        </build>

    执行mvn deploy 命令

    原文链接:https://blog.csdn.net/zxm1306192988/article/details/76209062

  • 相关阅读:
    201521123100《Java程序设计》第八周学习总结
    201521123100 《Java程序设计》 第7周学习总结
    201521123100 《Java程序设计》第6周学习总结
    201521123100 《Java程序设计》第5周学习总结
    201521123100 《Java程序设计》第4周学习总结
    201521123100 《Java程序设计》第3周学习总结
    201521123093 java 第十一周学习总结
    201521123093 java 第十周学习总结
    201521123093 java 第九周学习总结
    201521123093 java 第八周总结
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12234032.html
Copyright © 2020-2023  润新知