需求:
搭建一個多模塊項目,包含下面三個模塊
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.