Maven高级

聚合

  1. 解决了多模块的构建和维护问题

  2. 聚合实现方法:

    1. 先建立一个项目A,A项目不是为了做具体功能的,就是为了方便管理其他所有项目用而存在的。所有的项目合在一起称为一个工程。

    2. A项目中没有代码,就是为了方便管理其他项目,所以就不需要src目录了,直接删了。

    3. 在A项目的pom.xml文件当中,添加打包方式:

      <!--定义该项目用于进行整个工程构建管理-->
      <packaging>pom</packaging>
      
    4. A项目中只提供pom.xml文件,在pom文件中添加要聚合管理的项目。【定义当前模块进行构建操作时关联的其他模块名称,当前模块进行什么操作,其他模块也跟着进行什么操作】

      <!--管理的项目列表-->
      <modules>
          <!--具体的项目名称-->
          <module>../mvn-test01</module>
          <!--../mvn-test02,这里写的是相对路径,如下《5》的解释-->
          <module>../mvn-test02</module>
          <module>../mvn-test03</module>
      </modules>
      
    5. 目录结构:

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MghehmKh-1682150169336)(C:\Users\XueYingHao\AppData\Roaming\Typora\typora-user-images\image-20230422090527735.png)]

      因为pom.xml在mvn项目下,在这个pom.xml文件中写的相对路径都是相对于pom.xml文件所在的路径进行查找的,所以需要加上“…/”,“…/项目名”,这里一定是项目名,不是Maven的pom.xml文件中的标签的值。

    6. 参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关。

    7. 聚合的作用:聚合用于快速构建Maven工程,一次性构建多个模块/项目。

继承

  1. 解决了资源统一管理的问题。防止多个模块之间使用的资源版本不统一而导致的错误。

  2. 实现方法:

    1. 新建一个空模块A,A中没有代码,只有一个pom.xml文件。

      <!--pom文件中规定打包方式是pom-->
      <packaging>pom</packaging>
      
    2. 因为继承主要是为了解决资源不统一的问题,所以在A模块中定义依赖管理()标签,子模块都去继承A模块,子模块中需要使用什么资源,直接使用父模块中的这个资源,统一了子模块中的依赖资源。

      <!--这是在父模块中的pom.xml文件中定义的-->
      <dependencyManagement>
          <dependencies>
              <dependency>
                  <groupId>组织id</groupId>
                  <artifactId>项目id</artifactId>
                  <version>项目版本号</version>
              </dependency>
              ...<!--可以有多个依赖-->
          </dependencies>
      </dependencyManagement>
      
    3. 在子模块的pom.xml文件中直接写:

      <!--定义该工程的父工程-->
      <parent>
          <!--父工程的坐标-->
          <groupId>com.xyh</groupId>
          <artifactId>mvn2</artifactId>
          <version>1.0-SNAPSHOT</version>
          <!--父工程的pom.xml文件-->
          <relativePath>../mvn2/pom.xml</relativePath>
      </parent>
      
    4. 父模块还可以对插件进行统一管理:

      <!--这是在父模块中的pom.xml文件中定义的-->
      <build>
          <!--插件管理-->
          <pluginManagement>
              <plugins>
                  <plugin>
                      <groupId></groupId>
                      <artifactId></artifactId>
                      <version></version>
                  </plugin>
                  ...<!--可以管理多个插件-->
              </plugins>
          </pluginManagement>
      </build>
      
  3. 在子模块中使用父模块中规定的依赖和插件的时候,就只需要指定:和。

    • 版本等其他信息,由父模块统一管理。
    • 子模块的groupId和父模块的groupId一般都是一样的,所以子模块的pom.xml文件中的groupId是可以省略的,省略之后从父模块中继承过来。
      • 子模块中可以没有groupId可以但是父模块中肯定由groupid,因在为子模块继承父模块的时候,肯定得有父模块的坐标,父模块没有groupid的话子模块也不能继承父模块所以也就不存在继承关系,也没有父子模块的说法了。
  4. 插件和依赖的继承都是一样的规则:

    • 在父模块中编写详细的坐标包括版本等信息,在子模块中只需要表明使用的是那个插件或者就行,不用写版本等信息。
    • 父模块管理的依赖就是在外面包一层
    • 父模块管理的插件就是在外面包一层
  5. 聚合和继承的区别:

    1. 聚合:是在父模块中操作,父模块是主动的,父模块知道他聚合了子模块,子模感知不到。
    2. 继承:是在子模块中操作,子模块是主动的,子模块知道他继承了父模块,父模块感知不到。
  6. 插件和依赖并不是在父里面配置完子里面不用配了,而是在父里配置多多的,子里用哪个写上哪个就行。

  7. 继承与聚合的

    1. 作用
      • 聚合用于快速构建项目
      • 继承用于快速构建项目
    2. 相同点
      • 聚合和继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
      • 聚合和继承均属于设计模块,并无实际的模块内容。

属性

  1. 属性就相当于在Maven中定义的变量。

  2. 在pom.xml文件中定义属性的语法格式:

    <!--pom.xml文件中定义属性的标签,一个pom.xml文件中只能有一个properties标签-->
    <properties>
        <!--“junit.version”就是属性名,“4.13.2”就是属性值-->
        <junit.version>4.13.2</junit.version>
        <!--多个相同的属性,后面定义的覆盖前面定义的-->
        <junit.version>4.12</junit.version>
    </properties>
    
  3. pom.xml文件中使用属性的语法格式:

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <!--
    		${属性名}:这就是pom标签中自定义属性的使用的语法格式。
    		例如:${junit.version}
    	-->
        <version>${junit.version}</version>
    </dependency>
    
  4. 属性:

    1. 内置属性

      1. version : 代表当前工程的版本号。

        • 在pom.xml文件下根标签下的这里的值
      2. basedir : ${basedir}表示项目的根文件夹,既包括pom.xml的文件文件夹

      • ${basedir}写在子项目中,代表当前项目的根文件夹

      • ${basedir}写在父项目中代表“所有子项目的”根文件夹

        <!--在父项目中配置资源文件对应的信息-->
        <resources>
            <resource>
        <!--具体的资源存放的文件夹,不仅仅可以替换属性配置文件中的占位符,只要是在resources目录下面的资源中的占位符都可以被替换
        这里指定到目录,而不是指定到具体的文件-->
         <directory>${project.basedir}/src/main/resources
                </directory>
        	    <!--这行代码的作用:是否使用pom文件里定义的属性替换属性配置文件(*.properties)文件里面的占位符(${jdbc.url})
        		专业名词:开启对配置文件的资源加载过滤-->
                <filtering>true</filtering>
            </resource>
        </resources>
        
    2. setting属性

      1. settings.localRepository : 使用Maven配置文件setting.xml中的标签属性,用于动态配置。【读取到的是:D:\XueYingHao\maven\repository标签中的内容“D:\XueYingHao\maven\repository”,也就是本地仓库的位置】
      2. 想要读取到settings中的配置信息直接使用“settings.标签名”这样的语法。
    3. Java系统属性:用于读取Java系统属性

      1. user.home : 获取的是用户的“家目录”;使用方式 ${user.home}
        • user.home=C:\Users\XueYingHao,获取的值就是【C:\Users\XueYingHao】
        • 执行“mvn help:system”指令,在“System Properties”可以查看,${这里可以填写什么}
    4. 环境变量属性:

      1. 调用格式:${env.变量名}
        • 例如:${env.JAVA_HOME}
      2. 执行“mvn help:system”指令,在“Environment Variables”可以查看,${env.这里可以填写什么}

资源配置

  1. 有了资源配置机制,方便了Maven统一管理项目的配置文件,所有的配置信息都是写在pom.xml文件当中的。

  2. 在pom.xml配置文件中进行配置属性【相当于定义的变量】:

    <properties>
        <jdbc.driver>com.mysql.jdbc.Driver</jdbc.driver>
        <jdbc.url>jdbc:mysql://localhost:3306/xyh</jdbc.url>
        <jdbc.username>root</jdbc.username>
        <jdbc.password>root</jdbc.password>
    </properties>
    
  3. 根据规范项目的src/main/resources下面一般都是存放配置文件的,在此处新建一个属性配置文件:jdbc.properties文件。

    jdbc.driver=${jdbc.driver}
    jdbc.url=${jdbc.url}
    jdbc.username=${jdbc.username}
    jdbc.password=${jdbc.password}
    
  4. 在pom文件中配置资源文件的信息【到目前位置在pom文件夹中写的都是相对路径没有绝对路径】

    <build>
        <resources>
            <resource>
              <!--这里是相对路径,是相对于pom文件所在的目录开始寻址的-->
                <directory>src/main/resources</directory>
                <!--是否开启pom文件中定义的属性替换属性配置文件中的占位符,true表示开启,默认值是false-->
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>
    
  5. <build>
        <!--这里是写主程序的资源配置信息-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
        </resources>
        <!--这里是写测试程序的配置信息-->
        <testResources>
            <testResource>
                <directory>src/test/resources</directory>
                <filtering>true</filtering>
            </testResource>
        </testResources>
    </build>
    

息–>


src/test/resources
true

































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛英豪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值