目录
- 1.父项目的搭建
- 2.子项目的搭建(继承关系)
- 3.子项目的搭建(聚合关系)
- 4.优雅的使用聚合关系管理jar包版本
1.父项目的搭建
- 新建一个Maven Project
- 勾选创建简单项目
- 编辑项目信息
以创建一个淘宝项目为例。
-
Group Id
写公司名字 -
Artifact Id
写父项目名或子模块名 -
Version
写版本号
以上三个属性为一个项目的坐标,通过这个坐标即可定位一个项目。 Packaging
为项目打包方式。
- 如果是父项目或者子项目还需要作为其他项目的父项目,必须选择
pom
选项; - 如果子项目是java项目,选择
jar
选项; - 如果子项目是web项目,选择
war
选项。
点击Finish完成创建,父项目的目录结构如下:
4. 在父项目的pom.xml文件中添加如下依赖(用于后续讲解)
记得是在 <dependencies>
标签中添加。
<!-- 添加spring-webmvc的依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
以上代码可在 Maven仓库 中找到。
保存后,这时在项目目录中并没有增加依赖相关的jar包,原因是因为这是一个父项目,之后如果有子项目继承该父项目或者该父项目下有Module项目,那么该子项目或Module项目便会自动添加依赖相关的jar包。
2.子项目的搭建(继承关系)
以创建淘宝项目的商品模块为例,大致步骤同上。
这里Parent Project需要勾选刚才创建的TaoBao父项目坐标。
在子项目的目录中,可以看到刚才父项目pom.xml文件中添加的依赖对应的jar包。这里不仅仅只添加了spring-webmvc jar包,还有其他支持spring-webmvc的jar包。
再看子项目的pom.xml文件
<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.alibaba</groupId>
<artifactId>TaoBao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<groupId>com.alibaba</groupId>
<artifactId>TaoBao-Shop</artifactId>
<version>0.0.1-SNAPSHOT</version>
</project>
其中除了自己的坐标外,还有<parent>
标签包含的父项目的坐标。
这里子项目的groupId
、version
编译器会建议删除,因为与父项目相比只有artifactId
不一样,其他都来自父项目,但如果希望与父项目不同,可以修改而不删除。
而在父项目的pom.xml文件中没有任何变化。
这种在子项目中引用父项目坐标创建的两个项目的关系就被称为继承关系。
稍后再做详述,下面我们来看聚合关系。
3.子项目的搭建(聚合关系)
以创建淘宝项目的购物模块为例,这次通过右键父项目创建该父项目的Maven Module。
点击Next,新的窗口同样勾选创建简单项目,Module Name写子项目名。
点击Finish。
这时看新的子项目目录结构和pom.xml文件,和刚才的子项目完全相同。
再看父项目目录结构,发现与新的子项目构成包含关系。
同时父项目的pom.xml文件,发现多了如下配置:
<modules>
<module>TaoBao-Trans</module>
</modules>
小节:
聚合关系的前提是继承关系,父项目会把子项目包含到父项目中;
聚合项目的子项目的类型必须是Maven Module而不是Maven Project;
具有聚合关系的父项目在pom.xml文件中会有module
指向子项目;
聚合项目的父子关系比继承项目的父子关系强。
4.优雅的使用聚合关系管理jar包版本
下面将父项目pom.xml文件添加的依赖套上<dependencyManagement>
标签,如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
</dependencies>
</dependencyManagement>
这时发现以继承和聚合关系创建的子项目都不再有父项目中的依赖,此时如果还想在子项目中有父项目的依赖,可在子项目中再添加依赖,但无需指定依赖的<version>
,而是由父项目来决定。
这是<dependencyManagement>
标签唯一的作用(或好处)。
小节:
<dependencyManagement>
标签用于声明在聚合项目中可能用到的标签,但子项目不会立即引入其中的依赖,而需要手动添加需要的依赖,但不需要声明依赖的版本。
下面再对父项目的pom.xml文件做优化,在<dependencyManagement>
上方添加<properties>
标签,<properties>
标签中的子标签名可以随意定义,假如写如下标签
<spring-version>4.1.6.RELEASE</spring-version>
然后替换spring-webmvc依赖的<version>
内容为${spring-version}
(花括号中写刚刚定义的子标签名),最终pom.xml文件内容如下:
<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>
<groupId>com.alibaba</groupId>
<artifactId>TaoBao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<spring-version>4.1.6.RELEASE</spring-version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<modules>
<module>TaoBao-Trans</module>
</modules>
</project>
现在我们如果需要配置jar包的版本,只需要对<properties>
标签中的内容做修改即可,而不需要费力去找<version>
标签修改版本。