> 文章列表 > Maven高级

Maven高级

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