github: https://github.com/liangyt/mavenmultimodule
由于各個(gè)IDE創(chuàng)建maven項(xiàng)目的過程有一些不同葱跋,所以這里就不列出創(chuàng)建過程截圖了击纬,以文字說明髓废。
maven的項(xiàng)目結(jié)構(gòu)在各個(gè)不同的IDE下都是一樣的:
project
├── pom.xml
└── src
├── main
│ ├── java
│ └── resources
└── test
└── java
首先創(chuàng)建父模塊的maven項(xiàng)目增拥,然后再在父模塊下創(chuàng)建子模塊,父模塊項(xiàng)目的src目錄可以刪除掉,一般不會(huì)使用滔驾,創(chuàng)建完成的示例結(jié)構(gòu)大概如下:
├── pom.xml
├── consumer
│ ├── consumer.iml
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ └── java
├── provide
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ └── java
└── service
├── pom.xml
├── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ └── test
│ └── java
上面的結(jié)構(gòu)是有三個(gè)子模塊胧辽。
下面看看父模塊的POM配置數(shù)據(jù):
<?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">
<modelVersion>4.0.0</modelVersion>
<!--父模塊的 groupId峻仇、artifactId、version邑商,子模塊可以通過parent繼承父模塊摄咆,使用的就是這里定義的value-->
<groupId>com.liangyt</groupId>
<artifactId>maven-multi-module</artifactId>
<version>1.0-SNAPSHOT</version>
<!--根pom必須要有-->
<packaging>pom</packaging>
<!--子模塊-->
<modules>
<module>service</module>
<module>provide</module>
<module>consumer</module>
</modules>
<properties>
<java-version>1.8</java-version>
<service-version>1.0-SNAPSHOT</service-version>
<spring-boot-version>1.5.4.RELEASE</spring-boot-version>
</properties>
<!--
使用dependencyManagement的話,則子模塊不會(huì)自動(dòng)繼承父POM依賴人断;
需要子模塊顯示定義需要的依賴吭从,如果不寫 version 則使用父POM定義的version,如果子模塊的依賴寫了version則使用子模塊的。
-->
<dependencyManagement>
<dependencies>
<!--該依賴?yán)锩嫫鋵?shí)還包含了很多其它的依賴恶迈,這里只是為了示范涩金,生產(chǎn)環(huán)境可以細(xì)化,只添加需要的依賴-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot-version}</version>
</dependency>
<!--定義子模塊包暇仲,其他子模塊可以引用-->
<dependency>
<groupId>com.liangyt</groupId>
<artifactId>service</artifactId>
<version>${service-version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java-version}</source>
<target>${java-version}</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
配置了兩個(gè)子模塊的POM,provide引用了service模塊,service和provide配置信息如下:
<?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">
<!--繼承的父模塊-->
<parent>
<artifactId>maven-multi-module</artifactId>
<groupId>com.liangyt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<!--一般跟父模塊下的模塊名一致步做,也是其它模塊引用的名稱-->
<artifactId>service</artifactId>
<!--
發(fā)版的版本號(hào),如果重新發(fā)布了新的版本,則父模塊添加的該依賴需要新的版本的話還需要相應(yīng)的修改一下才能引用新的發(fā)布包
-->
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<!--
需要哪個(gè)依賴就添加哪個(gè)依賴:
如果父模塊里面有該依賴的話奈附,則只要不填寫版本則跟父模塊版本一樣全度;
如果寫了版本號(hào),則跟父模塊沒有什么關(guān)系斥滤;
-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
<?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">
<parent>
<artifactId>maven-multi-module</artifactId>
<groupId>com.liangyt</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>provide</artifactId>
<dependencies>
<!--引用service模塊-->
<dependency>
<groupId>com.liangyt</groupId>
<artifactId>service</artifactId>
</dependency>
</dependencies>
</project>
進(jìn)到service目錄執(zhí)行以下語(yǔ)句則把service打包了讼载,并放到倉(cāng)庫(kù)下:
mvn install
這個(gè)如果給provide打包的話則會(huì)自動(dòng)把service包添加進(jìn)去了。