需求:資源文件根據不同的環境進行拆分,打包的時候只想根據目標環境將需要的資源文件包含進去。具體的資源環境如下圖所示。
解決方案:
- pom.xml文件配置
首先是在待打包的資源文件中排除掉application-*.yml,
<resource> <directory>src/main/resources</directory> <excludes> <exclude>application-*.yml</exclude> <!--<exclude>dev/*</exclude>--><!--打包的時候排除特定文件下的文件--> </excludes> </resource>
然后再另起一個resource配置節,指向相同的文件夾,再將需要的配置文件包含進去
<resource> <directory>src/main/resources</directory> <includes> <include>application.yml</include> <include>application-${project}*.yml</include> </includes> </resource>
其中include節中*的意義表示通配符,如果想精確的打包某個yml文件,project變量保證全稱即可,但是如果想打包pro開頭的就設置project為pro就行了。
另外,默認情況下,要將所有的yml文件都build到target目錄下,此時需要配置一個profile節,如下:
<profile> <id>dev-default</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <project> </project> </properties> </profile>
其中,project變量配置為空,這樣配合resource節中的application-${project}*.yml配置,就會把application-開頭的yml文件都build到指定的target文件夾下。
完整配置如下:
<build> <finalName>webTrainUse</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork : 如果沒有該項配置devtools不會起作用,即應用不會restart --> <fork>true</fork> <addResources>true</addResources><!--支持靜態文件熱部署 --> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-deploy-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> <resources> <resource> <directory>src/main/webapp</directory> </resource> <resource> <directory>src/main/resources</directory> <excludes> <exclude>application-*.yml</exclude> <!--<exclude>dev/*</exclude>--><!--打包的時候排除特定文件下的文件--> </excludes> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>application.yml</include> <include>application-${project}*.yml</include> <!--注意這里有個通配符 --> </includes> </resource> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> <!--定義打包環境變量,生產環境、測試環境、開發環境--> <profiles> <profile> <id>dev</id> <activation> <activeByDefault>true</activeByDefault> </activation> <properties> <project>*</project><!--project為*,就可以將所有的yml文件都會build到指定的文件夾下--> </properties> </profile> <profile> <id>test</id> <properties> <project>test</project> </properties> </profile> <profile> <id>pro</id> <properties> <project>pro</project> </properties> </profile> </profiles>
2.mvn命令打包
mvn clean package -Ppro
其中-P后面的pro對應的是pom文件中profiles節中profile的id為pro的配置,其對應的project為produce,所以在下面的配置中的${project}就會被替換為
<resource> <directory>src/main/resources</directory> <includes> <include>application.yml</include> <include>application-${project}.yml</include> </includes> </resource>
使用mvn的前提是配置好了MAVEN_HOME環境變量:
如果需要指定的maven配置文件,則mvn命令格式如下:
mvn clean –s D:\apache-maven-3.5.3\settings2.xml package –Ppro
打完包之后的文件目錄如下:
idea中設置參數進行打包
Maven Projects窗口中,右鍵要打包的項目中的pacekage,在右鍵菜單中可以看到create***的選項,如下圖:
點擊該選項之后,首先編寫一個Name名稱,如pro-outer,然后在彈出的菜單中編寫Command Line命令行參數,在輸入框中增加-Ppro-outer,pro-outer就是pom中profile節中的id值,如下圖:
然后點擊該窗口的applay按鈕,關閉該窗口,然后在idea的工具類中可以看到如下圖所示的內容
點擊運行按鈕,則執行打包操作
注意:
多模塊項目,注意profile的id名稱不要重復,否則在idea開發環境下會出異常,解決方式是在idea的maven-project窗口的最上方的profile文件夾,勾選要build到target文件夾的資源文件
參考地址:
https://blog.csdn.net/a286352250/article/details/51734385/
https://www.cnblogs.com/lionsblog/p/10214751.html