maven根據環境打包配置文件+多配置文件
目的一:maven根據環境打包配置文件
闡述:在開發過程中,不同環境下的配置是不同的,如DataSource,cache,mq等等,所以我們需要根據不同的環境讀取不同的配置打包發佈。
爲了實現這個目的,我們需要依賴maven的一個插件maven-resources-plugin,另外我們需要定義不同的環境profile.
參考文件:
步驟
- 在父pom中導入plugin,代碼如下:
<build>
<resources>
<!-- 先對主資源目錄進行過濾。env下的所有內容都不打包 -->
<resource>
<directory>src/main/resources/</directory>
<excludes>
<exclude>env/</exclude>
</excludes>
</resource>
<!-- 之後再根據配置選擇具體的 env 目錄,maven 會根據該配置複製到資源根目錄 -->
<resource>
<directory>src/main/resources/env/${package.environment}</directory>
</resource>
</resources>
<!--這是在父pom中 -->
<pluginManagement>
<plugins>
<!-- 別的plugin寫在下面*位置 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<phase>compile</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<!-- 覆蓋原有文件 -->
<overwrite>true</overwrite>
<outputDirectory>${project.build.outputDirectory}</outputDirectory>
<!-- 也可以用下面這樣的方式(指定相對url的方式指定outputDirectory) <outputDirectory>target/classes</outputDirectory> -->
<!-- 待處理的資源定義 -->
<resources>
<resource>
<!-- 指定resources插件處理哪個目錄下的資源文件 -->
<directory>src/main/resources/env/${package.environment}</directory>
<filtering>true</filtering>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<!--over-->
</plugins>
</pluginManagement>
</build>
在實際的項目pom中,導入
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
</plugins>
</build>
注意:也可以直接導入父pom中的build依賴,但是把pluginManagement標籤去掉
- 建立profile
在pom.xml中,你可以在父pom(推薦),也可以在子pom.xml中定義
<profiles>
<profile>
<id>dev</id>
<properties>
<package.environment>dev</package.environment>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
<profile>
<id>test</id>
<properties>
<package.environment>test</package.environment>
</properties>
</profile>
<profile>
<id>prod</id>
<properties>
<package.environment>prod</package.environment>
</properties>
</profile>
</profiles>
package.environment用來在plugin中定義的resource標籤內容中的directory引用,要和對應的配置目錄一致。當前resources目錄爲:
└─resources
└─env
├─dev
├─prod
└─test
- 通過maven打包
執行maven命令:
mvn clean [package|install|deploy] -Dmaven.test.skip=true -P [dev|test|prod]
就可以按環境打包配置了。
目的二:多配置文件
通過spring.profiles.include 我們可以讀取多個指定配置文件。
步驟
- 在resources下配置共同的配置文件如banner.txt(這裏跳過),啓動文件application.yml(如果這個不同,請放在env/[dev|test|prod]下)
application.yml配置文件如下:spring: profiles: include: datasource,web #包含的文件名(application-name.yml)取name application: name: Multi-Env
- 在env下創建
dev,test,prod文件夾,每個文件夾包含application-datasource,application-web配置文件,示例在test環境下,
application-datasource.yml代碼如下:
application-web.yml代碼如下:spring: datasource: url: test-url username: test-username password: test-password
dev和prod雷同。server: port: 9020
最後的目錄結構如下(resources)
│ application.yml
│
└─env
├─dev
│ application-datasource.yml
│ application-web.yml
│
├─prod
│ application-datasource.yml
│ application-web.yml
│
└─test
application-datasource.yml
application-web.yml
驗證
執行如下命令
mvn clean package -Dmaven.test.skip=true -P test
target下classes代碼結構如下:
│ application-datasource.yml
│ application-web.yml
│ application.yml
│
└─com
com表示自定義java類生成的class文件,查看datasource和web配置文件,和resources配置文件一樣。
注意:執行maven命令請在profile所在的pom.xml對應的項目下執行,本項目在父項目上執行