maven裏如何根據不同的environment打包

maven裏如何根據不同的environment打包


一個項目裏總會有很多配置文件。而且一般都會有多套環境。開發的、測試的、正式的。而在這些不同的環境這些配置的值都會不一樣。比如mail的配置、服務的url配置這些都是很常見的。所以在打包的時候就要根據environment來選不同的值或者配置文件。

比較常用的辦法就是爲不同的環境建立不同的配置文件目錄。在打包的時候用對應的文件目錄下的配置文件。

|-- resources
|   |-- dev
|   |-- product
|   |-- qa
|   `-- qa53

以前用ant的時候打包的時候處理就比較方便。打包前copy一下對應目錄下的配置文件覆蓋target下的那些文件再打包就可以了。在剛開始用maven的時候就想要怎麼解決,一直沒有找到ant的這種方式的可行的辦法。其實主要是按ant這種處理方法去思考了。只去想沒有有cp這種target。其實在maven裏用profile就可以解決了。對於不同的environment定義不同的profile就ok了,目錄結構還是沿用原來的就可以。

在pom.xml裏定義一個變量

    <properties>
      ......
       <package.environment>qa53</package.environment>
    </properties>

這裏定義的值是經常打包的一個profile,方便少敲點代碼。然後定義一些profile

    <profiles>
                <profile>
                    <id>product</id>
                        <properties>
                                <package.environment>product</package.environment>
                        </properties>
                </profile>
                <profile>
                    <id>dev</id>
                        <properties>
                                <package.environment>dev</package.environment>
                        </properties>
                </profile>
                <profile>
                    <id>qa</id>
                        <properties>
                                <package.environment>qa</package.environment>
                        </properties>
                </profile>
        </profiles>

最後再修改一下打包的plugin,引用這個變量。

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <archive>
                        <addMavenDescriptor>false</addMavenDescriptor>
                    </archive>
                    <webResources>
                        <resource>
                            <!-- this is relative to the pom.xml directory -->
                            <directory>src/main/resources/${package.environment}</directory>
                            <targetPath>WEB-INF/classes</targetPath>
                            <filtering>true</filtering>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>

這裏注意一個參數<filtering>true</filtering>,一定要設置成true這樣纔會用對應environment目錄下的配置文件覆蓋原來的。ok。mvn package的時候就會用默認的qa53目錄下的配置文件。如果要發佈正式環境的包就運行。mvn -Pproduct package

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