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


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

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

而目前公司又分各套環境(dev、test、product),所以希望打包的時候 根據profile id 來動態使用不同環境properties文件 或者動態修改properties參數值

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





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



我們還要啟動resources的filter過濾器:


按照上述配置后,我們執行maven打包操作后:


我們可以看到mongoDBConfig.properties、redisConfig.properties、zkConfig.properties等文件都被替換到指定環境的參數了

由於 有些老系統會在項目中的resources下指定各套環境配置文件,如下圖片:


但是我們打包后 只希望將指定環境下的*.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用的時間倒是很長,但大多時間都是一次配置后,再沒有修改后,然后開發項目,但有些細節 最終沒有研究那么明白

文章寫的有點水,希望對您受用,謝謝


版權聲明:本文為博主原創文章,未經博主允許不得轉載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM