maven 多配置文件設置

maven項目一般都會有線上環境跟測試環境

這裏寫圖片描述

比如上圖所示,單獨的一個配置模塊。配置文件分爲開發環境(dev)跟線上環境(pro)。

我們如果是在本機跑程序,跑的字節碼文件來自於target/classes文件,需要把dev文件下面的配置文件copy到target/classes文件下(類路徑)。
我們如果是要在線上跑程序,需要在本地打jar包。此時jar包中的配置文件要來自pro文件夾下面。

爲了實現以上訴求,需要做到以下兩點:
1,自定義一個變量,這個變量可以根據我們的選擇而變。如mvn命令中的-P選項。所以需要定義一個profile
2,需要一個插件,這個插件在編譯程序時,能夠將我們源程序路徑中的配置文件發佈到程序中。這就是resource插件

說明一下,對於自定義變量,最好是定義在父項目中。
對於resource插件,有人說這是一個copy資源的插件,他確實可以copy資源,如這個插件有一個目標(goal)爲copy-resources。不過我們這裏使用的是其resources goal。其作用是將指定的資源發佈到程序的類路徑下。

<profiles>
        <profile>
            <id>pro</id>
            <properties>
                <config.active>pro</config.active>
            </properties>
        </profile>
        <profile>
            <id>dev</id>
            <properties>
                <config.active>dev</config.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
    </profiles>
 <resources>
            <!--
                在編譯的時候不去管排除的這些文件
                <directory>標籤是指定要發佈的資源文件的目錄
            -->
            <resource>
                <directory>${basedir}/src/main/resources/</directory>
                <excludes>
                    <exclude>dev/*</exclude>
                    <exclude>pro/*</exclude>
                </excludes>
            </resource>
            <!--
                在編譯的時候將指定路徑下的文件編譯到應用程序的classpath路徑下
                打包也是一樣的邏輯
                <directory>標籤是指定要發佈的資源文件的目錄
            -->
            <resource>
                <directory>${basedir}/src/main/resources/${config.active}</directory>
            </resource>
        </resources>

在idea IDE中,如果A模塊依賴於config模塊,那麼A模塊每次編譯,都會先編譯config模塊。所以在運行A模塊時,需要注意profile所自定義變量的值。

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