聚合
-
解决了多模块的构建和维护问题
-
聚合实现方法:
-
先建立一个项目A,A项目不是为了做具体功能的,就是为了方便管理其他所有项目用而存在的。所有的项目合在一起称为一个工程。
-
A项目中没有代码,就是为了方便管理其他项目,所以就不需要src目录了,直接删了。
-
在A项目的pom.xml文件当中,添加打包方式:
<!--定义该项目用于进行整个工程构建管理--> <packaging>pom</packaging>
-
A项目中只提供pom.xml文件,在pom文件中添加要聚合管理的项目。【定义当前模块进行构建操作时关联的其他模块名称,当前模块进行什么操作,其他模块也跟着进行什么操作】
<!--管理的项目列表--> <modules> <!--具体的项目名称--> <module>../mvn-test01</module> <!--../mvn-test02,这里写的是相对路径,如下《5》的解释--> <module>../mvn-test02</module> <module>../mvn-test03</module> </modules>
-
目录结构:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(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文件中的标签的值。
-
参与聚合操作的模块最终执行顺序与模块间的依赖关系有关,与配置顺序无关。
-
聚合的作用:聚合用于快速构建Maven工程,一次性构建多个模块/项目。
-
继承
-
解决了资源统一管理的问题。防止多个模块之间使用的资源版本不统一而导致的错误。
-
实现方法:
-
新建一个空模块A,A中没有代码,只有一个pom.xml文件。
<!--pom文件中规定打包方式是pom--> <packaging>pom</packaging>
-
因为继承主要是为了解决资源不统一的问题,所以在A模块中定义依赖管理()标签,子模块都去继承A模块,子模块中需要使用什么资源,直接使用父模块中的这个资源,统一了子模块中的依赖资源。
<!--这是在父模块中的pom.xml文件中定义的--> <dependencyManagement> <dependencies> <dependency> <groupId>组织id</groupId> <artifactId>项目id</artifactId> <version>项目版本号</version> </dependency> ...<!--可以有多个依赖--> </dependencies> </dependencyManagement>
-
在子模块的pom.xml文件中直接写:
<!--定义该工程的父工程--> <parent> <!--父工程的坐标--> <groupId>com.xyh</groupId> <artifactId>mvn2</artifactId> <version>1.0-SNAPSHOT</version> <!--父工程的pom.xml文件--> <relativePath>../mvn2/pom.xml</relativePath> </parent>
-
父模块还可以对插件进行统一管理:
<!--这是在父模块中的pom.xml文件中定义的--> <build> <!--插件管理--> <pluginManagement> <plugins> <plugin> <groupId></groupId> <artifactId></artifactId> <version></version> </plugin> ...<!--可以管理多个插件--> </plugins> </pluginManagement> </build>
-
-
在子模块中使用父模块中规定的依赖和插件的时候,就只需要指定:和。
- 版本等其他信息,由父模块统一管理。
- 子模块的groupId和父模块的groupId一般都是一样的,所以子模块的pom.xml文件中的groupId是可以省略的,省略之后从父模块中继承过来。
- 子模块中可以没有groupId可以但是父模块中肯定由groupid,因在为子模块继承父模块的时候,肯定得有父模块的坐标,父模块没有groupid的话子模块也不能继承父模块所以也就不存在继承关系,也没有父子模块的说法了。
-
插件和依赖的继承都是一样的规则:
- 在父模块中编写详细的坐标包括版本等信息,在子模块中只需要表明使用的是那个插件或者就行,不用写版本等信息。
- 父模块管理的依赖就是在外面包一层
- 父模块管理的插件就是在外面包一层
-
聚合和继承的区别:
- 聚合:是在父模块中操作,父模块是主动的,父模块知道他聚合了子模块,子模感知不到。
- 继承:是在子模块中操作,子模块是主动的,子模块知道他继承了父模块,父模块感知不到。
-
插件和依赖并不是在父里面配置完子里面不用配了,而是在父里配置多多的,子里用哪个写上哪个就行。
-
继承与聚合的
- 作用
- 聚合用于快速构建项目
- 继承用于快速构建项目
- 相同点
- 聚合和继承的pom.xml文件打包方式均为pom,可以将两种关系制作到同一个pom文件中。
- 聚合和继承均属于设计模块,并无实际的模块内容。
- 作用
属性
-
属性就相当于在Maven中定义的变量。
-
在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>
-
pom.xml文件中使用属性的语法格式:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <!-- ${属性名}:这就是pom标签中自定义属性的使用的语法格式。 例如:${junit.version} --> <version>${junit.version}</version> </dependency>
-
属性:
-
内置属性
-
version : 代表当前工程的版本号。
- 在pom.xml文件下根标签下的这里的值
-
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>
-
-
setting属性
- settings.localRepository : 使用Maven配置文件setting.xml中的标签属性,用于动态配置。【读取到的是:D:\XueYingHao\maven\repository标签中的内容“D:\XueYingHao\maven\repository”,也就是本地仓库的位置】
- 想要读取到settings中的配置信息直接使用“settings.标签名”这样的语法。
-
Java系统属性:用于读取Java系统属性
- user.home : 获取的是用户的“家目录”;使用方式 ${user.home}
- user.home=C:\Users\XueYingHao,获取的值就是【C:\Users\XueYingHao】
- 执行“mvn help:system”指令,在“System Properties”可以查看,${这里可以填写什么}
- user.home : 获取的是用户的“家目录”;使用方式 ${user.home}
-
环境变量属性:
- 调用格式:${env.变量名}
- 例如:${env.JAVA_HOME}
- 执行“mvn help:system”指令,在“Environment Variables”可以查看,${env.这里可以填写什么}
- 调用格式:${env.变量名}
-
资源配置
-
有了资源配置机制,方便了Maven统一管理项目的配置文件,所有的配置信息都是写在pom.xml文件当中的。
-
在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>
-
根据规范项目的src/main/resources下面一般都是存放配置文件的,在此处新建一个属性配置文件:jdbc.properties文件。
jdbc.driver=${jdbc.driver} jdbc.url=${jdbc.url} jdbc.username=${jdbc.username} jdbc.password=${jdbc.password}
-
在pom文件中配置资源文件的信息【到目前位置在pom文件夹中写的都是相对路径没有绝对路径】
<build> <resources> <resource> <!--这里是相对路径,是相对于pom文件所在的目录开始寻址的--> <directory>src/main/resources</directory> <!--是否开启pom文件中定义的属性替换属性配置文件中的占位符,true表示开启,默认值是false--> <filtering>true</filtering> </resource> </resources> </build>
-
<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