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所自定義變量的值。