目录
方式1
在子模块中指定父模块的相对路径,往下是案例,在往下是实现方式。
案例如下:
父模块pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--maven版本号-->
<modelVersion>4.0.0</modelVersion>
<!--父工程的GAV坐标-->
<groupId>com.bjpowernode.p2p</groupId>
<artifactId>p2p-parent</artifactId>
<version>1.0.0</version>
<!--添加打包方式为pom,代表该工程就是父工程-->
<packaging>pom</packaging>
<!--管理依赖的版本号-->
<properties>
<spring-version>4.3.9.RELEASE</spring-version>
………………………………………………
………………………………………………
………………………………………………
</properties>
<!--管理依赖-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>${spring-version}</version>
</dependency>
………………………………………………
………………………………………………
………………………………………………
</dependencies>
</dependencyManagement>
</project>
子模块pom文件
<?xml version="1.0" encoding="UTF-8"?>
<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">
<!--主要工作开始-->
<!--继承父级pom文件-->
<parent>
<groupId>com.bjpowernode.p2p</groupId>
<artifactId>p2p-parent</artifactId>
<version>1.0.0</version>
<!--父级pom文件的相对路径-->
<relativePath>../p2p-parent/pom.xml</relativePath>
</parent>
<!--子模块的项目名称,groupId和version使用的是父模块的-->
<artifactId>p2p-web</artifactId>
<!--主要工作结束-->
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
………………………………………………
………………………………………………
………………………………………………
</dependencies>
</project>
在IDEA中你可以这样做(Eclipse了解的不深入,以后知道了在补充)
在IDEA中新建模块的时候别在父模块上面点击新建,而是在空白的地方新建模块,然后在配置的时候指定父模块就可以了,如下所示:
当然你要想在父模块上面点击新建也是可以的,不过需要把Add as module to
设置成None,如下所示:
方式2(推荐)
不在子模块中指定父模块的相对路径,而是在父模块的pom.xml使用model标签
去包裹子模块,往下是案例,再往下是实现方式。
案例如下:
父模块pom文件
<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.atguigu.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
………………………………………………
………………………………………………
………………………………………………
</dependencies>
</dependencyManagement>
<!--重点开始-->
<!--父模块所包含的子模块-->
<modules>
<!--module标签中写的是子模块的项目工程名-->
<module>microservicecloud-api</module>
<module>microservicecloud-eureka-7001</module>
<module>microservicecloud-eureka-7002</module>
<module>microservicecloud-eureka-7003</module>
………………………………………………
………………………………………………
………………………………………………
</modules>
<!--重点结束-->
</project>
子模块pom文件
<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>
<!-- 父模块的GAV坐标 -->
<groupId>com.atguigu.springcloud</groupId>
<artifactId>microservicecloud</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<!-- 子模块的名称 -->
<artifactId>microservicecloud-api</artifactId>
<!-- 重点结束 -->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
</dependencies>
</project>
在IDEA和Eclipse中你都可以这样做
在父模块上面点击鼠标右键去新建模块,然后就实现了方式2,在IDEA中如下:
拓展说明
- modules中的module标签顺序,随意放置就好,不用按照子模块依赖顺序来设置,maven会自动按照依赖顺序为你打包
- modules中的module标签作用:modules只能在模块的打包方式是pom的时候才能使用,比如
<packaging>pom</packaging>
,modeule标签中的名称是其他模块artifactId名称,无论该模块是否打包方式为pom模块的子模块,都是可以的;在对父模块进行mvn clean install的时候,所有在module标签中的模块都会自动按照模块之间的依赖顺序进行mvn clean install
- 当我们从maven私服中下载子模块jar包的时候,该子模块jar包会去寻找用到的父模块jar包,主要目的是确定用到依赖的版本,所以我们把子模块jar包发布到maven仓库的时候,也一定要同步把父模块jar包发布到maven仓库,这样在下载子模块的时候才不会报错
- 发布打包方式为pom的父模块到maven仓库的时候,我们可以删除父模块的module标签吗,我认为是可以的,因为module标签的作用在上面2中已经说明了,所以它只和打包方式为pom的模块进行
mvn clean install
的时候有关,也就是说只和开发的时候mvn clean install
有关,和其他的地方没啥关系