maven 根據P參數值打包動態修改properties文件中值或必定properties

因爲本人 最近忙着公司事情,昨天沒有寫博客,今天就繼續寫吧web

需求:因爲最近開發clover項目 ,沒有使用spring,更沒有使用任何框架,而使用J2EE的web工程,因此鏈接ZK和MongoDB、Redis等服務器需用指定properties文件,redis

而目前公司又分各套環境(dev、test、product),因此但願打包的時候 根據profile id 來動態使用不一樣環境properties文件 或者動態修改properties參數值spring

方法一:使用一套properties配置文件,但具體參數使用${key}佔位符方式打包替換apache





maven的pom中指定每套環境的參數值服務器



咱們還要啓動resources的filter過濾器:框架


按照上述配置後,咱們執行maven打包操做後:maven


咱們能夠看到mongoDBConfig.properties、redisConfig.properties、zkConfig.properties等文件都被替換到指定環境的參數了ui

因爲 有些老系統會在項目中的resources下指定各套環境配置文件,以下圖片:spa


可是咱們打包後 只但願將指定環境下的*.properties文件都移動到classes下,因此能夠考慮使用方法二插件

方法二:使用maven-antrun-plugin插件方式實現

咱們只在打包dev環境:

咱們要指定resources.dir目錄爲src/main/resources/dev

咱們增長一個plugin 爲maven-antrun-plugin,因爲我只要在子工程clover-core下面移動這幾個文件,最終打成一個jar包,因此要把這個plugin代碼放在clover-core下的pom.xml文件,若是把這個plugin放在父工程的pom.xml下那就移動全部的子工程下resources文件


仍是貼上代碼吧:

<build>    <finalName>clover-core-${clover.version}</finalName>    <plugins>        <plugin>            <groupId>org.apache.maven.plugins</groupId>            <artifactId>maven-antrun-plugin</artifactId>            <executions>                <execution>                    <id>compile</id>                    <phase>compile</phase>                    <configuration>                        <tasks>                            <echo message="********************** copy resources to classpath*************************"/>                            <echo message="********************** copy ${resources.dir} to classpath*************************"/>                            <copy todir="target/classes" overwrite="true">                                <fileset dir="${resources.dir}">                                    <include name="*.*"/>                                    <include name="*/*.*"/>                                </fileset>                            </copy>                        </tasks>                    </configuration>                    <goals>                        <goal>run</goal>                    </goals>                </execution>            </executions>        </plugin>    </plugins>    <resources>        <resource>            <directory>src/main/resources</directory>            <filtering>true</filtering>        </resource>    </resources></build>


咱們執行打包後:


咱們能夠看到clover-core下已經將這幾個*.properties移動到classes下了

我的仍是比較推薦第一種方式

PS:有的時候 咱們想經過動態打包,生成的子工程的名字是帶各套環境, 好比:clover-core-dev-1.0.jar

咱們在父工程的profile下設置clover.version


子工程clover-core想最終打包是clover.version指定的環境+版本號:


<version>${clover.version}</version>  ---這個將會打包後deploy中央私庫後最終的version
<finalName>clover-core-${clover.version}</finalName> --這個就是子工程clover-core打包最終名字


咱們執行打包後:

私庫


當咱們打war包的時候,咱們也能夠指定依賴模塊的版本號:


咱們這裏面使用的 profile配置的環境version,但讓你想本身改爲別的版本,你打包後就能夠看到某個依賴的jar包就是你指定的版本

咱們把clover-core的版本改爲dev-1.0 


再把clover-core的pom.xml 


打包後 咱們看下war包中:


但我看下clover-core子工程下的target:


原來是這樣的

maven用的時間卻是很長,但大多時間都是一次配置後,再沒有修改後,而後開發項目,但有些細節 最終沒有研究那麼明白

文章寫的有點水,但願對您受用,謝謝

相關文章
相關標籤/搜索