Maven
POM(项目对象模型): 通过XML配置项目的依赖,自动完成项目构建
pom.xml 标签
- modelVersion: pom.xml 版本
- groupId:项目组,一般用公司名:com.baidu.....
- artifactId: 项目模块
- version: 项目版本号
- packaging: 打包方式(默认jar包)
- scope:包作用域(默认compile:test/provided/runtime)
- properties:POM属性
- dependencies:项目依赖包
maven坐标
groupId、artifactId、version 3个标签构成软件包坐标,类似数据库主键唯一标识1条记录
Maven 聚合
多个Maven项目通过modules标签整合在1个模块中,实现模块组生命周期的统一管理
Maven 继承:
子模块继承父模块的属性、依赖等元素,实现POM元素的复用,方便统一管理
测试案例
子类工程:maven_child
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>maven_child</artifactId>
<packaging>jar</packaging>
<name>maven_child</name>
<parent>
<groupId>com.zhiwei</groupId>
<artifactId>maven_parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../maven_parent/pom.xml</relativePath>
</parent>
<!--配置maven工程属性-->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<!-- 父模块引用:可省略版本号,由父模块统一管理 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
</dependencies>
</project>
子类工程:maven_brother
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.zhiwei</groupId>
<artifactId>maven_parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../maven_parent/pom.xml</relativePath>
</parent>
<artifactId>maven_brother</artifactId>
<packaging>jar</packaging>
<name>maven_brother</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</dependency>
<!-- 引入依赖模块: maven_child -->
<dependency>
<groupId>com.zhiwei</groupId>
<artifactId>maven_child</artifactId>
<!-- 依赖模块放入父模块里面,可省略版本号 -->
<!-- <version>0.0.1-SNAPSHOT</version>-->
</dependency>
</dependencies>
</project>
父工程:maven_parent
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<!--
父模块:定义整个maven项目的依赖、版本等信息
继承: 子模块可以直接引用父模块依赖包的定义,避免重复定义
dependencesManagement:定义子模块可能使用的依赖包,不强制子类一定会继承
dependences: 定义子模块需要使用的依赖包,子类强制继承
注意:父类的groupId、artifactId、version只可部分继承,但不能全部继承(唯一性)
-->
<groupId>com.zhiwei</groupId>
<artifactId>maven_parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 注意父模块和聚合模块只能以pom形式打包部署 -->
<packaging>pom</packaging>
<name>maven_parent</name>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!--
聚合:父类模块构建时,继承该父类模块的子模块统一构建,实现自动化构建和部署 -->
<modules>
<module>../maven_child</module> <!-- 子模块的pom.xml相对路径 -->
<module>../maven_brother</module>
</modules>
<!-- 管理子模块可能重复使用的包:子模块可根据需要自选择父模块定义的依赖包 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!--父模块可将子模块设定为依赖,例如提供整个maven项目最基础的功能-->
<dependency>
<groupId>com.zhiwei</groupId>
<artifactId>maven_child</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
特别注意:
maven_brother 依赖于maven_child项目,maven_child若未成功构建,maven_brother也无法构建