需求:
搭建一個多模塊項目,包含下面三個模塊
sync-common
sync-mimall
sync-youpin
1、先搭建父工程
方式一、SpringBoot
1)File-New-Project-Spring Initializr

2)Next
選擇打包方式(jar/war),Artifact/Name 工程名稱,包路徑等信息

3)Next
選擇SpringBoot版本

4)Next
確認工程名稱和工程本地存儲路徑,然后點擊Finish父工程即創建完成

5)刪掉src目錄
因為我們創建的是父工程,只作為管理工程,里面還有子模塊,因此不需要src目錄,刪掉即可
6)修改pom.xml
<groupId>com.xiaomi.mitv.mall.sync</groupId>
<artifactId>mitv-mall-sync</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>mitv-mall-sync</name>
<packaging>pom</packaging> <!--修改jar為pom-->
<description>Demo project for Spring Boot</description>
方式二、maven
1)File-New-Project-Maven

2)Next

3)Next
確認工程名,然后點擊finish即完成

4)刪除src目錄
2、創建啟動子模塊(可部署)
1)在創建的工程名上右鍵 New-Module-Spring Initializr
2)Next
輸入模塊名,包名等相關信息

3)Next
選擇SpringBoot版本和相關依賴,如果是Web項目,選擇Web依賴
4)Next
確認模塊名和模塊路徑,點擊Finish完成
5)在父pom.xml中添加剛創建的子模塊
<modules>
<module>sync-common</module>
<module>sync-mimall</module>
<module>sync-youpin</module>
</modules>
6)修改子模塊pom.xml parent
<parent>
<artifactId>mitv-mall-sync</artifactId>
<groupId>com.xiaomi.mitv.mall.sync</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
3、創建普通子模塊(僅作為啟動模塊的依賴,如common模塊)
1)在創建的工程名上右鍵 New-Module-Maven

2)Next

3)Next
確認模塊名,點擊Finish即完成。父pom.xml中會自動在modules標簽內添加新增的子模塊

4)修改子模塊pom.xml parent
<parent>
<artifactId>mitv-mall-sync</artifactId>
<groupId>com.xiaomi.mitv.mall.sync</groupId>
<version>0.0.1-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>
5)若不需要,如common模塊,刪除resources和test 目錄
4、區分環境配置
1)項目結構

新建sync-deploy目錄,里面包含三個環境的配置
2)其中一個部署模塊的pom配置
<build>
<!--指定配置文件的地址,里面的配置會作為參數替換其他配置文件的占位符-->
<filters>
<filter>../sync-deploy/config/${active.env}/config.properties</filter> <!-- 多個文件可配置多個filter -->
</filters>
<resources>
<resource>
<directory>${basedir}/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<active.env>dev</active.env>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/classes</outputDirectory>
<!--資源過濾-->
<resources>
<resource>
<directory>../sync-deploy/config/dev</directory>
<filtering>true</filtering>
<includes>
<include>logback.xml</include>
<include>redis.properties</include> <!-- 把需要的copy過來 -->
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>pre</id>
<properties>
<active.env>pre</active.env>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!--復制到哪去-->
<outputDirectory>${basedir}/target/classes</outputDirectory>
<!--資源過濾-->
<resources>
<resource>
<directory>../sync-deploy/config/pre</directory>
<filtering>true</filtering>
<!--復制哪些文件過來-->
<includes>
<include>logback.xml</include>
<include>redis.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>prd</id>
<properties>
<active.env>prd</active.env>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>validate</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!--復制到哪去-->
<outputDirectory>${basedir}/target/classes</outputDirectory>
<!--資源過濾-->
<resources>
<resource>
<directory>../sync-deploy/config/prd</directory>
<filtering>true</filtering>
<!--復制哪些文件過來-->
<includes>
<include>logback.xml</include>
<include>redis.properties</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
3)打包后,將對應環境下的文件復制進了target/classes目錄中,並解析了其中的占位符

END.
