maven根據環境打包配置文件+多配置文件

maven根據環境打包配置文件+多配置文件

git項目地址

目的一:maven根據環境打包配置文件

闡述:在開發過程中,不同環境下的配置是不同的,如DataSource,cache,mq等等,所以我們需要根據不同的環境讀取不同的配置打包發佈。
爲了實現這個目的,我們需要依賴maven的一個插件maven-resources-plugin,另外我們需要定義不同的環境profile.

參考文件:

  1. Apache Maven Resources Plugin
  2. Maven根據不同環境打包不同配置文件
步驟
  1. 在父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標籤去掉

  1. 建立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
  1. 通過maven打包

執行maven命令:

mvn clean [package|install|deploy] -Dmaven.test.skip=true -P [dev|test|prod]

就可以按環境打包配置了。

目的二:多配置文件

通過spring.profiles.include 我們可以讀取多個指定配置文件。

步驟
  1. 在resources下配置共同的配置文件如banner.txt(這裏跳過),啓動文件application.yml(如果這個不同,請放在env/[dev|test|prod]下)
    application.yml配置文件如下:
    spring:
       profiles:
         include: datasource,web       #包含的文件名(application-name.yml)取name
       application:
         name: Multi-Env
    
  2. 在env下創建
    dev,test,prod文件夾,每個文件夾包含application-datasource,application-web配置文件,示例在test環境下,
    application-datasource.yml代碼如下:
    spring:
       datasource:
         url: test-url
         username: test-username
         password: test-password
    
    application-web.yml代碼如下:
    server:
       port: 9020
    
    dev和prod雷同。

最後的目錄結構如下(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對應的項目下執行,本項目在父項目上執行

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章