zoukankan      html  css  js  c++  java
  • maven学习(六)依赖、聚合、继承

    先说一下概念(个人理解的,有问题请留言):

      依赖:我要盖一座房子,就需要很多的砖,这些专就是盖房子的一个依赖。我要跑一个maven项目,需要各种各样的功能,功能实现的jar包和插件就是我的依赖。

      聚合:物以类聚嘛,你想要去xx旅游,我也想去xx旅游,咱们有相同的需求完全可以一块抱团啊。聚合就是将具有相同需求的模块聚合到一块,主要是为了模块服务的,比如我一个商品服务有单独的api的jar包,有单独的service的实现包,但是都属于商品模块的,执行编译等操作的时候就不用费劲执行两遍命令了,此时就可以聚合到一块。目的是方便构建项目~

      继承:这个好理解,老子传给儿子的就是继承。不断的提取共有部分进行管理,主要解决的是重复配置的问题,通常用于声明一些公共依赖模块、属性等。

    依赖:

       依赖主要包含:依赖范围、传递性依赖、依赖优先级、依赖类型、可选依赖、排除依赖等,下面用带有注释的xml配置来描述。(注:此例非人类配置仅为说明各个属性的作用,未满18周岁同学请在父母陪同下观看)

    <!-- 属性定义,类似于常量 -->
         <properties>
             <property.key>property.value</property.key>
             <!-- 归类依赖,这里例子举的不是很恰当。试想用定义了spring的某个版本,下面依赖的<version>全用变量就可以统一管理 -->
             <junit.version>3.8.1</junit.version>
         </properties>
        <!-- 依赖管理,可以依赖内部模块、也可以依赖三方jar包 -->
        <!-- 依赖命令:
                依赖树:dependency:tree
                依赖列表:dependency:list
                依赖分析:dependency:analyze
         -->
        <dependencies>
            <!-- 依赖 -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>${junit.version}</version>
                <!-- 组件的附属构件,不能在定义pom的时候直接指定,此值由插件生成,比如java-doc等,依赖的时候要指明
                <classifier></classifier> -->
                <!-- 
                    依赖范围:
                        compile(默认):编译、测试、运行都有效,spring-core
                        test:测试,junit
                        provided:编译、测试,servlet-api
                        runtime:测试、运行,jdbc驱动
                        system:系统
                        import:与dependencyManagement同时使用
                    传递性依赖:
                            A - B - sb.jar
                            此时A传递引用sb.jar
                    依赖优先级:
                        1.第一原则,路径最近依赖原则
                            A - B - sb.jar
                            A - sb.jar        (√)
                        2.第二原则,最先声明依赖原则
                            A - B - sb.jar    (√)
                            A - C - sb.jar
                 -->
                <scope>test</scope>
                 <!-- 类型,一般不用显示声明,默认为jar -->
                <type>jar</type>
                <!-- 可选依赖,不会被传递 -->
                <optional>true</optional>
                <!-- 排除依赖,比如排除掉某个不想要的包 
                <exclusions>
                    <exclusion>
                        <groupId>com.wang</groupId>
                        <artifactId>test123</artifactId>
                    </exclusion>
                </exclusions>-->
                <!-- 引入比较特殊的jar包的时候才会使用到,通常是相同版本在不同环境下使用的jar,比如jar的名字json-lib-2.4-jdk15.jar -->
                <!-- <classifier>jdk15</classifier> -->
                <!-- 仅供系统范围使用,不鼓励使用这个元素,设置为系统的绝对路径,可以使用系统变量如${Java.home},要求<scope>元素的值为system 
                <systemPath>D:	est123.jar</systemPath>-->
            </dependency>
        </dependencies>

    聚合:

      表现为pom.xml中的<modules>元素,注意module的配置是相对于父pom的,如:

    <!-- 目录结构 
      parent
        父pom.xml
      account-email
        pom.xml
      account-persist
        pom.xml -->
    <!-- 配置 -->
    <modules>
      <module>../account-email</module>
      <module>../account-persist</module>
    </modules>
    <!-- 目录结构 
      父pom.xml
      account-email
        pom.xml
      account-persist
        pom.xml -->

    <!-- 配置 --> <modules> <module>account-email</module> <module>account-persist</module> </modules>

    继承:

      表现为pom.xml的<parent>元素,子pom可以继承父pom中的配置,如依赖、属性等。

      父模块只能打包为pom。

      可以继承的元素:groupId、version、description、organization、inceptionYear、url、developers、contributors、distributinManagement、issueManagement、ciManagement、scm、mailingLists、properties、dependencies、dependencyManagement、repositories、build、reporting

      感觉上面大多数都是一些扯蛋的元素,比较常用的有以下几个:

      properties:属性,类似于java的静态常量

      dependencies:依赖

      distributionManagement:部署配置,比如自定义组件的上传,会结合settings.xml里的server进行账号认证。

    依赖管理(不会实际引入依赖):

      <dependencyManagement>元素,子模块引入时可以省略版本号的配置

      依赖管理scope元素可以设置为import,这个import必须结合dependencyManagement来使用。使用import通常指向一个pom文件,作用是将目标pom中的dependencyManagement配置导入合并到当前pom的dependencyManagement元素中使用。

    插件管理(不会实际引入依赖):

      <pluginManagement>,只需引入插件的坐标即可,省去插件的具体配置,便于管理和维护~

      

  • 相关阅读:
    Python全栈day10(基础知识练习题)
    Python全栈day10(基本数据类型及其常用方法)
    Python全栈day10(运算符)
    CentOS 添加常用 yum 源(转)
    CentOS yum源设定使用方法的整理(转)
    centos6.6安装php5.3.3(2015/3/4)
    centos6.6升级安装MySQL5.5(2015/3/4)
    vi/vim显示中文字符并且去掉^M的方法
    ecmall2.3.0 前后台样式等无效,导致前台页面显示不正常问题解决
    ecmall页面空白解决方案(转)
  • 原文地址:https://www.cnblogs.com/douJiangYouTiao888/p/6506630.html
Copyright © 2011-2022 走看看